Backed out changeset f75d3d084662 (bug 1593969) for causing toolchain bustages in /builds/worker/workspace/build/src/dom/base/nsWindowMemoryReporter.cpp CLOSED TREE

This commit is contained in:
shindli 2019-11-18 19:03:51 +02:00
Родитель 40f1b26958
Коммит 01b6ae750c
1 изменённых файлов: 48 добавлений и 37 удалений

Просмотреть файл

@ -116,61 +116,65 @@ nsWindowMemoryReporter* nsWindowMemoryReporter::Get() {
return sWindowReporter;
}
static nsCString GetWindowURISpec(nsGlobalWindowInner* aWindow) {
NS_ENSURE_TRUE(aWindow, NS_LITERAL_CSTRING(""));
static already_AddRefed<nsIURI> GetWindowURI(nsGlobalWindowInner* aWindow) {
NS_ENSURE_TRUE(aWindow, nullptr);
nsCOMPtr<Document> doc = aWindow->GetExtantDoc();
if (doc) {
nsCOMPtr<nsIURI> uri;
if (doc) {
uri = doc->GetDocumentURI();
return uri->GetSpecOrDefault();
}
if (!uri) {
nsCOMPtr<nsIScriptObjectPrincipal> scriptObjPrincipal =
do_QueryObject(aWindow);
NS_ENSURE_TRUE(scriptObjPrincipal, NS_LITERAL_CSTRING(""));
NS_ENSURE_TRUE(scriptObjPrincipal, nullptr);
// GetPrincipal() will print a warning if the window does not have an outer
// window, so check here for an outer window first. This code is
// functionally correct if we leave out the GetOuterWindow() check, but we
// end up printing a lot of warnings during debug mochitests.
if (!aWindow->GetOuterWindow()) {
return NS_LITERAL_CSTRING("");
}
if (aWindow->GetOuterWindow()) {
nsIPrincipal* principal = scriptObjPrincipal->GetPrincipal();
if (!principal) {
return NS_LITERAL_CSTRING("");
if (principal) {
principal->GetURI(getter_AddRefs(uri));
}
nsCString spec;
principal->GetAsciiSpec(spec);
return spec;
}
}
return uri.forget();
}
// Forward to the inner window if we need to when getting the window's URI.
static nsCString GetWindowURISpec(nsGlobalWindowOuter* aWindow) {
NS_ENSURE_TRUE(aWindow, NS_LITERAL_CSTRING(""));
return GetWindowURISpec(aWindow->GetCurrentInnerWindowInternal());
static already_AddRefed<nsIURI> GetWindowURI(nsGlobalWindowOuter* aWindow) {
NS_ENSURE_TRUE(aWindow, nullptr);
return GetWindowURI(aWindow->GetCurrentInnerWindowInternal());
}
static void AppendWindowURI(nsGlobalWindowInner* aWindow, nsACString& aStr,
bool aAnonymize) {
nsCString spec = GetWindowURISpec(aWindow);
nsCOMPtr<nsIURI> uri = GetWindowURI(aWindow);
if (spec.IsEmpty()) {
// If we're unable to find a URI, we're dealing with a chrome window with
// no document in it (or somesuch), so we call this a "system window".
aStr += NS_LITERAL_CSTRING("[system]");
return;
}
if (uri) {
if (aAnonymize && !aWindow->IsChromeWindow()) {
aStr.AppendPrintf("<anonymized-%" PRIu64 ">", aWindow->WindowID());
return;
}
} else {
nsCString spec = uri->GetSpecOrDefault();
// A hack: replace forward slashes with '\\' so they aren't
// treated as path separators. Users of the reporters
// (such as about:memory) have to undo this change.
spec.ReplaceChar('/', '\\');
aStr += spec;
}
} else {
// If we're unable to find a URI, we're dealing with a chrome window with
// no document in it (or somesuch), so we call this a "system window".
aStr += NS_LITERAL_CSTRING("[system]");
}
}
MOZ_DEFINE_MALLOC_SIZE_OF(WindowsMallocSizeOf)
@ -223,11 +227,18 @@ static void CollectWindowReports(nsGlobalWindowInner* aWindow,
// Avoid calling aWindow->GetInProcessTop() if there's no outer window. It
// will work just fine, but will spew a lot of warnings.
nsGlobalWindowOuter* top = nullptr;
nsCOMPtr<nsIURI> location;
if (aWindow->GetOuterWindow()) {
// Our window should have a null top iff it has a null docshell.
MOZ_ASSERT(!!aWindow->GetInProcessTopInternal() ==
!!aWindow->GetDocShell());
top = aWindow->GetInProcessTopInternal();
if (top) {
location = GetWindowURI(top);
}
}
if (!location) {
location = GetWindowURI(aWindow);
}
windowPath += NS_LITERAL_CSTRING("window-objects/");