From 7f10bb1ced5a378233474996478aba4acf5e9bb6 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Fri, 17 Aug 2018 15:11:11 -0700 Subject: [PATCH] Bug 1484363: Treat FrameMessageManagers as chrome event targets. r=smaug Differential Revision: https://phabricator.services.mozilla.com/D3663 --HG-- extra : rebase_source : aad2e4c00e6635658c736cf9400f2fb3ce5809ac --- dom/base/test/browser_bug1058164.js | 6 +++--- dom/events/EventDispatcher.cpp | 24 +++++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/dom/base/test/browser_bug1058164.js b/dom/base/test/browser_bug1058164.js index 0252301b19cd..fce9d138b762 100644 --- a/dom/base/test/browser_bug1058164.js +++ b/dom/base/test/browser_bug1058164.js @@ -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", {}); } }); diff --git a/dom/events/EventDispatcher.cpp b/dom/events/EventDispatcher.cpp index c64592298a6b..f5d9f3f2a39b 100644 --- a/dom/events/EventDispatcher.cpp +++ b/dom/events/EventDispatcher.cpp @@ -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 node = do_QueryInterface(aEventTarget); - if (node) { + if (nsCOMPtr node = do_QueryInterface(aEventTarget)) { doc = node->OwnerDoc(); - } else { - nsCOMPtr window = do_QueryInterface(aEventTarget); - if (!window) { - return false; - } + } else if (nsCOMPtr window = do_QueryInterface(aEventTarget)) { doc = window->GetExtantDoc(); } // nsContentUtils::IsChromeDoc is null-safe. - bool isChrome = nsContentUtils::IsChromeDoc(doc); - if (aDocument && doc) { - nsCOMPtr retVal = doc; - retVal.swap(*aDocument); + bool isChrome = false; + if (doc) { + isChrome = nsContentUtils::IsChromeDoc(doc); + if (aDocument) { + nsCOMPtr retVal = doc; + retVal.swap(*aDocument); + } + } else if (nsCOMPtr sop = + do_QueryInterface(aEventTarget->GetOwnerGlobal())) { + isChrome = nsContentUtils::IsSystemPrincipal(sop->GetPrincipal()); } return isChrome; }