From 0c561716b25cd96cfced8f65fbb7977a067c5c31 Mon Sep 17 00:00:00 2001 From: baku Date: Fri, 6 Jan 2017 17:01:12 +0100 Subject: [PATCH 1/2] Enabling containers by pref --- index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/index.js b/index.js index b9c8e8b..e1cd577 100644 --- a/index.js +++ b/index.js @@ -4,6 +4,19 @@ const {ContextualIdentityService} = require('resource://gre/modules/ContextualId const tabs = require('sdk/tabs'); const webExtension = require('sdk/webextension'); +/* Let's start enabling Containers */ +var prefs = [ + [ "privacy.userContext.enabled", true ], + [ "privacy.userContext.ui.enabled", true ], + [ "privacy.usercontext.about_newtab_segregation.enabled", true ], + [ "privacy.usercontext.longPressBehavior", 1 ] +]; + +const prefService = require("sdk/preferences/service"); +prefs.forEach((pref) => { + prefService.set(pref[0], pref[1]); +}); + const CONTAINER_STORE = 'firefox-container-'; const identitiesState = { From 9ed0b75249e56745cb6d5c5bfc6b6540cab594f7 Mon Sep 17 00:00:00 2001 From: baku Date: Fri, 6 Jan 2017 17:48:47 +0100 Subject: [PATCH 2/2] Implementation of 'openTab' method --- index.js | 25 +++++++++++++++++++++++++ webextension/js/popup.js | 9 +++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index e1cd577..731027d 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,8 @@ /* global require */ const {ContextualIdentityService} = require('resource://gre/modules/ContextualIdentityService.jsm'); +const { Cc, Ci, Cu, Cr } = require('chrome'); + +Cu.import("resource://gre/modules/Services.jsm"); const tabs = require('sdk/tabs'); const webExtension = require('sdk/webextension'); @@ -167,6 +170,25 @@ const contextualIdentities = { remove: removeContainer }; +function openTab(args) { + let browserWin = Services.wm.getMostRecentWindow("navigator:browser"); + + // This should not really happen. + if (!browserWin || !browserWin.gBrowser) { + return Promise.resolve(false); + } + + let userContextId = 0; + if ("containerId" in args) { + userContextId = parseInt(args.containerId.substr(CONTAINER_STORE.length), 10); + } + + let tab = browserWin.gBrowser.addTab(args.url || null, + { userContextId: userContextId }) + browserWin.gBrowser.selectedTab = tab; + return Promise.resolve(true); +} + function handleWebExtensionMessage(message, sender, sendReply) { switch (message.method) { case 'query': @@ -198,6 +220,9 @@ function handleWebExtensionMessage(message, sender, sendReply) { tabs.open('about:preferences#containers'); sendReply({content: 'opened'}); break; + case 'openTab': + sendReply(openTab(message)); + break; } } diff --git a/webextension/js/popup.js b/webextension/js/popup.js index 0978b12..b8870a3 100644 --- a/webextension/js/popup.js +++ b/webextension/js/popup.js @@ -31,9 +31,10 @@ function showContainerTabs(containerId) { cookieStoreId: containerId }).then(hiddenTabUrls=> { hiddenTabUrls.forEach(url=> { - browser.tabs.create({ - url: url, - cookieStoreId: containerId + browser.runtime.sendMessage({ + method: 'openTab', + containerId: containerId, + url: url }); }); }); @@ -94,7 +95,7 @@ browser.runtime.sendMessage({method: 'query'}).then(identities=> { } }); } else if (e.target.matches('.newtab-icon')) { - browser.tabs.create({cookieStoreId: containerId}); + browser.runtime.sendMessage({method: 'openTab', containerId: containerId}); window.close(); } });