diff --git a/browser/base/content/test/chrome/test_aboutCrashed.xhtml b/browser/base/content/test/chrome/test_aboutCrashed.xhtml index df48694e38aa..8bad1ac80d91 100644 --- a/browser/base/content/test/chrome/test_aboutCrashed.xhtml +++ b/browser/base/content/test/chrome/test_aboutCrashed.xhtml @@ -57,7 +57,7 @@ frame1.docShell.chromeEventHandler.removeAttribute("crashedPageTitle"); SimpleTest.is(frame1.contentDocument.documentURI, - "about:tabcrashed?e=tabcrashed&u=http%3A//www.example.com/1&c=UTF-8&d=pageTitle", + "about:tabcrashed?e=tabcrashed&u=http%3A//www.example.com/1&c=UTF-8&f=regular&d=pageTitle", "Correct about:tabcrashed displayed for page with title."); errorPageReady = waitForErrorPage(frame2); @@ -66,7 +66,7 @@ await errorPageReady; SimpleTest.is(frame2.contentDocument.documentURI, - "about:tabcrashed?e=tabcrashed&u=http%3A//www.example.com/2&c=UTF-8&d=%20", + "about:tabcrashed?e=tabcrashed&u=http%3A//www.example.com/2&c=UTF-8&f=regular&d=%20", "Correct about:tabcrashed displayed for page with no title."); SimpleTest.finish(); diff --git a/browser/base/content/test/chrome/test_aboutRestartRequired.xhtml b/browser/base/content/test/chrome/test_aboutRestartRequired.xhtml index 4b8293e45001..17cd84bd73ac 100644 --- a/browser/base/content/test/chrome/test_aboutRestartRequired.xhtml +++ b/browser/base/content/test/chrome/test_aboutRestartRequired.xhtml @@ -55,7 +55,7 @@ frame1.docShell.chromeEventHandler.removeAttribute("crashedPageTitle"); SimpleTest.is(frame1.contentDocument.documentURI, - "about:restartrequired?e=restartrequired&u=http%3A//www.example.com/1&c=UTF-8&d=%20", + "about:restartrequired?e=restartrequired&u=http%3A//www.example.com/1&c=UTF-8&f=regular&d=%20", "Correct about:restartrequired displayed for page with title."); errorPageReady = waitForErrorPage(frame2); @@ -64,7 +64,7 @@ await errorPageReady; SimpleTest.is(frame2.contentDocument.documentURI, - "about:restartrequired?e=restartrequired&u=http%3A//www.example.com/2&c=UTF-8&d=%20", + "about:restartrequired?e=restartrequired&u=http%3A//www.example.com/2&c=UTF-8&f=regular&d=%20", "Correct about:restartrequired displayed for page with no title."); SimpleTest.finish(); diff --git a/browser/components/contextualidentity/test/browser/browser_broadcastchannel.js b/browser/components/contextualidentity/test/browser/browser_broadcastchannel.js index 4bce3fbc7f96..e4c4fae7f653 100644 --- a/browser/components/contextualidentity/test/browser/browser_broadcastchannel.js +++ b/browser/components/contextualidentity/test/browser/browser_broadcastchannel.js @@ -18,6 +18,48 @@ async function openTabInUserContext(uri, userContextId) { return { tab, browser }; } +// Opens `uri' in a new '; + // For kicks, this test uses a display:none iframe. This shouldn't make a + // difference in anything. + iframe.style.display = "none"; + document.body.appendChild(iframe); +} + +var numMsgReceived = 0; +function outerIframeLoaded() { + // If you're changing the amount of is() calls in injectedScript, + // also change the number in waitForMessages accordingly + var injectedScript = + "data:,function is(a, b, desc) { \ + if (a == b) { \ + sendAsyncMessage('test:test-pass', desc); \ + } else { \ + sendAsyncMessage('test:test-fail', desc + ' ' + a + ' != ' + b); \ + } \ + } \ + is(content.window.top, content.window, 'top'); \ + is(content.window.content, content.window, 'content'); \ + is(content.window.parent, content.window, 'parent'); \ + is(content.window.frameElement, null, 'frameElement'); \ + var innerIframe = content.document.getElementById('inner-iframe'); \ + var innerWindow = innerIframe.contentWindow; \ + is(innerWindow.top, content.window, 'inner top'); \ + is(innerWindow.content, content.window, 'inner content'); \ + is(innerWindow.parent, content.window, 'inner parent'); \ + is(innerWindow.frameElement, innerIframe, 'inner frameElement');"; + + var mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + + function onRecvTestPass(msg) { + numMsgReceived++; + ok(true, msg.json); + } + mm.addMessageListener("test:test-pass", onRecvTestPass); + + function onRecvTestFail(msg) { + numMsgReceived++; + ok(false, msg.json); + } + mm.addMessageListener("test:test-fail", onRecvTestFail); + + mm.loadFrameScript(injectedScript, /* allowDelayedLoad = */ false); + + // 8 is the number of is() calls in injectedScript + waitForMessages(8); +} + +function waitForMessages(num) { + if (numMsgReceived < num) { + SimpleTest.executeSoon(function() { + waitForMessages(num); + }); + return; + } + + SimpleTest.finish(); +} + +addEventListener("testready", runTest); diff --git a/dom/browser-element/mochitest/browserElement_Viewmode.js b/dom/browser-element/mochitest/browserElement_Viewmode.js new file mode 100644 index 000000000000..710d386b1779 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Viewmode.js @@ -0,0 +1,74 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowsermetachange event for viewmode works. +"use strict"; + +/* global browserElementTestHelpers */ + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + function loadFrameScript(script) { + SpecialPowers.getBrowserFrameMessageManager(iframe1).loadFrameScript( + "data:," + script, + /* allowDelayedLoad = */ false + ); + } + + let iframe1 = document.createElement("iframe"); + iframe1.setAttribute("mozbrowser", "true"); + iframe1.src = + "http://test/tests/dom/browser-element/mochitest/file_browserElement_Viewmode.html"; + iframe1.addEventListener("mozbrowsermetachange", tests); + document.body.appendChild(iframe1); + + let numMetaChanges = 0; + function tests(e) { + let detail = e.detail; + + switch (numMetaChanges++) { + case 0: { + is(detail.name, "viewmode", "name matches"); + is(detail.content, "projection=stereo", "content matches"); + is(detail.type, "added", "type matches"); + + let script = + "var meta = content.document.head.querySelector('meta');" + + "meta.content = 'projection=mono';"; + loadFrameScript(script); + break; + } + + case 1: { + is(detail.name, "viewmode", "name matches"); + is(detail.content, "projection=mono", "content matches"); + is(detail.type, "changed", "type matches"); + + let script = + "var meta = content.document.head.querySelector('meta');" + + "meta.parentNode.removeChild(meta);"; + loadFrameScript(script); + break; + } + + case 2: { + is(detail.name, "viewmode", "name matches"); + is(detail.content, "projection=mono", "content matches"); + is(detail.type, "removed", "type matches"); + + SimpleTest.finish(); + break; + } + + default: { + ok(false, "Too many metachange events."); + break; + } + } + } +} + +window.addEventListener("testready", runTest); diff --git a/dom/browser-element/mochitest/browserElement_XFrameOptions.js b/dom/browser-element/mochitest/browserElement_XFrameOptions.js new file mode 100644 index 000000000000..a1a85700297c --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_XFrameOptions.js @@ -0,0 +1,28 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 770239 - Test that we can load pages with X-Frame-Options: Deny inside +// + + diff --git a/dom/browser-element/mochitest/file_browserElement_AlertInFrame_Inner.html b/dom/browser-element/mochitest/file_browserElement_AlertInFrame_Inner.html new file mode 100644 index 000000000000..9341eda00ff9 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_AlertInFrame_Inner.html @@ -0,0 +1,12 @@ + + +I'm file_browserElement_AlertInFrame_Inner.html. + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_CookiesNotThirdParty.html b/dom/browser-element/mochitest/file_browserElement_CookiesNotThirdParty.html new file mode 100644 index 000000000000..ff122f31a44f --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_CookiesNotThirdParty.html @@ -0,0 +1,23 @@ + + +file_browserElement_CookiesNotThirdParty.html + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_ForwardName.html b/dom/browser-element/mochitest/file_browserElement_ForwardName.html new file mode 100644 index 000000000000..cf7e07277cde --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_ForwardName.html @@ -0,0 +1,14 @@ + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_LoadEvents.html b/dom/browser-element/mochitest/file_browserElement_LoadEvents.html new file mode 100644 index 000000000000..a2bf2d3e1080 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_LoadEvents.html @@ -0,0 +1,15 @@ + + + + + +Aloha! My URL is . + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_Metachange.sjs b/dom/browser-element/mochitest/file_browserElement_Metachange.sjs new file mode 100644 index 000000000000..c63a047f7d23 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_Metachange.sjs @@ -0,0 +1,7 @@ +function handleRequest(request, response) +{ + var p = request.queryString.split('|'); + response.setHeader('Content-Language', p[0], false); + response.write(' 1 ? (' lang="' + p[1] + '"') : '') + '>'); +} diff --git a/dom/browser-element/mochitest/file_browserElement_PrivateBrowsing.html b/dom/browser-element/mochitest/file_browserElement_PrivateBrowsing.html new file mode 100644 index 000000000000..99432e2f2c4f --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_PrivateBrowsing.html @@ -0,0 +1,15 @@ + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_SecurityChange.html b/dom/browser-element/mochitest/file_browserElement_SecurityChange.html new file mode 100644 index 000000000000..050df0d3b88e --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SecurityChange.html @@ -0,0 +1,17 @@ + + + + + + + +file_browserElement_SecurityChange.html. + + diff --git a/dom/browser-element/mochitest/file_browserElement_SendEvent.html b/dom/browser-element/mochitest/file_browserElement_SendEvent.html new file mode 100644 index 000000000000..0f336c4010ad --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SendEvent.html @@ -0,0 +1,11 @@ + + + diff --git a/dom/browser-element/mochitest/file_browserElement_SetInputMethodActive.html b/dom/browser-element/mochitest/file_browserElement_SetInputMethodActive.html new file mode 100644 index 000000000000..5eb17e5f109f --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SetInputMethodActive.html @@ -0,0 +1,2 @@ + +

This is targetted mozbrowser frame.

