Bug 1484363: Treat FrameMessageManagers as chrome event targets. r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D3663

--HG--
extra : rebase_source : aad2e4c00e6635658c736cf9400f2fb3ce5809ac
This commit is contained in:
Kris Maglione 2018-08-17 15:11:11 -07:00
Родитель f90c2a2950
Коммит 7f10bb1ced
2 изменённых файлов: 16 добавлений и 14 удалений

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

@ -51,11 +51,11 @@ function prepareForVisibilityEvents(browser, expectedOrder) {
rmvHide = BrowserTestUtils.addContentEventListener(browser, "pagehide",
() => eventListener("pagehide"),
{mozSystemGroup: true}, checkFn,
{}, checkFn,
false, false);
rmvShow = BrowserTestUtils.addContentEventListener(browser, "pageshow",
() => eventListener("pageshow"),
{mozSystemGroup: true}, checkFn,
{}, checkFn,
false, false);
});
}
@ -95,7 +95,7 @@ add_task(async function test_swap_frameloader_pagevisibility_events() {
await ContentTask.spawn(emptyBrowser, {}, async() => {
if (content.document.visibilityState === "hidden") {
info("waiting for hidden emptyBrowser to pageshow");
await ContentTaskUtils.waitForEvent(content, "pageshow", {mozSystemGroup: true});
await ContentTaskUtils.waitForEvent(content, "pageshow", {});
}
});

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

@ -12,6 +12,7 @@
#include "nsIContentInlines.h"
#include "nsIDocument.h"
#include "nsINode.h"
#include "nsIScriptObjectPrincipal.h"
#include "nsPIDOMWindow.h"
#include "AnimationEvent.h"
#include "BeforeUnloadEvent.h"
@ -104,22 +105,23 @@ static bool IsEventTargetChrome(EventTarget* aEventTarget,
}
nsIDocument* doc = nullptr;
nsCOMPtr<nsINode> node = do_QueryInterface(aEventTarget);
if (node) {
if (nsCOMPtr<nsINode> node = do_QueryInterface(aEventTarget)) {
doc = node->OwnerDoc();
} else {
nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aEventTarget);
if (!window) {
return false;
}
} else if (nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aEventTarget)) {
doc = window->GetExtantDoc();
}
// nsContentUtils::IsChromeDoc is null-safe.
bool isChrome = nsContentUtils::IsChromeDoc(doc);
if (aDocument && doc) {
nsCOMPtr<nsIDocument> retVal = doc;
retVal.swap(*aDocument);
bool isChrome = false;
if (doc) {
isChrome = nsContentUtils::IsChromeDoc(doc);
if (aDocument) {
nsCOMPtr<nsIDocument> retVal = doc;
retVal.swap(*aDocument);
}
} else if (nsCOMPtr<nsIScriptObjectPrincipal> sop =
do_QueryInterface(aEventTarget->GetOwnerGlobal())) {
isChrome = nsContentUtils::IsSystemPrincipal(sop->GetPrincipal());
}
return isChrome;
}