зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1329032 - Test privileged about page to use SystemPrincipal as TriggeringPrincipal when loading about page in child. r=gijs
This commit is contained in:
Родитель
05287d4fa8
Коммит
8c97c0cf8b
|
@ -135,6 +135,9 @@ support-files =
|
||||||
!/toolkit/mozapps/extensions/test/xpinstall/restartless.xpi
|
!/toolkit/mozapps/extensions/test/xpinstall/restartless.xpi
|
||||||
!/toolkit/mozapps/extensions/test/xpinstall/theme.xpi
|
!/toolkit/mozapps/extensions/test/xpinstall/theme.xpi
|
||||||
!/toolkit/mozapps/extensions/test/xpinstall/slowinstall.sjs
|
!/toolkit/mozapps/extensions/test/xpinstall/slowinstall.sjs
|
||||||
|
file_about_child.html
|
||||||
|
file_about_parent.html
|
||||||
|
file_register_about_page.js
|
||||||
|
|
||||||
[browser_aboutAccounts.js]
|
[browser_aboutAccounts.js]
|
||||||
skip-if = os == "linux" # Bug 958026
|
skip-if = os == "linux" # Bug 958026
|
||||||
|
@ -481,6 +484,7 @@ tags = mcb
|
||||||
[browser_addCertException.js]
|
[browser_addCertException.js]
|
||||||
[browser_bug1045809.js]
|
[browser_bug1045809.js]
|
||||||
tags = mcb
|
tags = mcb
|
||||||
|
[browser_e10s_about_page_triggeringprincipal.js]
|
||||||
[browser_e10s_switchbrowser.js]
|
[browser_e10s_switchbrowser.js]
|
||||||
[browser_e10s_about_process.js]
|
[browser_e10s_about_process.js]
|
||||||
[browser_e10s_chrome_process.js]
|
[browser_e10s_chrome_process.js]
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
"use strict";
|
||||||
|
Cu.import("resource://gre/modules/Services.jsm");
|
||||||
|
|
||||||
|
registerCleanupFunction(function() {
|
||||||
|
Services.ppmm.broadcastAsyncMessage("AboutPrincipalTest:Unregister");
|
||||||
|
yield BrowserTestUtils.waitForMessage(Services.ppmm, "AboutPrincipalTest:Unregistered");
|
||||||
|
|
||||||
|
Services.ppmm.removeDelayedProcessScript(
|
||||||
|
"chrome://mochitests/content/browser/browser/base/content/test/general/file_register_about_page.js"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
add_task(function* test_principal() {
|
||||||
|
Services.ppmm.loadProcessScript(
|
||||||
|
"chrome://mochitests/content/browser/browser/base/content/test/general/file_register_about_page.js",
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
yield BrowserTestUtils.withNewTab("about:test-about-principal-parent", function*(browser) {
|
||||||
|
let loadPromise = BrowserTestUtils.browserLoaded(browser, false, "about:test-about-principal-child");
|
||||||
|
let myLink = browser.contentDocument.getElementById("aboutchildprincipal");
|
||||||
|
myLink.click();
|
||||||
|
yield loadPromise;
|
||||||
|
|
||||||
|
yield ContentTask.spawn(gBrowser.selectedBrowser, {}, function*() {
|
||||||
|
let channel = content.document.docShell.currentDocumentChannel;
|
||||||
|
is(channel.originalURI.asciiSpec,
|
||||||
|
"about:test-about-principal-child",
|
||||||
|
"sanity check - make sure we test the principal for the correct URI");
|
||||||
|
|
||||||
|
let triggeringPrincipal = channel.loadInfo.triggeringPrincipal;
|
||||||
|
ok(Services.scriptSecurityManager.isSystemPrincipal(triggeringPrincipal),
|
||||||
|
"loading about: from privileged page must have a triggering of System");
|
||||||
|
|
||||||
|
let contentPolicyType = channel.loadInfo.externalContentPolicyType;
|
||||||
|
is(contentPolicyType, Ci.nsIContentPolicy.TYPE_DOCUMENT,
|
||||||
|
"sanity check - loading a top level document");
|
||||||
|
|
||||||
|
let loadingPrincipal = channel.loadInfo.loadingPrincipal;
|
||||||
|
is(loadingPrincipal, null,
|
||||||
|
"sanity check - load of TYPE_DOCUMENT must have a null loadingPrincipal");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Test for Bug 1329032</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Just an about page that only loads in the child!
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Test for Bug 1329032</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a href="about:test-about-principal-child" id="aboutchildprincipal">about:test-about-principal-child</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,81 @@
|
||||||
|
const { interfaces: Ci, results: Cr, manager: Cm, utils: Cu } = Components;
|
||||||
|
Cu.import("resource://gre/modules/Services.jsm");
|
||||||
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||||
|
|
||||||
|
function AboutPage(chromeURL, aboutHost, classID, description, uriFlags) {
|
||||||
|
this.chromeURL = chromeURL;
|
||||||
|
this.aboutHost = aboutHost;
|
||||||
|
this.classID = Components.ID(classID);
|
||||||
|
this.description = description;
|
||||||
|
this.uriFlags = uriFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
AboutPage.prototype = {
|
||||||
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
|
||||||
|
getURIFlags(aURI) { // eslint-disable-line no-unused-vars
|
||||||
|
return this.uriFlags;
|
||||||
|
},
|
||||||
|
|
||||||
|
newChannel(aURI, aLoadInfo) {
|
||||||
|
let newURI = Services.io.newURI(this.chromeURL);
|
||||||
|
let channel = Services.io.newChannelFromURIWithLoadInfo(newURI,
|
||||||
|
aLoadInfo);
|
||||||
|
channel.originalURI = aURI;
|
||||||
|
|
||||||
|
if (this.uriFlags & Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT) {
|
||||||
|
channel.owner = null;
|
||||||
|
}
|
||||||
|
return channel;
|
||||||
|
},
|
||||||
|
|
||||||
|
createInstance(outer, iid) {
|
||||||
|
if (outer !== null) {
|
||||||
|
throw Cr.NS_ERROR_NO_AGGREGATION;
|
||||||
|
}
|
||||||
|
return this.QueryInterface(iid);
|
||||||
|
},
|
||||||
|
|
||||||
|
register() {
|
||||||
|
Cm.QueryInterface(Ci.nsIComponentRegistrar).registerFactory(
|
||||||
|
this.classID, this.description,
|
||||||
|
"@mozilla.org/network/protocol/about;1?what=" + this.aboutHost, this);
|
||||||
|
},
|
||||||
|
|
||||||
|
unregister() {
|
||||||
|
Cm.QueryInterface(Ci.nsIComponentRegistrar).unregisterFactory(
|
||||||
|
this.classID, this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* exported AboutPrincipalTest */
|
||||||
|
var AboutPrincipalTest = {};
|
||||||
|
|
||||||
|
XPCOMUtils.defineLazyGetter(AboutPrincipalTest, "aboutChild", () =>
|
||||||
|
new AboutPage("chrome://mochitests/content/browser/browser/base/content/test/general/file_about_child.html",
|
||||||
|
"test-about-principal-child",
|
||||||
|
"{df6cbd19-c95b-4011-874b-315347c0832c}",
|
||||||
|
"About Principal Child Test",
|
||||||
|
Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
|
||||||
|
Ci.nsIAboutModule.ALLOW_SCRIPT)
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
XPCOMUtils.defineLazyGetter(AboutPrincipalTest, "aboutParent", () =>
|
||||||
|
new AboutPage("chrome://mochitests/content/browser/browser/base/content/test/general/file_about_parent.html",
|
||||||
|
"test-about-principal-parent",
|
||||||
|
"{15e1a03d-9f94-4352-bfb8-94216140d3ab}",
|
||||||
|
"About Principal Parent Test",
|
||||||
|
Ci.nsIAboutModule.ALLOW_SCRIPT)
|
||||||
|
);
|
||||||
|
|
||||||
|
AboutPrincipalTest.aboutParent.register();
|
||||||
|
AboutPrincipalTest.aboutChild.register();
|
||||||
|
|
||||||
|
function onUnregisterMessage() {
|
||||||
|
removeMessageListener("AboutPrincipalTest:Unregister", onUnregisterMessage);
|
||||||
|
AboutPrincipalTest.aboutParent.unregister();
|
||||||
|
AboutPrincipalTest.aboutChild.unregister();
|
||||||
|
sendAsyncMessage("AboutPrincipalTest:Unregistered");
|
||||||
|
}
|
||||||
|
|
||||||
|
addMessageListener("AboutPrincipalTest:Unregister", onUnregisterMessage);
|
Загрузка…
Ссылка в новой задаче