diff --git a/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Inner.html b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Inner.html new file mode 100644 index 000000000000..d1cdf04fad70 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Inner.html @@ -0,0 +1,18 @@ + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_ThemeColor.html b/dom/browser-element/mochitest/file_browserElement_ThemeColor.html new file mode 100644 index 000000000000..f8fb9f116d06 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_ThemeColor.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_Viewmode.html b/dom/browser-element/mochitest/file_browserElement_Viewmode.html new file mode 100644 index 000000000000..422279e0ae28 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_Viewmode.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptions.sjs b/dom/browser-element/mochitest/file_browserElement_XFrameOptions.sjs new file mode 100644 index 000000000000..7e23756802ab --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptions.sjs @@ -0,0 +1,9 @@ +function handleRequest(request, response) +{ + response.setHeader("X-Frame-Options", request.queryString, false); + response.setHeader("Content-Type", "text/html", false); + + // Tests rely on this page not being entirely blank, because they take + // screenshots to determine whether this page was loaded. + response.write("XFrameOptions test"); +} diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.html b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.html new file mode 100644 index 000000000000..31920670d78c --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.html @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.sjs b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.sjs new file mode 100644 index 000000000000..4a5dbaaced4a --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.sjs @@ -0,0 +1,16 @@ +function handleRequest(request, response) +{ + var content = 'step 1'; + if (request.queryString == "iframe1") { + response.setHeader("X-Frame-Options", "Allow-From http://mochi.test:8888/") + content = 'finish'; + } else { + response.setHeader("X-Frame-Options", "Allow-From http://example.com") + } + + response.setHeader("Content-Type", "text/html", false); + + // Tests rely on this page not being entirely blank, because they take + // screenshots to determine whether this page was loaded. + response.write("XFrameOptions test"); +} diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsDeny.html b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsDeny.html new file mode 100644 index 000000000000..0f3c366f63c2 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsDeny.html @@ -0,0 +1,55 @@ + + + + + + + + + diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsSameOrigin.html b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsSameOrigin.html new file mode 100644 index 000000000000..11e75f141748 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsSameOrigin.html @@ -0,0 +1,5 @@ + + + + + diff --git a/dom/browser-element/mochitest/file_bug709759.sjs b/dom/browser-element/mochitest/file_bug709759.sjs new file mode 100644 index 000000000000..ce78b188b3a9 --- /dev/null +++ b/dom/browser-element/mochitest/file_bug709759.sjs @@ -0,0 +1,5 @@ +function handleRequest(request, response) +{ + response.processAsync(); + response.setHeader("Content-Type", "image/jpeg", false); +} \ No newline at end of file diff --git a/dom/browser-element/mochitest/file_bug741717.sjs b/dom/browser-element/mochitest/file_bug741717.sjs new file mode 100644 index 000000000000..bde9ddfaed49 --- /dev/null +++ b/dom/browser-element/mochitest/file_bug741717.sjs @@ -0,0 +1,27 @@ +function handleRequest(request, response) +{ + function etag(count) { + return '"anetag' + count + '"'; + } + + var count = parseInt(getState('count')); + if (!count) + count = 0; + + // reload(false) will make a request with If-None-Match headers + var ifNoneMatch = request.hasHeader("If-None-Match") ? + request.getHeader("If-None-Match") : ""; + + if (ifNoneMatch === etag(count)) { + response.setStatusLine(request.httpVersion, "304", "Not Modified"); + return; + } + + count++; + setState('count', count + ''); + + response.setHeader('Content-Type', 'text/html', false); + response.setHeader('Cache-Control', 'public, max-age=3600', false); + response.setHeader("ETag", etag(count), false); + response.write('' + count + ''); +} diff --git a/dom/browser-element/mochitest/file_empty.html b/dom/browser-element/mochitest/file_empty.html new file mode 100644 index 000000000000..b3a7ddd27c2b --- /dev/null +++ b/dom/browser-element/mochitest/file_empty.html @@ -0,0 +1,15 @@ + + + + + +Aloha! My URL is . + + + + + diff --git a/dom/browser-element/mochitest/file_empty_script.js b/dom/browser-element/mochitest/file_empty_script.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/dom/browser-element/mochitest/file_focus.html b/dom/browser-element/mochitest/file_focus.html new file mode 100644 index 000000000000..139904633002 --- /dev/null +++ b/dom/browser-element/mochitest/file_focus.html @@ -0,0 +1,24 @@ + + + +Aloha! My URL is . + + + + + diff --git a/dom/browser-element/mochitest/file_http_401_response.sjs b/dom/browser-element/mochitest/file_http_401_response.sjs new file mode 100644 index 000000000000..c40a252c3f04 --- /dev/null +++ b/dom/browser-element/mochitest/file_http_401_response.sjs @@ -0,0 +1,16 @@ +function handleRequest(request, response) +{ + var auth = ""; + try { + auth = request.getHeader("Authorization"); + } catch(e) {} + + if (auth == "Basic aHR0cHVzZXI6aHR0cHBhc3M=") { + response.setStatusLine("1.1", 200, "OK"); + response.write("http auth success"); + } else { + response.setStatusLine("1.1", 401, "Http authentication required"); + response.setHeader("WWW-Authenticate", "Basic realm=\"http_realm\""); + response.write("http auth failed"); + } +} \ No newline at end of file diff --git a/dom/browser-element/mochitest/file_http_407_response.sjs b/dom/browser-element/mochitest/file_http_407_response.sjs new file mode 100644 index 000000000000..da2f27620d2e --- /dev/null +++ b/dom/browser-element/mochitest/file_http_407_response.sjs @@ -0,0 +1,16 @@ +function handleRequest(request, response) +{ + var auth = ""; + try { + auth = request.getHeader("Proxy-Authorization"); + } catch(e) {} + + if (auth == "Basic cHJveHl1c2VyOnByb3h5cGFzcw==") { + response.setStatusLine("1.1", 200, "OK"); + response.write("http auth success"); + } else { + response.setStatusLine("1.1", 407, "Proxy Authentication Required"); + response.setHeader("Proxy-Authenticate", "Basic realm=\"http_realm\""); + response.write("http auth failed"); + } +} diff --git a/dom/browser-element/mochitest/file_post_request.html b/dom/browser-element/mochitest/file_post_request.html new file mode 100644 index 000000000000..8be28c811e2d --- /dev/null +++ b/dom/browser-element/mochitest/file_post_request.html @@ -0,0 +1,15 @@ + + + + + +
+ + +
+ + diff --git a/dom/browser-element/mochitest/mochitest-oop.ini b/dom/browser-element/mochitest/mochitest-oop.ini new file mode 100644 index 000000000000..6ac6538b8745 --- /dev/null +++ b/dom/browser-element/mochitest/mochitest-oop.ini @@ -0,0 +1,55 @@ +[DEFAULT] +# FIXME(bz, bug 1504026): now that we're not testing OpenMixedProcess, +# can we reenable these tests on Android and e10s? +skip-if = os == "android" || e10s + +[test_browserElement_oop_Viewmode.html] +[test_browserElement_oop_ThemeColor.html] +[test_browserElement_inproc_ErrorSecurity.html] +[test_browserElement_oop_Alert.html] +[test_browserElement_oop_AlertInFrame.html] +[test_browserElement_oop_Auth.html] +[test_browserElement_oop_BackForward.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_BrowserWindowResize.html] +[test_browserElement_oop_Close.html] +[test_browserElement_oop_CookiesNotThirdParty.html] +[test_browserElement_oop_CopyPaste.html] +[test_browserElement_oop_DataURI.html] +[test_browserElement_oop_DocumentFirstPaint.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_ErrorSecurity.html] +[test_browserElement_oop_FirstPaint.html] +[test_browserElement_oop_ForwardName.html] +[test_browserElement_oop_Iconchange.html] +[test_browserElement_oop_LoadEvents.html] +[test_browserElement_oop_Metachange.html] +[test_browserElement_oop_NoAudioTrack.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_Opensearch.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_PrivateBrowsing.html] +skip-if = true # Bug 1315042 +[test_browserElement_oop_PromptCheck.html] +[test_browserElement_oop_PromptConfirm.html] +[test_browserElement_oop_Reload.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_ReloadPostRequest.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_RemoveBrowserElement.html] +[test_browserElement_oop_ScrollEvent.html] +[test_browserElement_oop_SecurityChange.html] +skip-if = toolkit == 'android' #TIMED_OUT, bug 766586 +[test_browserElement_oop_SendEvent.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_Stop.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_Titlechange.html] +[test_browserElement_oop_TopBarrier.html] +[test_browserElement_oop_XFrameOptions.html] +[test_browserElement_oop_XFrameOptionsDeny.html] +disabled = Disabling some OOP tests for WebIDL scope changes (bug 1310706 for re-enabling) +[test_browserElement_oop_XFrameOptionsSameOrigin.html] +[test_browserElement_oop_ContextmenuEvents.html] +[test_browserElement_oop_ExposableURI.html] +skip-if = !e10s # Bug 1391349 diff --git a/dom/browser-element/mochitest/mochitest.ini b/dom/browser-element/mochitest/mochitest.ini new file mode 100644 index 000000000000..6e5588ec84b5 --- /dev/null +++ b/dom/browser-element/mochitest/mochitest.ini @@ -0,0 +1,100 @@ +[DEFAULT] +skip-if = e10s +support-files = + audio.ogg + ../../../dom/media/test/short-video.ogv + async.js + browserElementTestHelpers.js + browserElement_Alert.js + browserElement_AlertInFrame.js + browserElement_Auth.js + browserElement_Viewmode.js + browserElement_ThemeColor.js + browserElement_BrowserWindowResize.js + browserElement_Close.js + browserElement_ContextmenuEvents.js + browserElement_CookiesNotThirdParty.js + browserElement_CopyPaste.js + browserElement_DataURI.js + browserElement_DataURILoad.html + browserElement_DataURILoad.js + browserElement_ErrorSecurity.js + browserElement_ExposableURI.js + browserElement_FirstPaint.js + browserElement_ForwardName.js + browserElement_Iconchange.js + browserElement_LoadEvents.js + browserElement_Metachange.js + browserElement_Opensearch.js + browserElement_PrivateBrowsing.js + browserElement_PromptCheck.js + browserElement_PromptConfirm.js + browserElement_Reload.js + browserElement_RemoveBrowserElement.js + browserElement_ScrollEvent.js + browserElement_SecurityChange.js + browserElement_Titlechange.js + browserElement_TopBarrier.js + browserElement_XFrameOptions.js + browserElement_XFrameOptionsDeny.js + browserElement_XFrameOptionsSameOrigin.js + file_browserElement_AlertInFrame.html + file_browserElement_AlertInFrame_Inner.html + file_browserElement_Viewmode.html + file_browserElement_ThemeColor.html + file_browserElement_CookiesNotThirdParty.html + file_browserElement_ForwardName.html + file_browserElement_LoadEvents.html + file_browserElement_Metachange.sjs + file_browserElement_PrivateBrowsing.html + file_browserElement_SecurityChange.html + file_browserElement_XFrameOptions.sjs + file_browserElement_XFrameOptionsDeny.html + file_browserElement_XFrameOptionsSameOrigin.html + file_bug741717.sjs + file_empty.html + file_empty_script.js + file_focus.html + file_http_401_response.sjs + file_http_407_response.sjs + noaudio.webm + +# Note: browserElementTestHelpers.js looks at the test's filename to determine +# whether the test should be OOP. "_oop_" signals OOP, "_inproc_" signals in +# process. Default is OOP. +[test_browserElement_NoAttr.html] +[test_browserElement_NoPref.html] +[test_browserElement_NoPermission.html] +[test_browserElement_inproc_Alert.html] +[test_browserElement_inproc_Viewmode.html] +[test_browserElement_inproc_ThemeColor.html] +[test_browserElement_inproc_AlertInFrame.html] +[test_browserElement_inproc_Auth.html] +disabled = No longer supported +[test_browserElement_inproc_BrowserWindowResize.html] +[test_browserElement_inproc_Close.html] +[test_browserElement_inproc_ContextmenuEvents.html] +[test_browserElement_inproc_CookiesNotThirdParty.html] +[test_browserElement_inproc_CopyPaste.html] +[test_browserElement_inproc_DataURI.html] +[test_browserElement_inproc_ExposableURI.html] +[test_browserElement_inproc_FirstPaint.html] +[test_browserElement_inproc_ForwardName.html] +[test_browserElement_inproc_Iconchange.html] +[test_browserElement_inproc_LoadEvents.html] +[test_browserElement_inproc_Metachange.html] +[test_browserElement_inproc_Opensearch.html] +[test_browserElement_inproc_PrivateBrowsing.html] +[test_browserElement_inproc_PromptCheck.html] +[test_browserElement_inproc_PromptConfirm.html] +[test_browserElement_inproc_RemoveBrowserElement.html] +[test_browserElement_inproc_ScrollEvent.html] +[test_browserElement_inproc_SecurityChange.html] +[test_browserElement_inproc_Titlechange.html] +[test_browserElement_inproc_TopBarrier.html] +[test_browserElement_inproc_XFrameOptions.html] +[test_browserElement_inproc_XFrameOptionsDeny.html] +[test_browserElement_inproc_XFrameOptionsSameOrigin.html] +[test_browserElement_inproc_Reload.html] +disabled = bug 774100 +[test_browserElement_inproc_dataBlock.html] diff --git a/dom/browser-element/mochitest/noaudio.webm b/dom/browser-element/mochitest/noaudio.webm new file mode 100644 index 000000000000..9207017fb60e Binary files /dev/null and b/dom/browser-element/mochitest/noaudio.webm differ diff --git a/dom/browser-element/mochitest/test_browserElement_NoAttr.html b/dom/browser-element/mochitest/test_browserElement_NoAttr.html new file mode 100644 index 000000000000..135a0c180951 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_NoAttr.html @@ -0,0 +1,46 @@ + + + + + Test for Bug 710231 + + + + + +Mozilla Bug 710231 + + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_NoPermission.html b/dom/browser-element/mochitest/test_browserElement_NoPermission.html new file mode 100644 index 000000000000..e98669488b39 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_NoPermission.html @@ -0,0 +1,49 @@ + + + + + Test for Bug 710231 + + + + + +Mozilla Bug 710231 + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_NoPref.html b/dom/browser-element/mochitest/test_browserElement_NoPref.html new file mode 100644 index 000000000000..27bdfdd19a82 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_NoPref.html @@ -0,0 +1,48 @@ + + + + + Test for Bug 710231 + + + + + +Mozilla Bug 710231 + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Alert.html b/dom/browser-element/mochitest/test_browserElement_inproc_Alert.html new file mode 100644 index 000000000000..5cb9cbd44a7d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Alert.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 741587 + + + + + +Mozilla Bug 741587 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_AlertInFrame.html b/dom/browser-element/mochitest/test_browserElement_inproc_AlertInFrame.html new file mode 100644 index 000000000000..4eb2464f3600 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_AlertInFrame.html @@ -0,0 +1,13 @@ + + + + Test for iframe mozbrowser + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Auth.html b/dom/browser-element/mochitest/test_browserElement_inproc_Auth.html new file mode 100644 index 000000000000..ca4c52ba6cf5 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Auth.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 775464 + + + + + +Mozilla Bug 775464 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_BackForward.html b/dom/browser-element/mochitest/test_browserElement_inproc_BackForward.html new file mode 100644 index 000000000000..939a05a333c5 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_BackForward.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowResize.html b/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowResize.html new file mode 100644 index 000000000000..656021724b6f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowResize.html @@ -0,0 +1,13 @@ + + + + Test for Bug 891763 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Close.html b/dom/browser-element/mochitest/test_browserElement_inproc_Close.html new file mode 100644 index 000000000000..67a920b5790e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Close.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 757182 + + + + + +Mozilla Bug 757182 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ContextmenuEvents.html b/dom/browser-element/mochitest/test_browserElement_inproc_ContextmenuEvents.html new file mode 100644 index 000000000000..1d385c40dfef --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ContextmenuEvents.html @@ -0,0 +1,13 @@ + + + + Test for Contextmenu Events + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_CookiesNotThirdParty.html b/dom/browser-element/mochitest/test_browserElement_inproc_CookiesNotThirdParty.html new file mode 100644 index 000000000000..279b5bf689db --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_CookiesNotThirdParty.html @@ -0,0 +1,13 @@ + + + + Test for Bug 806127 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_CopyPaste.html b/dom/browser-element/mochitest/test_browserElement_inproc_CopyPaste.html new file mode 100644 index 000000000000..73422d83125b --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_CopyPaste.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 987040 + + + + + +Mozilla Bug 987040 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_DataURI.html b/dom/browser-element/mochitest/test_browserElement_inproc_DataURI.html new file mode 100644 index 000000000000..f55475d7b854 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_DataURI.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 720157 + + + + + +Mozilla Bug 720157 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_DocumentFirstPaint.html b/dom/browser-element/mochitest/test_browserElement_inproc_DocumentFirstPaint.html new file mode 100644 index 000000000000..414e51290d3d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_DocumentFirstPaint.html @@ -0,0 +1,13 @@ + + + + Test for Bug 829486 + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ErrorSecurity.html b/dom/browser-element/mochitest/test_browserElement_inproc_ErrorSecurity.html new file mode 100644 index 000000000000..9c0cf993f401 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ErrorSecurity.html @@ -0,0 +1,13 @@ + + + + Test for mozbrowser + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ExposableURI.html b/dom/browser-element/mochitest/test_browserElement_inproc_ExposableURI.html new file mode 100644 index 000000000000..1a4a3647d58a --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ExposableURI.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 795317 + + + + + +Mozilla Bug 795317 + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_FirstPaint.html b/dom/browser-element/mochitest/test_browserElement_inproc_FirstPaint.html new file mode 100644 index 000000000000..615b35aa64a6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_FirstPaint.html @@ -0,0 +1,13 @@ + + + + Test for Bug 787378 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ForwardName.html b/dom/browser-element/mochitest/test_browserElement_inproc_ForwardName.html new file mode 100644 index 000000000000..0859c55ebf27 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ForwardName.html @@ -0,0 +1,13 @@ + + + + Test for Bug 781320 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Iconchange.html b/dom/browser-element/mochitest/test_browserElement_inproc_Iconchange.html new file mode 100644 index 000000000000..bb6efb2c6aa7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Iconchange.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 719461 + + + + + +Mozilla Bug 719461 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_LoadEvents.html b/dom/browser-element/mochitest/test_browserElement_inproc_LoadEvents.html new file mode 100644 index 000000000000..fe32337c16d8 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_LoadEvents.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 710231 + + + + + +Mozilla Bug 710231 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Metachange.html b/dom/browser-element/mochitest/test_browserElement_inproc_Metachange.html new file mode 100644 index 000000000000..803ef519bdc6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Metachange.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 962626 + + + + + +Mozilla Bug 962626 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Opensearch.html b/dom/browser-element/mochitest/test_browserElement_inproc_Opensearch.html new file mode 100644 index 000000000000..4f14b8c5d43a --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Opensearch.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 883002 + + + + + +Mozilla Bug 883002 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_PrivateBrowsing.html b/dom/browser-element/mochitest/test_browserElement_inproc_PrivateBrowsing.html new file mode 100644 index 000000000000..ff4dc1ee317c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_PrivateBrowsing.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 832700 + + + + + +Mozilla Bug 832700 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_PromptCheck.html b/dom/browser-element/mochitest/test_browserElement_inproc_PromptCheck.html new file mode 100644 index 000000000000..155a41e600b3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_PromptCheck.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 741587 + + + + + +Mozilla Bug 741587 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_PromptConfirm.html b/dom/browser-element/mochitest/test_browserElement_inproc_PromptConfirm.html new file mode 100644 index 000000000000..9b8286bae359 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_PromptConfirm.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 741587 + + + + + +Mozilla Bug 741587 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Reload.html b/dom/browser-element/mochitest/test_browserElement_inproc_Reload.html new file mode 100644 index 000000000000..392089ee01cd --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Reload.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ReloadPostRequest.html b/dom/browser-element/mochitest/test_browserElement_inproc_ReloadPostRequest.html new file mode 100644 index 000000000000..67036e6ae75e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ReloadPostRequest.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_RemoveBrowserElement.html b/dom/browser-element/mochitest/test_browserElement_inproc_RemoveBrowserElement.html new file mode 100644 index 000000000000..7ba34868d322 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_RemoveBrowserElement.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 787517 + + + + + +Mozilla Bug 787517 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ScrollEvent.html b/dom/browser-element/mochitest/test_browserElement_inproc_ScrollEvent.html new file mode 100644 index 000000000000..857ef98616a8 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ScrollEvent.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 770847 + + + + + +Mozilla Bug 770847 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SecurityChange.html b/dom/browser-element/mochitest/test_browserElement_inproc_SecurityChange.html new file mode 100644 index 000000000000..df32cf8598a8 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SecurityChange.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SendEvent.html b/dom/browser-element/mochitest/test_browserElement_inproc_SendEvent.html new file mode 100644 index 000000000000..8fadbcd848e7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SendEvent.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 774809 + + + + + +Mozilla Bug 774809 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Stop.html b/dom/browser-element/mochitest/test_browserElement_inproc_Stop.html new file mode 100644 index 000000000000..125bd29b996a --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Stop.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ThemeColor.html b/dom/browser-element/mochitest/test_browserElement_inproc_ThemeColor.html new file mode 100644 index 000000000000..18fd1619b157 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ThemeColor.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 1013913 + + + + + +Mozilla Bug 1013913 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Titlechange.html b/dom/browser-element/mochitest/test_browserElement_inproc_Titlechange.html new file mode 100644 index 000000000000..bff4e5741610 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Titlechange.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 720157 + + + + + +Mozilla Bug 720157 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_TopBarrier.html b/dom/browser-element/mochitest/test_browserElement_inproc_TopBarrier.html new file mode 100644 index 000000000000..4ab8b30f952f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_TopBarrier.html @@ -0,0 +1,21 @@ + + + + + Test for Bug 725796 + + + + + +Mozilla Bug 725796 + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Viewmode.html b/dom/browser-element/mochitest/test_browserElement_inproc_Viewmode.html new file mode 100644 index 000000000000..9e49738b4bb3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Viewmode.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 1162844 + + + + + +Mozilla Bug 1162844 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptions.html b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptions.html new file mode 100644 index 000000000000..5fab3b5a8b68 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptions.html @@ -0,0 +1,13 @@ + + + + Test for Bug 770239 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsDeny.html b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsDeny.html new file mode 100644 index 000000000000..68a81b01e6cd --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsDeny.html @@ -0,0 +1,13 @@ + + + + Test for Bug 770239 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsSameOrigin.html b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsSameOrigin.html new file mode 100644 index 000000000000..2513b07efa76 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsSameOrigin.html @@ -0,0 +1,13 @@ + + + + Test for Bug 770239 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_dataBlock.html b/dom/browser-element/mochitest/test_browserElement_inproc_dataBlock.html new file mode 100644 index 000000000000..0aff1932e14f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_dataBlock.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 1399170 + + + + + +Mozilla Bug 1399170 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Alert.html b/dom/browser-element/mochitest/test_browserElement_oop_Alert.html new file mode 100644 index 000000000000..5cb9cbd44a7d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Alert.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 741587 + + + + + +Mozilla Bug 741587 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_AlertInFrame.html b/dom/browser-element/mochitest/test_browserElement_oop_AlertInFrame.html new file mode 100644 index 000000000000..4eb2464f3600 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_AlertInFrame.html @@ -0,0 +1,13 @@ + + + + Test for iframe mozbrowser + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Auth.html b/dom/browser-element/mochitest/test_browserElement_oop_Auth.html new file mode 100644 index 000000000000..ca4c52ba6cf5 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Auth.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 775464 + + + + + +Mozilla Bug 775464 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_BackForward.html b/dom/browser-element/mochitest/test_browserElement_oop_BackForward.html new file mode 100644 index 000000000000..c59ad3dc639c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_BackForward.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_BrowserWindowResize.html b/dom/browser-element/mochitest/test_browserElement_oop_BrowserWindowResize.html new file mode 100644 index 000000000000..656021724b6f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_BrowserWindowResize.html @@ -0,0 +1,13 @@ + + + + Test for Bug 891763 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Close.html b/dom/browser-element/mochitest/test_browserElement_oop_Close.html new file mode 100644 index 000000000000..67a920b5790e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Close.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 757182 + + + + + +Mozilla Bug 757182 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ContextmenuEvents.html b/dom/browser-element/mochitest/test_browserElement_oop_ContextmenuEvents.html new file mode 100644 index 000000000000..1d385c40dfef --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ContextmenuEvents.html @@ -0,0 +1,13 @@ + + + + Test for Contextmenu Events + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_CookiesNotThirdParty.html b/dom/browser-element/mochitest/test_browserElement_oop_CookiesNotThirdParty.html new file mode 100644 index 000000000000..279b5bf689db --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_CookiesNotThirdParty.html @@ -0,0 +1,13 @@ + + + + Test for Bug 806127 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_CopyPaste.html b/dom/browser-element/mochitest/test_browserElement_oop_CopyPaste.html new file mode 100644 index 000000000000..73422d83125b --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_CopyPaste.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 987040 + + + + + +Mozilla Bug 987040 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_DataURI.html b/dom/browser-element/mochitest/test_browserElement_oop_DataURI.html new file mode 100644 index 000000000000..f55475d7b854 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_DataURI.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 720157 + + + + + +Mozilla Bug 720157 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_DocumentFirstPaint.html b/dom/browser-element/mochitest/test_browserElement_oop_DocumentFirstPaint.html new file mode 100644 index 000000000000..4fbd934f1f28 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_DocumentFirstPaint.html @@ -0,0 +1,13 @@ + + + + Test for Bug 829486 + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ErrorSecurity.html b/dom/browser-element/mochitest/test_browserElement_oop_ErrorSecurity.html new file mode 100644 index 000000000000..9c0cf993f401 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ErrorSecurity.html @@ -0,0 +1,13 @@ + + + + Test for mozbrowser + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ExposableURI.html b/dom/browser-element/mochitest/test_browserElement_oop_ExposableURI.html new file mode 100644 index 000000000000..1a4a3647d58a --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ExposableURI.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 795317 + + + + + +Mozilla Bug 795317 + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_FirstPaint.html b/dom/browser-element/mochitest/test_browserElement_oop_FirstPaint.html new file mode 100644 index 000000000000..615b35aa64a6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_FirstPaint.html @@ -0,0 +1,13 @@ + + + + Test for Bug 787378 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ForwardName.html b/dom/browser-element/mochitest/test_browserElement_oop_ForwardName.html new file mode 100644 index 000000000000..0859c55ebf27 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ForwardName.html @@ -0,0 +1,13 @@ + + + + Test for Bug 781320 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Iconchange.html b/dom/browser-element/mochitest/test_browserElement_oop_Iconchange.html new file mode 100644 index 000000000000..bb6efb2c6aa7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Iconchange.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 719461 + + + + + +Mozilla Bug 719461 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_LoadEvents.html b/dom/browser-element/mochitest/test_browserElement_oop_LoadEvents.html new file mode 100644 index 000000000000..22b410ac7dae --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_LoadEvents.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 710231 + + + + + +Mozilla Bug 710231 + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Metachange.html b/dom/browser-element/mochitest/test_browserElement_oop_Metachange.html new file mode 100644 index 000000000000..803ef519bdc6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Metachange.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 962626 + + + + + +Mozilla Bug 962626 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_NoAudioTrack.html b/dom/browser-element/mochitest/test_browserElement_oop_NoAudioTrack.html new file mode 100644 index 000000000000..41586a4c81b1 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_NoAudioTrack.html @@ -0,0 +1,13 @@ + + + + Bug 1227051 - No audio track video shouldn't register the AudioChannelAgent + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Opensearch.html b/dom/browser-element/mochitest/test_browserElement_oop_Opensearch.html new file mode 100644 index 000000000000..4f14b8c5d43a --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Opensearch.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 883002 + + + + + +Mozilla Bug 883002 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_PrivateBrowsing.html b/dom/browser-element/mochitest/test_browserElement_oop_PrivateBrowsing.html new file mode 100644 index 000000000000..ff4dc1ee317c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_PrivateBrowsing.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 832700 + + + + + +Mozilla Bug 832700 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_PromptCheck.html b/dom/browser-element/mochitest/test_browserElement_oop_PromptCheck.html new file mode 100644 index 000000000000..155a41e600b3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_PromptCheck.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 741587 + + + + + +Mozilla Bug 741587 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_PromptConfirm.html b/dom/browser-element/mochitest/test_browserElement_oop_PromptConfirm.html new file mode 100644 index 000000000000..9b8286bae359 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_PromptConfirm.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 741587 + + + + + +Mozilla Bug 741587 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Reload.html b/dom/browser-element/mochitest/test_browserElement_oop_Reload.html new file mode 100644 index 000000000000..392089ee01cd --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Reload.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ReloadPostRequest.html b/dom/browser-element/mochitest/test_browserElement_oop_ReloadPostRequest.html new file mode 100644 index 000000000000..67036e6ae75e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ReloadPostRequest.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_RemoveBrowserElement.html b/dom/browser-element/mochitest/test_browserElement_oop_RemoveBrowserElement.html new file mode 100644 index 000000000000..7ba34868d322 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_RemoveBrowserElement.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 787517 + + + + + +Mozilla Bug 787517 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ScrollEvent.html b/dom/browser-element/mochitest/test_browserElement_oop_ScrollEvent.html new file mode 100644 index 000000000000..857ef98616a8 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ScrollEvent.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 770847 + + + + + +Mozilla Bug 770847 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SecurityChange.html b/dom/browser-element/mochitest/test_browserElement_oop_SecurityChange.html new file mode 100644 index 000000000000..df32cf8598a8 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SecurityChange.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SendEvent.html b/dom/browser-element/mochitest/test_browserElement_oop_SendEvent.html new file mode 100644 index 000000000000..a81849f10907 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SendEvent.html @@ -0,0 +1,18 @@ + + + + + Test for Bug 774809 + + + + + +Mozilla Bug 774809 + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Stop.html b/dom/browser-element/mochitest/test_browserElement_oop_Stop.html new file mode 100644 index 000000000000..749c4f999653 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Stop.html @@ -0,0 +1,13 @@ + + + + Test of browser element. + + + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ThemeColor.html b/dom/browser-element/mochitest/test_browserElement_oop_ThemeColor.html new file mode 100644 index 000000000000..18fd1619b157 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ThemeColor.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 1013913 + + + + + +Mozilla Bug 1013913 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Titlechange.html b/dom/browser-element/mochitest/test_browserElement_oop_Titlechange.html new file mode 100644 index 000000000000..bff4e5741610 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Titlechange.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 720157 + + + + + +Mozilla Bug 720157 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_TopBarrier.html b/dom/browser-element/mochitest/test_browserElement_oop_TopBarrier.html new file mode 100644 index 000000000000..0524af5c54a9 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_TopBarrier.html @@ -0,0 +1,20 @@ + + + + + Test for Bug 725796 + + + + + +Mozilla Bug 725796 + + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Viewmode.html b/dom/browser-element/mochitest/test_browserElement_oop_Viewmode.html new file mode 100644 index 000000000000..9e49738b4bb3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Viewmode.html @@ -0,0 +1,19 @@ + + + + + Test for Bug 1162844 + + + + + +Mozilla Bug 1162844 + + + + + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptions.html b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptions.html new file mode 100644 index 000000000000..5fab3b5a8b68 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptions.html @@ -0,0 +1,13 @@ + + + + Test for Bug 770239 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsDeny.html b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsDeny.html new file mode 100644 index 000000000000..68a81b01e6cd --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsDeny.html @@ -0,0 +1,13 @@ + + + + Test for Bug 770239 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsSameOrigin.html b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsSameOrigin.html new file mode 100644 index 000000000000..2513b07efa76 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsSameOrigin.html @@ -0,0 +1,13 @@ + + + + Test for Bug 770239 + + + + + + + + \ No newline at end of file diff --git a/dom/browser-element/moz.build b/dom/browser-element/moz.build index e1095697682e..3aeafe4b7a2e 100644 --- a/dom/browser-element/moz.build +++ b/dom/browser-element/moz.build @@ -35,3 +35,12 @@ LOCAL_INCLUDES += [ '/dom/base', '/dom/ipc', ] + +MOCHITEST_MANIFESTS += [ + 'mochitest/mochitest-oop.ini', + 'mochitest/mochitest.ini', +] + +MOCHITEST_CHROME_MANIFESTS += [ + 'mochitest/chrome.ini', +] diff --git a/dom/chrome-webidl/MessageManager.webidl b/dom/chrome-webidl/MessageManager.webidl index 54094490e7ea..f36bc4219dcc 100644 --- a/dom/chrome-webidl/MessageManager.webidl +++ b/dom/chrome-webidl/MessageManager.webidl @@ -195,6 +195,11 @@ dictionary ReceiveMessageArgument sequence ports; + /** + * Principal for the window app. + */ + required Principal? principal; + FrameLoader targetFrameLoader; }; @@ -311,6 +316,7 @@ interface mixin MessageSenderMixin { void sendAsyncMessage(optional DOMString? messageName = null, optional any obj, optional object? objects = null, + optional Principal? principal = null, optional any transfers); /** @@ -351,7 +357,8 @@ interface mixin SyncMessageSenderMixin [Throws] sequence sendSyncMessage(optional DOMString? messageName = null, optional any obj, - optional object? objects = null); + optional object? objects = null, + optional Principal? principal = null); /** * Like |sendSyncMessage()|, except re-entrant. New RPC messages may be @@ -365,7 +372,8 @@ interface mixin SyncMessageSenderMixin [Throws] sequence sendRpcMessage(optional DOMString? messageName = null, optional any obj, - optional object? objects = null); + optional object? objects = null, + optional Principal? principal = null); }; /** @@ -388,6 +396,13 @@ interface mixin MessageManagerGlobal */ void dump(DOMString str); + /** + * If leak detection is enabled, print a note to the leak log that this + * process will intentionally crash. + */ + [Throws] + void privateNoteIntentionalCrash(); + /** * Ascii base64 data to binary data and vice versa */ diff --git a/dom/crypto/test/file_indexedDB.html b/dom/crypto/test/file_indexedDB.html index 435f623892a7..390b3f80dbf2 100644 --- a/dom/crypto/test/file_indexedDB.html +++ b/dom/crypto/test/file_indexedDB.html @@ -76,10 +76,7 @@ openDatabase() .then(retrieveKey).then(generateKey).then(storeKey) - .then(() => parent.postMessage("ok", "*")) - .catch(error => { - parent.postMessage(String(error), "*"); - }); + .then(() => alert("ok")).catch(alert); diff --git a/dom/crypto/test/mochitest.ini b/dom/crypto/test/mochitest.ini index 8b416cc906ed..febe769bb772 100644 --- a/dom/crypto/test/mochitest.ini +++ b/dom/crypto/test/mochitest.ini @@ -9,7 +9,6 @@ support-files = util.js [test_indexedDB.html] -skip-if = !fission # Requires iframes to run in separate processes. [test_WebCrypto.html] [test_WebCrypto_DH.html] [test_WebCrypto_ECDH.html] diff --git a/dom/crypto/test/test_indexedDB.html b/dom/crypto/test/test_indexedDB.html index ba5a91c6d4b9..b68f0c51e83c 100644 --- a/dom/crypto/test/test_indexedDB.html +++ b/dom/crypto/test/test_indexedDB.html @@ -18,31 +18,42 @@ const TEST_URI = "https://example.com/tests/" + "dom/crypto/test/file_indexedDB.html"; - function createFrame() { + SimpleTest.waitForExplicitFinish(); + + function createMozBrowserFrame(cb) { let frame = document.createElement("iframe"); + SpecialPowers.wrap(frame).mozbrowser = true; frame.src = TEST_URI; - return new Promise(resolve => { - addEventListener("message", event => { - is(event.source.frameElement, frame, - "Message must come from the correct iframe"); - resolve([frame, event.data]); - }, { once: true }); + frame.addEventListener("mozbrowsershowmodalprompt", function(e) { + cb(frame, e.detail.message); + }, {once: true}); - document.body.appendChild(frame); + document.body.appendChild(frame); + } + + function runTest() { + // Load the test app once, to generate and store keys. + createMozBrowserFrame((frame, result) => { + is(result, "ok", "stored keys successfully"); + frame.remove(); + + // Load the test app again to retrieve stored keys. + createMozBrowserFrame((recFrame, recResult) => { + is(recResult, "ok", "retrieved keys successfully"); + recFrame.remove(); + SimpleTest.finish(); + }); }); } - add_task(async function() { - // Load the test app once, to generate and store keys. - let [frame, result] = await createFrame(); - is(result, "ok", "stored keys successfully"); - frame.remove(); - - // Load the test app again to retrieve stored keys. - let [recFrame, recResult] = await createFrame(); - is(recResult, "ok", "retrieved keys successfully"); - recFrame.remove(); + addEventListener("load", function() { + SpecialPowers.addPermission("browser", true, document); + SpecialPowers.pushPrefEnv({set: [ + ["dom.ipc.browser_frames.oop_by_default", true], + ["dom.mozBrowserFramesEnabled", true], + ["network.disable.ipc.security", true], + ]}, runTest); }); diff --git a/dom/file/tests/file_ipc_messagemanager_blob.html b/dom/file/tests/file_ipc_messagemanager_blob.html new file mode 100644 index 000000000000..dbdd64a34b6b --- /dev/null +++ b/dom/file/tests/file_ipc_messagemanager_blob.html @@ -0,0 +1 @@ + diff --git a/dom/file/tests/mochitest.ini b/dom/file/tests/mochitest.ini index dd53385abb81..7449475e68f5 100644 --- a/dom/file/tests/mochitest.ini +++ b/dom/file/tests/mochitest.ini @@ -21,6 +21,8 @@ support-files = [test_blobconstructor.html] [test_blobURL_expiring.html] [test_file_from_blob.html] +[test_ipc_messagemanager_blob.html] +support-files = file_ipc_messagemanager_blob.html [test_nonascii_blob_url.html] [test_file_negative_date.html] [test_fileapi_basic.html] diff --git a/dom/file/tests/test_ipc_messagemanager_blob.html b/dom/file/tests/test_ipc_messagemanager_blob.html new file mode 100644 index 000000000000..29065d8d6639 --- /dev/null +++ b/dom/file/tests/test_ipc_messagemanager_blob.html @@ -0,0 +1,143 @@ + + + + Test for OOP Blobs in MessageManager + + + + + + + + diff --git a/dom/file/tests/test_ipc_messagemanager_blob.js b/dom/file/tests/test_ipc_messagemanager_blob.js deleted file mode 100644 index 21f4b1c2697c..000000000000 --- a/dom/file/tests/test_ipc_messagemanager_blob.js +++ /dev/null @@ -1,99 +0,0 @@ -"use strict"; - -const { ExtensionTestUtils } = ChromeUtils.import( - "resource://testing-common/ExtensionXPCShellUtils.jsm" -); - -ExtensionTestUtils.init(this); - -function childFrameScript() { - addMessageListener("test:ipcClonedMessage", function(message) { - if (!Blob.isInstance(message.json)) { - sendAsyncMessage(message.name, message.json); - return; - } - - let reader = new FileReader(); - reader.addEventListener("load", function() { - let response = - reader.result == "this is a great success!" ? message.json : "error"; - sendAsyncMessage(message.name, response); - }); - reader.readAsText(message.json); - }); -} - -add_task(async function test() { - let page = await ExtensionTestUtils.loadContentPage("about:blank", { - remote: true, - }); - - page.loadFrameScript(childFrameScript); - - const blobString = "this is a great success!"; - - const messages = [ - "hi!", - "", - 2, - -0.04, - 3432987324987239872948732982, - true, - false, - null, - 0, - - // Make sure this one is always last. - new Blob(["this ", "is ", "a ", "great ", "success!"], { - type: "text/plain", - }), - ]; - let receivedMessageIndex = 0; - - let mm = page.browser.messageManager; - let done = new Promise(resolve => { - mm.addMessageListener("test:ipcClonedMessage", async message => { - let data = message.json; - - if (Blob.isInstance(data)) { - equal(receivedMessageIndex, messages.length - 1, "Blob is last"); - equal( - data.size, - messages[receivedMessageIndex].size, - "Correct blob size" - ); - equal( - data.type, - messages[receivedMessageIndex].type, - "Correct blob type" - ); - - let reader1 = new FileReader(); - reader1.readAsText(data); - - let reader2 = new FileReader(); - reader2.readAsText(messages[receivedMessageIndex]); - - await Promise.all([ - new Promise(res => (reader1.onload = res)), - new Promise(res => (reader2.onload = res)), - ]); - - equal(reader1.result, blobString, "Result 1"); - equal(reader2.result, blobString, "Result 2"); - - resolve(); - } else { - equal( - data, - messages[receivedMessageIndex++], - "Got correct round-tripped response" - ); - } - }); - }); - - for (let message of messages) { - mm.sendAsyncMessage("test:ipcClonedMessage", message); - } -}); diff --git a/dom/file/tests/xpcshell.ini b/dom/file/tests/xpcshell.ini index 6f6891d15ae9..8a088e60cd62 100644 --- a/dom/file/tests/xpcshell.ini +++ b/dom/file/tests/xpcshell.ini @@ -2,4 +2,3 @@ [test_bloburi.js] [test_createFile.js] -[test_ipc_messagemanager_blob.js] diff --git a/dom/html/nsGenericHTMLFrameElement.cpp b/dom/html/nsGenericHTMLFrameElement.cpp index 051a811edff0..594feda97970 100644 --- a/dom/html/nsGenericHTMLFrameElement.cpp +++ b/dom/html/nsGenericHTMLFrameElement.cpp @@ -255,6 +255,17 @@ ScrollbarPreference nsGenericHTMLFrameElement::MapScrollingAttribute( return ScrollbarPreference::Auto; } +static bool PrincipalAllowsBrowserFrame(nsIPrincipal* aPrincipal) { + nsCOMPtr permMgr = + mozilla::services::GetPermissionManager(); + NS_ENSURE_TRUE(permMgr, false); + uint32_t permission = nsIPermissionManager::DENY_ACTION; + nsresult rv = permMgr->TestPermissionFromPrincipal( + aPrincipal, NS_LITERAL_CSTRING("browser"), &permission); + NS_ENSURE_SUCCESS(rv, false); + return permission == nsIPermissionManager::ALLOW_ACTION; +} + /* virtual */ nsresult nsGenericHTMLFrameElement::AfterSetAttr( int32_t aNameSpaceID, nsAtom* aName, const nsAttrValue* aValue, @@ -285,9 +296,9 @@ nsresult nsGenericHTMLFrameElement::AfterSetAttr( } } } else if (aName == nsGkAtoms::mozbrowser) { - mReallyIsBrowser = - !!aValue && StaticPrefs::dom_mozBrowserFramesEnabled() && - XRE_IsParentProcess() && NodePrincipal()->IsSystemPrincipal(); + mReallyIsBrowser = !!aValue && + StaticPrefs::dom_mozBrowserFramesEnabled() && + PrincipalAllowsBrowserFrame(NodePrincipal()); } } diff --git a/dom/html/test/file_ignoreuserfocus.html b/dom/html/test/file_ignoreuserfocus.html new file mode 100644 index 000000000000..b9e33021249f --- /dev/null +++ b/dom/html/test/file_ignoreuserfocus.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/dom/html/test/mochitest.ini b/dom/html/test/mochitest.ini index 6f6275a7203d..863c0e74998b 100644 --- a/dom/html/test/mochitest.ini +++ b/dom/html/test/mochitest.ini @@ -178,6 +178,7 @@ support-files = image-allow-credentials.png^headers^ nnc_lockup.gif reflect.js + file_ignoreuserfocus.html simpleFileOpener.js file_bug1166138_1x.png file_bug1166138_2x.png @@ -519,6 +520,8 @@ skip-if = (toolkit == 'android') || ((os == 'win' || os == 'linux') && debug) # [test_track.html] [test_ul_attributes_reflection.html] [test_input_files_not_nsIFile.html] +[test_ignoreuserfocus.html] +skip-if = true # Firefox OS test disabled to enable Fission focus changes [test_fragment_form_pointer.html] [test_bug1682.html] [test_bug1823.html] diff --git a/dom/html/test/test_ignoreuserfocus.html b/dom/html/test/test_ignoreuserfocus.html new file mode 100644 index 000000000000..94984244ae97 --- /dev/null +++ b/dom/html/test/test_ignoreuserfocus.html @@ -0,0 +1,159 @@ + + + + + + + + + + + diff --git a/dom/indexedDB/test/mochitest.ini b/dom/indexedDB/test/mochitest.ini index ddfcfd808ea3..67e35020cd31 100644 --- a/dom/indexedDB/test/mochitest.ini +++ b/dom/indexedDB/test/mochitest.ini @@ -215,6 +215,8 @@ skip-if = true [test_leaving_page.html] [test_maximal_serialized_object_size.html] [test_message_manager_ipc.html] +# This test is only supposed to run in the main process. +skip-if = e10s [test_multientry.html] [test_names_sorted.html] [test_objectCursors.html] diff --git a/dom/indexedDB/test/test_message_manager_ipc.html b/dom/indexedDB/test/test_message_manager_ipc.html index bf26618c346a..9eb6488e9bb3 100644 --- a/dom/indexedDB/test/test_message_manager_ipc.html +++ b/dom/indexedDB/test/test_message_manager_ipc.html @@ -6,217 +6,201 @@ - + diff --git a/dom/ipc/BrowserBridgeParent.cpp b/dom/ipc/BrowserBridgeParent.cpp index 398d756e06c2..9b3ee91bd70b 100644 --- a/dom/ipc/BrowserBridgeParent.cpp +++ b/dom/ipc/BrowserBridgeParent.cpp @@ -49,7 +49,7 @@ nsresult BrowserBridgeParent::InitWithProcess( true, principal->OriginAttributesRef().mFirstPartyDomain); } - tabContext.SetTabContext(Manager()->ChromeOuterWindowID(), + tabContext.SetTabContext(false, Manager()->ChromeOuterWindowID(), Manager()->ShowFocusRings(), attrs, aPresentationURL, Manager()->GetMaxTouchPoints()); diff --git a/dom/ipc/BrowserChild.cpp b/dom/ipc/BrowserChild.cpp index 62c1f37f4fce..1c8a6e0fdbd3 100644 --- a/dom/ipc/BrowserChild.cpp +++ b/dom/ipc/BrowserChild.cpp @@ -143,6 +143,9 @@ # include "nsIWebBrowserPrint.h" #endif +#define BROWSER_ELEMENT_CHILD_SCRIPT \ + NS_LITERAL_STRING("chrome://global/content/BrowserElementChild.js") + static mozilla::LazyLogModule sApzChildLog("apz.child"); using namespace mozilla; @@ -198,7 +201,7 @@ void BrowserChild::DispatchMessageManagerMessage(const nsAString& aMessageName, mBrowserChildMessageManager); RefPtr mm = kungFuDeathGrip->GetMessageManager(); mm->ReceiveMessage(static_cast(kungFuDeathGrip), nullptr, - aMessageName, false, &data, nullptr, nullptr, + aMessageName, false, &data, nullptr, nullptr, nullptr, IgnoreErrors()); } @@ -593,12 +596,24 @@ void BrowserChild::NotifyTabContextUpdated() { return; } + UpdateFrameType(); + // Set SANDBOXED_AUXILIARY_NAVIGATION flag if this is a receiver page. if (!PresentationURL().IsEmpty()) { mBrowsingContext->SetSandboxFlags(SANDBOXED_AUXILIARY_NAVIGATION); } } +void BrowserChild::UpdateFrameType() { + nsCOMPtr docShell = do_GetInterface(WebNavigation()); + MOZ_ASSERT(docShell); + + // TODO: Bug 1252794 - remove frameType from nsIDocShell.idl + docShell->SetFrameType(IsMozBrowserElement() + ? nsIDocShell::FRAME_TYPE_BROWSER + : nsIDocShell::FRAME_TYPE_REGULAR); +} + NS_IMPL_CYCLE_COLLECTION_CLASS(BrowserChild) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(BrowserChild) @@ -1081,6 +1096,9 @@ void BrowserChild::ApplyParentShowInfo(const ParentShowInfo& aInfo) { mDidSetRealShowInfo = true; } + if (nsCOMPtr docShell = do_GetInterface(WebNavigation())) { + docShell->SetFullscreenAllowed(aInfo.fullscreenAllowed()); + } mIsTransparent = aInfo.isTransparent(); } @@ -2180,7 +2198,7 @@ mozilla::ipc::IPCResult BrowserChild::RecvLoadRemoteScript( mozilla::ipc::IPCResult BrowserChild::RecvAsyncMessage( const nsString& aMessage, nsTArray&& aCpows, - const ClonedMessageData& aData) { + nsIPrincipal* aPrincipal, const ClonedMessageData& aData) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("BrowserChild::RecvAsyncMessage", OTHER, aMessage); MMPrinter::Print("BrowserChild::RecvAsyncMessage", aMessage, aData); @@ -2206,8 +2224,8 @@ mozilla::ipc::IPCResult BrowserChild::RecvAsyncMessage( StructuredCloneData data; UnpackClonedMessageDataForChild(aData, data); mm->ReceiveMessage(static_cast(mBrowserChildMessageManager), - nullptr, aMessage, false, &data, &cpows, nullptr, - IgnoreErrors()); + nullptr, aMessage, false, &data, &cpows, aPrincipal, + nullptr, IgnoreErrors()); return IPC_OK(); } @@ -2249,8 +2267,17 @@ mozilla::ipc::IPCResult BrowserChild::RecvSwappedWithOtherRemoteLoader( MOZ_CRASH("Update to TabContext after swap was denied."); } + // Since mIsMozBrowserElement may change in UpdateTabContextAfterSwap, so we + // call UpdateFrameType here to make sure the frameType on the docshell is + // correct. + UpdateFrameType(); + // Ignore previous value of mTriedBrowserInit since owner content has changed. mTriedBrowserInit = true; + // Initialize the child side of the browser element machinery, if appropriate. + if (IsMozBrowserElement()) { + RecvLoadRemoteScript(BROWSER_ELEMENT_CHILD_SCRIPT, true); + } nsContentUtils::FirePageShowEventForFrameLoaderSwap( ourDocShell, ourEventTarget, true, true); @@ -2597,6 +2624,11 @@ bool BrowserChild::InitBrowserChildMessageManager() { if (!mTriedBrowserInit) { mTriedBrowserInit = true; + // Initialize the child side of the browser element machinery, + // if appropriate. + if (IsMozBrowserElement()) { + RecvLoadRemoteScript(BROWSER_ELEMENT_CHILD_SCRIPT, true); + } } return true; @@ -2920,12 +2952,10 @@ void BrowserChild::SetTabId(const TabId& aTabId) { NestedBrowserChildMap()[mUniqueId] = this; } -bool BrowserChild::DoSendBlockingMessage(JSContext* aCx, - const nsAString& aMessage, - StructuredCloneData& aData, - JS::Handle aCpows, - nsTArray* aRetVal, - bool aIsSync) { +bool BrowserChild::DoSendBlockingMessage( + JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData, + JS::Handle aCpows, nsIPrincipal* aPrincipal, + nsTArray* aRetVal, bool aIsSync) { ClonedMessageData data; if (!BuildClonedMessageDataForChild(Manager(), aData, data)) { return false; @@ -2938,16 +2968,19 @@ bool BrowserChild::DoSendBlockingMessage(JSContext* aCx, } } if (aIsSync) { - return SendSyncMessage(PromiseFlatString(aMessage), data, cpows, aRetVal); + return SendSyncMessage(PromiseFlatString(aMessage), data, cpows, aPrincipal, + aRetVal); } - return SendRpcMessage(PromiseFlatString(aMessage), data, cpows, aRetVal); + return SendRpcMessage(PromiseFlatString(aMessage), data, cpows, aPrincipal, + aRetVal); } nsresult BrowserChild::DoSendAsyncMessage(JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData, - JS::Handle aCpows) { + JS::Handle aCpows, + nsIPrincipal* aPrincipal) { ClonedMessageData data; if (!BuildClonedMessageDataForChild(Manager(), aData, data)) { return NS_ERROR_DOM_DATA_CLONE_ERR; @@ -2959,7 +2992,7 @@ nsresult BrowserChild::DoSendAsyncMessage(JSContext* aCx, return NS_ERROR_UNEXPECTED; } } - if (!SendAsyncMessage(PromiseFlatString(aMessage), cpows, data)) { + if (!SendAsyncMessage(PromiseFlatString(aMessage), cpows, aPrincipal, data)) { return NS_ERROR_UNEXPECTED; } return NS_OK; diff --git a/dom/ipc/BrowserChild.h b/dom/ipc/BrowserChild.h index 694ecaf9d890..6c3cd3279bf4 100644 --- a/dom/ipc/BrowserChild.h +++ b/dom/ipc/BrowserChild.h @@ -227,6 +227,7 @@ class BrowserChild final : public nsMessageManagerScriptExecutor, return mBrowserChildMessageManager->WrapObject(aCx, aGivenProto); } + nsIPrincipal* GetPrincipal() { return mPrincipal; } // Get the Document for the top-level window in this tab. already_AddRefed GetTopLevelDocument() const; @@ -245,12 +246,14 @@ class BrowserChild final : public nsMessageManagerScriptExecutor, virtual bool DoSendBlockingMessage(JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData, JS::Handle aCpows, + nsIPrincipal* aPrincipal, nsTArray* aRetVal, bool aIsSync) override; virtual nsresult DoSendAsyncMessage(JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData, - JS::Handle aCpows) override; + JS::Handle aCpows, + nsIPrincipal* aPrincipal) override; bool DoUpdateZoomConstraints(const uint32_t& aPresShellId, const ViewID& aViewId, @@ -414,6 +417,7 @@ class BrowserChild final : public nsMessageManagerScriptExecutor, mozilla::ipc::IPCResult RecvAsyncMessage(const nsString& aMessage, nsTArray&& aCpows, + nsIPrincipal* aPrincipal, const ClonedMessageData& aData); mozilla::ipc::IPCResult RecvSwappedWithOtherRemoteLoader( const IPCTabContext& aContext); @@ -770,6 +774,9 @@ class BrowserChild final : public nsMessageManagerScriptExecutor, // call this during Init(). void NotifyTabContextUpdated(); + // Update the frameType on our docshell. + void UpdateFrameType(); + void ActorDestroy(ActorDestroyReason why) override; bool InitBrowserChildMessageManager(); diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp index 89c3421fa84c..0335555069a1 100644 --- a/dom/ipc/BrowserParent.cpp +++ b/dom/ipc/BrowserParent.cpp @@ -2034,7 +2034,8 @@ bool BrowserParent::SendHandleTap(TapType aType, mozilla::ipc::IPCResult BrowserParent::RecvSyncMessage( const nsString& aMessage, const ClonedMessageData& aData, - nsTArray&& aCpows, nsTArray* aRetVal) { + nsTArray&& aCpows, nsIPrincipal* aPrincipal, + nsTArray* aRetVal) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("BrowserParent::RecvSyncMessage", OTHER, aMessage); MMPrinter::Print("BrowserParent::RecvSyncMessage", aMessage, aData); @@ -2043,7 +2044,7 @@ mozilla::ipc::IPCResult BrowserParent::RecvSyncMessage( ipc::UnpackClonedMessageDataForParent(aData, data); CrossProcessCpowHolder cpows(Manager(), aCpows); - if (!ReceiveMessage(aMessage, true, &data, &cpows, aRetVal)) { + if (!ReceiveMessage(aMessage, true, &data, &cpows, aPrincipal, aRetVal)) { return IPC_FAIL_NO_REASON(this); } return IPC_OK(); @@ -2051,7 +2052,8 @@ mozilla::ipc::IPCResult BrowserParent::RecvSyncMessage( mozilla::ipc::IPCResult BrowserParent::RecvRpcMessage( const nsString& aMessage, const ClonedMessageData& aData, - nsTArray&& aCpows, nsTArray* aRetVal) { + nsTArray&& aCpows, nsIPrincipal* aPrincipal, + nsTArray* aRetVal) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("BrowserParent::RecvRpcMessage", OTHER, aMessage); MMPrinter::Print("BrowserParent::RecvRpcMessage", aMessage, aData); @@ -2060,7 +2062,7 @@ mozilla::ipc::IPCResult BrowserParent::RecvRpcMessage( ipc::UnpackClonedMessageDataForParent(aData, data); CrossProcessCpowHolder cpows(Manager(), aCpows); - if (!ReceiveMessage(aMessage, true, &data, &cpows, aRetVal)) { + if (!ReceiveMessage(aMessage, true, &data, &cpows, aPrincipal, aRetVal)) { return IPC_FAIL_NO_REASON(this); } return IPC_OK(); @@ -2068,7 +2070,7 @@ mozilla::ipc::IPCResult BrowserParent::RecvRpcMessage( mozilla::ipc::IPCResult BrowserParent::RecvAsyncMessage( const nsString& aMessage, nsTArray&& aCpows, - const ClonedMessageData& aData) { + nsIPrincipal* aPrincipal, const ClonedMessageData& aData) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("BrowserParent::RecvAsyncMessage", OTHER, aMessage); MMPrinter::Print("BrowserParent::RecvAsyncMessage", aMessage, aData); @@ -2077,7 +2079,7 @@ mozilla::ipc::IPCResult BrowserParent::RecvAsyncMessage( ipc::UnpackClonedMessageDataForParent(aData, data); CrossProcessCpowHolder cpows(Manager(), aCpows); - if (!ReceiveMessage(aMessage, false, &data, &cpows, nullptr)) { + if (!ReceiveMessage(aMessage, false, &data, &cpows, aPrincipal, nullptr)) { return IPC_FAIL_NO_REASON(this); } return IPC_OK(); @@ -3264,7 +3266,7 @@ mozilla::ipc::IPCResult BrowserParent::RecvDispatchFocusToTopLevelWindow() { bool BrowserParent::ReceiveMessage(const nsString& aMessage, bool aSync, StructuredCloneData* aData, - CpowHolder* aCpows, + CpowHolder* aCpows, nsIPrincipal* aPrincipal, nsTArray* aRetVal) { // If we're for an oop iframe, don't deliver messages to the wrong place. if (mBrowserBridgeParent) { @@ -3277,7 +3279,7 @@ bool BrowserParent::ReceiveMessage(const nsString& aMessage, bool aSync, frameLoader->GetFrameMessageManager(); manager->ReceiveMessage(mFrameElement, frameLoader, aMessage, aSync, aData, - aCpows, aRetVal, IgnoreErrors()); + aCpows, aPrincipal, aRetVal, IgnoreErrors()); } return true; } diff --git a/dom/ipc/BrowserParent.h b/dom/ipc/BrowserParent.h index e06ebc64d22f..96ff874dcbba 100644 --- a/dom/ipc/BrowserParent.h +++ b/dom/ipc/BrowserParent.h @@ -345,16 +345,17 @@ class BrowserParent final : public PBrowserParent, mozilla::ipc::IPCResult RecvSyncMessage( const nsString& aMessage, const ClonedMessageData& aData, - nsTArray&& aCpows, + nsTArray&& aCpows, nsIPrincipal* aPrincipal, nsTArray* aRetVal); mozilla::ipc::IPCResult RecvRpcMessage( const nsString& aMessage, const ClonedMessageData& aData, - nsTArray&& aCpows, + nsTArray&& aCpows, nsIPrincipal* aPrincipal, nsTArray* aRetVal); mozilla::ipc::IPCResult RecvAsyncMessage(const nsString& aMessage, nsTArray&& aCpows, + nsIPrincipal* aPrincipal, const ClonedMessageData& aData); mozilla::ipc::IPCResult RecvNotifyIMEFocus( @@ -750,7 +751,7 @@ class BrowserParent final : public PBrowserParent, bool ReceiveMessage( const nsString& aMessage, bool aSync, ipc::StructuredCloneData* aData, - mozilla::jsipc::CpowHolder* aCpows, + mozilla::jsipc::CpowHolder* aCpows, nsIPrincipal* aPrincipal, nsTArray* aJSONRetVal = nullptr); mozilla::ipc::IPCResult RecvAsyncAuthPrompt(const nsCString& aUri, diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp index 034089c58b21..3c0986316baf 100644 --- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -955,6 +955,7 @@ nsresult ContentChild::ProvideWindowCommon( PopupIPCTabContext context; openerTabId = aTabOpener->GetTabId(); context.opener() = openerTabId; + context.isMozBrowserElement() = aTabOpener->IsMozBrowserElement(); ipcContext = MakeUnique(context); } else { // It's possible to not have a BrowserChild opener in the case @@ -992,11 +993,12 @@ nsresult ContentChild::ProvideWindowCommon( MutableTabContext newTabContext; if (aTabOpener) { newTabContext.SetTabContext( - aTabOpener->ChromeOuterWindowID(), aTabOpener->ShowFocusRings(), - browsingContext->OriginAttributesRef(), aTabOpener->PresentationURL(), - aTabOpener->MaxTouchPoints()); + aTabOpener->IsMozBrowserElement(), aTabOpener->ChromeOuterWindowID(), + aTabOpener->ShowFocusRings(), browsingContext->OriginAttributesRef(), + aTabOpener->PresentationURL(), aTabOpener->MaxTouchPoints()); } else { newTabContext.SetTabContext( + /* isMozBrowserElement */ false, /* chromeOuterWindowID */ 0, /* showFocusRings */ UIStateChangeType_NoChange, browsingContext->OriginAttributesRef(), @@ -2354,7 +2356,7 @@ mozilla::ipc::IPCResult ContentChild::RecvLoadProcessScript( mozilla::ipc::IPCResult ContentChild::RecvAsyncMessage( const nsString& aMsg, nsTArray&& aCpows, - const ClonedMessageData& aData) { + const IPC::Principal& aPrincipal, const ClonedMessageData& aData) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("ContentChild::RecvAsyncMessage", OTHER, aMsg); MMPrinter::Print("ContentChild::RecvAsyncMessage", aMsg, aData); @@ -2365,8 +2367,8 @@ mozilla::ipc::IPCResult ContentChild::RecvAsyncMessage( if (cpm) { StructuredCloneData data; ipc::UnpackClonedMessageDataForChild(aData, data); - cpm->ReceiveMessage(cpm, nullptr, aMsg, false, &data, &cpows, nullptr, - IgnoreErrors()); + cpm->ReceiveMessage(cpm, nullptr, aMsg, false, &data, &cpows, aPrincipal, + nullptr, IgnoreErrors()); } return IPC_OK(); } diff --git a/dom/ipc/ContentChild.h b/dom/ipc/ContentChild.h index bf3faf33e347..9fb3e32b4ea1 100644 --- a/dom/ipc/ContentChild.h +++ b/dom/ipc/ContentChild.h @@ -343,6 +343,7 @@ class ContentChild final mozilla::ipc::IPCResult RecvAsyncMessage(const nsString& aMsg, nsTArray&& aCpows, + const IPC::Principal& aPrincipal, const ClonedMessageData& aData); mozilla::ipc::IPCResult RecvRegisterStringBundles( diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index 1647754c92a6..3272208eb917 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -1545,9 +1545,9 @@ void ContentParent::ShutDownMessageManager() { return; } - mMessageManager->ReceiveMessage(mMessageManager, nullptr, - CHILD_PROCESS_SHUTDOWN_MESSAGE, false, - nullptr, nullptr, nullptr, IgnoreErrors()); + mMessageManager->ReceiveMessage( + mMessageManager, nullptr, CHILD_PROCESS_SHUTDOWN_MESSAGE, false, nullptr, + nullptr, nullptr, nullptr, IgnoreErrors()); mMessageManager->SetOsPid(-1); mMessageManager->Disconnect(); @@ -3201,6 +3201,17 @@ bool ContentParent::CanOpenBrowser(const IPCTabContext& aContext) { "Got null opener from child; aborting AllocPBrowserParent."); return false; } + + // Popup windows of isMozBrowserElement frames must be isMozBrowserElement + // if the parent isMozBrowserElement. Allocating a !isMozBrowserElement + // frame with same app ID would allow the content to access data it's not + // supposed to. + if (!popupContext.isMozBrowserElement() && opener->IsMozBrowserElement()) { + ASSERT_UNLESS_FUZZING( + "Child trying to escalate privileges! Aborting " + "AllocPBrowserParent."); + return false; + } } MaybeInvalidTabContext tc(aContext); @@ -3897,7 +3908,8 @@ mozilla::ipc::IPCResult ContentParent::RecvNotificationEvent( mozilla::ipc::IPCResult ContentParent::RecvSyncMessage( const nsString& aMsg, const ClonedMessageData& aData, - nsTArray&& aCpows, nsTArray* aRetvals) { + nsTArray&& aCpows, const IPC::Principal& aPrincipal, + nsTArray* aRetvals) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("ContentParent::RecvSyncMessage", OTHER, aMsg); MMPrinter::Print("ContentParent::RecvSyncMessage", aMsg, aData); @@ -3908,15 +3920,16 @@ mozilla::ipc::IPCResult ContentParent::RecvSyncMessage( ipc::StructuredCloneData data; ipc::UnpackClonedMessageDataForParent(aData, data); - ppm->ReceiveMessage(ppm, nullptr, aMsg, true, &data, &cpows, aRetvals, - IgnoreErrors()); + ppm->ReceiveMessage(ppm, nullptr, aMsg, true, &data, &cpows, aPrincipal, + aRetvals, IgnoreErrors()); } return IPC_OK(); } mozilla::ipc::IPCResult ContentParent::RecvRpcMessage( const nsString& aMsg, const ClonedMessageData& aData, - nsTArray&& aCpows, nsTArray* aRetvals) { + nsTArray&& aCpows, const IPC::Principal& aPrincipal, + nsTArray* aRetvals) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("ContentParent::RecvRpcMessage", OTHER, aMsg); MMPrinter::Print("ContentParent::RecvRpcMessage", aMsg, aData); @@ -3927,15 +3940,15 @@ mozilla::ipc::IPCResult ContentParent::RecvRpcMessage( ipc::StructuredCloneData data; ipc::UnpackClonedMessageDataForParent(aData, data); - ppm->ReceiveMessage(ppm, nullptr, aMsg, true, &data, &cpows, aRetvals, - IgnoreErrors()); + ppm->ReceiveMessage(ppm, nullptr, aMsg, true, &data, &cpows, aPrincipal, + aRetvals, IgnoreErrors()); } return IPC_OK(); } mozilla::ipc::IPCResult ContentParent::RecvAsyncMessage( const nsString& aMsg, nsTArray&& aCpows, - const ClonedMessageData& aData) { + const IPC::Principal& aPrincipal, const ClonedMessageData& aData) { AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("ContentParent::RecvAsyncMessage", OTHER, aMsg); MMPrinter::Print("ContentParent::RecvAsyncMessage", aMsg, aData); @@ -3946,8 +3959,8 @@ mozilla::ipc::IPCResult ContentParent::RecvAsyncMessage( ipc::StructuredCloneData data; ipc::UnpackClonedMessageDataForParent(aData, data); - ppm->ReceiveMessage(ppm, nullptr, aMsg, false, &data, &cpows, nullptr, - IgnoreErrors()); + ppm->ReceiveMessage(ppm, nullptr, aMsg, false, &data, &cpows, aPrincipal, + nullptr, IgnoreErrors()); } return IPC_OK(); } @@ -4144,7 +4157,8 @@ bool ContentParent::DoLoadMessageManagerScript(const nsAString& aURL, nsresult ContentParent::DoSendAsyncMessage(JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aHelper, - JS::Handle aCpows) { + JS::Handle aCpows, + nsIPrincipal* aPrincipal) { ClonedMessageData data; if (!BuildClonedMessageDataForParent(this, aHelper, data)) { return NS_ERROR_DOM_DATA_CLONE_ERR; @@ -4154,7 +4168,8 @@ nsresult ContentParent::DoSendAsyncMessage(JSContext* aCx, if (aCpows && (!mgr || !mgr->Wrap(aCx, aCpows, &cpows))) { return NS_ERROR_UNEXPECTED; } - if (!SendAsyncMessage(nsString(aMessage), cpows, data)) { + if (!SendAsyncMessage(nsString(aMessage), cpows, Principal(aPrincipal), + data)) { return NS_ERROR_UNEXPECTED; } return NS_OK; @@ -4665,6 +4680,10 @@ mozilla::ipc::IPCResult ContentParent::CommonCreateWindow( nsCOMPtr frame; if (topParent) { frame = topParent->GetOwnerElement(); + + if (NS_WARN_IF(topParent->IsMozBrowserElement())) { + return IPC_FAIL(this, "aThisTab is not a MozBrowser"); + } } nsCOMPtr outerWin; diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h index 76d70fcf7d1d..dc6a7c4c7464 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -351,7 +351,8 @@ class ContentParent final virtual nsresult DoSendAsyncMessage(JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData, - JS::Handle aCpows) override; + JS::Handle aCpows, + nsIPrincipal* aPrincipal) override; /** Notify that a tab is beginning its destruction sequence. */ void NotifyTabDestroying(); @@ -1029,14 +1030,17 @@ class ContentParent final mozilla::ipc::IPCResult RecvSyncMessage( const nsString& aMsg, const ClonedMessageData& aData, - nsTArray&& aCpows, nsTArray* aRetvals); + nsTArray&& aCpows, const IPC::Principal& aPrincipal, + nsTArray* aRetvals); mozilla::ipc::IPCResult RecvRpcMessage( const nsString& aMsg, const ClonedMessageData& aData, - nsTArray&& aCpows, nsTArray* aRetvals); + nsTArray&& aCpows, const IPC::Principal& aPrincipal, + nsTArray* aRetvals); mozilla::ipc::IPCResult RecvAsyncMessage(const nsString& aMsg, nsTArray&& aCpows, + const IPC::Principal& aPrincipal, const ClonedMessageData& aData); // MOZ_CAN_RUN_SCRIPT_BOUNDARY because we don't have MOZ_CAN_RUN_SCRIPT bits diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl index 2b968cef1193..dcfef2fac136 100644 --- a/dom/ipc/PBrowser.ipdl +++ b/dom/ipc/PBrowser.ipdl @@ -185,7 +185,7 @@ nested(upto inside_cpow) sync refcounted protocol PBrowser both: async AsyncMessage(nsString aMessage, CpowEntry[] aCpows, - ClonedMessageData aData); + nsIPrincipal aPrincipal, ClonedMessageData aData); parent: #ifdef ACCESSIBILITY @@ -256,11 +256,11 @@ parent: async Event(RemoteDOMEvent aEvent); sync SyncMessage(nsString aMessage, ClonedMessageData aData, - CpowEntry[] aCpows) + CpowEntry[] aCpows, nsIPrincipal aPrincipal) returns (StructuredCloneData[] retval); nested(inside_sync) sync RpcMessage(nsString aMessage, ClonedMessageData aData, - CpowEntry[] aCpows) + CpowEntry[] aCpows, nsIPrincipal aPrincipal) returns (StructuredCloneData[] retval); /** diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl index 0af6a2987e73..0efdd6658270 100644 --- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -952,11 +952,11 @@ parent: sync GetGfxVars() returns (GfxVarUpdate[] vars); sync SyncMessage(nsString aMessage, ClonedMessageData aData, - CpowEntry[] aCpows) + CpowEntry[] aCpows, Principal aPrincipal) returns (StructuredCloneData[] retval); nested(inside_sync) sync RpcMessage(nsString aMessage, ClonedMessageData aData, - CpowEntry[] aCpows) + CpowEntry[] aCpows, Principal aPrincipal) returns (StructuredCloneData[] retval); async ShowAlert(nsIAlertNotification alert); @@ -1568,7 +1568,7 @@ both: uint64_t aEpoch); async AsyncMessage(nsString aMessage, CpowEntry[] aCpows, - ClonedMessageData aData); + Principal aPrincipal, ClonedMessageData aData); /** * Notify `push-subscription-modified` observers in the parent and child. diff --git a/dom/ipc/PTabContext.ipdlh b/dom/ipc/PTabContext.ipdlh index 93cce54d2f61..a2ca31c1a9e4 100644 --- a/dom/ipc/PTabContext.ipdlh +++ b/dom/ipc/PTabContext.ipdlh @@ -17,9 +17,18 @@ namespace dom { // An IPCTabContext which corresponds to a PBrowser opened by a child when it // receives window.open(). +// +// If isMozBrowserElement is false, this PopupIPCTabContext is either a +// or an app frame. The frame's app-id and app-frame-owner-app-id +// will be equal to the opener's values. +// +// It's an error to set isMozBrowserElement == false if opener is a mozbrowser +// element. Such a PopupIPCTabContext should be rejected by code which receives +// it. struct PopupIPCTabContext { PBrowserOrId opener; + bool isMozBrowserElement; uint64_t chromeOuterWindowID; }; @@ -29,6 +38,10 @@ struct FrameIPCTabContext // The originAttributes dictionary. OriginAttributes originAttributes; + // Whether this is a mozbrowser frame.