summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/tabs/browser_e10s_about_process.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/tabs/browser_e10s_about_process.js')
-rw-r--r--browser/base/content/test/tabs/browser_e10s_about_process.js174
1 files changed, 174 insertions, 0 deletions
diff --git a/browser/base/content/test/tabs/browser_e10s_about_process.js b/browser/base/content/test/tabs/browser_e10s_about_process.js
new file mode 100644
index 0000000000..f73e8e659c
--- /dev/null
+++ b/browser/base/content/test/tabs/browser_e10s_about_process.js
@@ -0,0 +1,174 @@
+const CHROME = {
+ id: "cb34538a-d9da-40f3-b61a-069f0b2cb9fb",
+ path: "test-chrome",
+ flags: 0,
+};
+const CANREMOTE = {
+ id: "2480d3e1-9ce4-4b84-8ae3-910b9a95cbb3",
+ path: "test-allowremote",
+ flags: Ci.nsIAboutModule.URI_CAN_LOAD_IN_CHILD,
+};
+const MUSTREMOTE = {
+ id: "f849cee5-e13e-44d2-981d-0fb3884aaead",
+ path: "test-mustremote",
+ flags: Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD,
+};
+const CANPRIVILEGEDREMOTE = {
+ id: "a04ffafe-6c63-4266-acae-0f4b093165aa",
+ path: "test-canprivilegedremote",
+ flags:
+ Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
+ Ci.nsIAboutModule.URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS,
+};
+const MUSTEXTENSION = {
+ id: "f7a1798f-965b-49e9-be83-ec6ee4d7d675",
+ path: "test-mustextension",
+ flags: Ci.nsIAboutModule.URI_MUST_LOAD_IN_EXTENSION_PROCESS,
+};
+
+const TEST_MODULES = [
+ CHROME,
+ CANREMOTE,
+ MUSTREMOTE,
+ CANPRIVILEGEDREMOTE,
+ MUSTEXTENSION,
+];
+
+function AboutModule() {}
+
+AboutModule.prototype = {
+ newChannel(aURI, aLoadInfo) {
+ throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
+ },
+
+ getURIFlags(aURI) {
+ for (let module of TEST_MODULES) {
+ if (aURI.pathQueryRef.startsWith(module.path)) {
+ return module.flags;
+ }
+ }
+
+ ok(false, "Called getURIFlags for an unknown page " + aURI.spec);
+ return 0;
+ },
+
+ getIndexedDBOriginPostfix(aURI) {
+ return null;
+ },
+
+ QueryInterface: ChromeUtils.generateQI(["nsIAboutModule"]),
+};
+
+var AboutModuleFactory = {
+ createInstance(aIID) {
+ return new AboutModule().QueryInterface(aIID);
+ },
+
+ QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
+};
+
+add_setup(async function () {
+ SpecialPowers.setBoolPref(
+ "browser.tabs.remote.separatePrivilegedMozillaWebContentProcess",
+ true
+ );
+ let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+ for (let module of TEST_MODULES) {
+ registrar.registerFactory(
+ Components.ID(module.id),
+ "",
+ "@mozilla.org/network/protocol/about;1?what=" + module.path,
+ AboutModuleFactory
+ );
+ }
+});
+
+registerCleanupFunction(() => {
+ SpecialPowers.clearUserPref(
+ "browser.tabs.remote.separatePrivilegedMozillaWebContentProcess"
+ );
+ let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+ for (let module of TEST_MODULES) {
+ registrar.unregisterFactory(Components.ID(module.id), AboutModuleFactory);
+ }
+});
+
+add_task(async function test_chrome() {
+ test_url_for_process_types({
+ url: "about:" + CHROME.path,
+ chromeResult: true,
+ webContentResult: false,
+ privilegedAboutContentResult: false,
+ privilegedMozillaContentResult: false,
+ extensionProcessResult: false,
+ });
+});
+
+add_task(async function test_any() {
+ test_url_for_process_types({
+ url: "about:" + CANREMOTE.path,
+ chromeResult: true,
+ webContentResult: true,
+ privilegedAboutContentResult: true,
+ privilegedMozillaContentResult: true,
+ extensionProcessResult: true,
+ });
+});
+
+add_task(async function test_remote() {
+ test_url_for_process_types({
+ url: "about:" + MUSTREMOTE.path,
+ chromeResult: false,
+ webContentResult: true,
+ privilegedAboutContentResult: false,
+ privilegedMozillaContentResult: false,
+ extensionProcessResult: false,
+ });
+});
+
+add_task(async function test_privileged_remote_true() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.tabs.remote.separatePrivilegedContentProcess", true]],
+ });
+
+ // This shouldn't be taken literally. We will always use the privleged about
+ // content type if the URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS flag is enabled and
+ // the pref is turned on.
+ test_url_for_process_types({
+ url: "about:" + CANPRIVILEGEDREMOTE.path,
+ chromeResult: false,
+ webContentResult: false,
+ privilegedAboutContentResult: true,
+ privilegedMozillaContentResult: false,
+ extensionProcessResult: false,
+ });
+});
+
+add_task(async function test_privileged_remote_false() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.tabs.remote.separatePrivilegedContentProcess", false]],
+ });
+
+ // This shouldn't be taken literally. We will always use the privleged about
+ // content type if the URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS flag is enabled and
+ // the pref is turned on.
+ test_url_for_process_types({
+ url: "about:" + CANPRIVILEGEDREMOTE.path,
+ chromeResult: false,
+ webContentResult: true,
+ privilegedAboutContentResult: false,
+ privilegedMozillaContentResult: false,
+ extensionProcessResult: false,
+ });
+});
+
+add_task(async function test_extension() {
+ test_url_for_process_types({
+ url: "about:" + MUSTEXTENSION.path,
+ chromeResult: false,
+ webContentResult: false,
+ privilegedAboutContentResult: false,
+ privilegedMozillaContentResult: false,
+ extensionProcessResult: true,
+ });
+});