Abrowser: new privacy settings feature
This commit is contained in:
parent
52cfb8eb29
commit
3eb4c5f7b2
7 changed files with 560 additions and 26 deletions
177
helpers/DATA/firefox/onboarding/bootstrap.js
vendored
Normal file
177
helpers/DATA/firefox/onboarding/bootstrap.js
vendored
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
// Based on the original onboarding code with deep changes from Ruben Rodriguez
|
||||
// Copyright (C) 2018 Ruben Rodriguez <ruben@gnu.org>
|
||||
|
||||
/* globals APP_STARTUP, ADDON_INSTALL */
|
||||
"use strict";
|
||||
|
||||
const {utils: Cu, interfaces: Ci} = Components;
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
AddonManager: "resource://gre/modules/AddonManager.jsm",
|
||||
});
|
||||
|
||||
const {PREF_STRING, PREF_BOOL, PREF_INT} = Ci.nsIPrefBranch;
|
||||
|
||||
const BROWSER_READY_NOTIFICATION = "browser-delayed-startup-finished";
|
||||
const BROWSER_SESSION_STORE_NOTIFICATION = "sessionstore-windows-restored";
|
||||
|
||||
let waitingForBrowserReady = true;
|
||||
let startupData;
|
||||
|
||||
/**
|
||||
* Set pref. Why no `getPrefs` function is due to the privilege level.
|
||||
* We cannot set prefs inside a framescript but can read.
|
||||
* For simplicity and efficiency, we still read prefs inside the framescript.
|
||||
*
|
||||
* @param {Array} prefs the array of prefs to set.
|
||||
* The array element carries info to set pref, should contain
|
||||
* - {String} name the pref name, such as `browser.onboarding.state`
|
||||
* - {*} value the value to set
|
||||
**/
|
||||
function setPrefs(type, name, value) {
|
||||
switch (type) {
|
||||
case "boolean":
|
||||
Services.prefs.setBoolPref(name, value);
|
||||
break;
|
||||
case "integer":
|
||||
Services.prefs.setIntPref(name, value);
|
||||
break;
|
||||
case "string":
|
||||
Services.prefs.setStringPref(name, value);
|
||||
break;
|
||||
default:
|
||||
throw new TypeError(`Unexpected type (${type}) for preference ${name}.`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Listen and process events from content.
|
||||
*/
|
||||
function initContentMessageListener() {
|
||||
Services.mm.addMessageListener("Onboarding:OnContentMessage", msg => {
|
||||
setPrefs(type, name, value);
|
||||
});
|
||||
}
|
||||
|
||||
function flip(id){
|
||||
var addonObj=-1;
|
||||
AddonManager.getAddonByID(id, function(addon) {
|
||||
addonObj=addon;
|
||||
});
|
||||
var thread = Components.classes["@mozilla.org/thread-manager;1"].getService().currentThread;
|
||||
while (addonObj == null || addonObj == -1)
|
||||
thread.processNextEvent(true);
|
||||
addonObj.userDisabled = addonObj.isActive;
|
||||
if ( addonObj.operationsRequiringRestart != 0)
|
||||
Services.mm.broadcastAsyncMessage("Onboarding:needsrestart");
|
||||
Services.mm.broadcastAsyncMessage("Onboarding:message-from-chrome", {
|
||||
id : id,
|
||||
active : addonObj.isActive,
|
||||
installed : true
|
||||
});
|
||||
}
|
||||
|
||||
function checkaddon(id){
|
||||
var addonObj=-1;
|
||||
AddonManager.getAddonByID(id, function(addon) {
|
||||
addonObj=addon;
|
||||
});
|
||||
var thread = Components.classes["@mozilla.org/thread-manager;1"].getService().currentThread;
|
||||
while (addonObj == -1)
|
||||
thread.processNextEvent(true);
|
||||
if (addonObj != null)
|
||||
Services.mm.broadcastAsyncMessage("Onboarding:message-from-chrome", {
|
||||
id : id,
|
||||
active : addonObj.isActive,
|
||||
installed : true
|
||||
});
|
||||
else
|
||||
Services.mm.broadcastAsyncMessage("Onboarding:message-from-chrome", {
|
||||
id : id,
|
||||
active : false,
|
||||
installed : false
|
||||
});
|
||||
}
|
||||
|
||||
function initContentMessageListener() {
|
||||
Services.mm.addMessageListener("Onboarding:OnContentMessage", msg => {
|
||||
switch (msg.data.action) {
|
||||
case "set-prefs":
|
||||
setPrefs(msg.data.params[0].type, msg.data.params[0].name, msg.data.params[0].value);
|
||||
if (msg.data.params[0].name == "browser.search.geoip.url")
|
||||
setPrefs("boolean", "geo.enabled", msg.data.params[0].value != "" );
|
||||
if (msg.data.params[0].name == "captivedetect.canonicalURL")
|
||||
setPrefs("boolean", "network.captive-portal-service.enabled", msg.data.params[0].value != "" )
|
||||
if (msg.data.params[0].name == "browser.safebrowsing.provider.mozilla.updateURL")
|
||||
setPrefs("boolean", "privacy.trackingprotection.enabled", msg.data.params[0].value != "" )
|
||||
setPrefs("boolean", "privacy.trackingprotection.pbmode.enabled", msg.data.params[0].value != "" )
|
||||
break;
|
||||
case "flip-addon":
|
||||
flip(msg.data.params[0].name);
|
||||
break;
|
||||
case "check-addon":
|
||||
checkaddon(msg.data.params[0].name);
|
||||
break;
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* onBrowserReady - Continues startup of the add-on after browser is ready.
|
||||
*/
|
||||
function onBrowserReady() {
|
||||
|
||||
waitingForBrowserReady = false;
|
||||
|
||||
Services.mm.loadFrameScript("resource://onboarding/onboarding.js", true);
|
||||
initContentMessageListener();
|
||||
}
|
||||
|
||||
/**
|
||||
* observe - nsIObserver callback to handle various browser notifications.
|
||||
*/
|
||||
function observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case BROWSER_READY_NOTIFICATION:
|
||||
Services.obs.removeObserver(observe, BROWSER_READY_NOTIFICATION);
|
||||
onBrowserReady();
|
||||
break;
|
||||
case BROWSER_SESSION_STORE_NOTIFICATION:
|
||||
Services.obs.removeObserver(observe, BROWSER_SESSION_STORE_NOTIFICATION);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function install(aData, aReason) {}
|
||||
|
||||
function uninstall(aData, aReason) {}
|
||||
|
||||
function startup(aData, aReason) {
|
||||
// Cache startup data which contains stuff like the version number, etc.
|
||||
// so we can use it when we init the telemetry
|
||||
startupData = aData;
|
||||
// Only start Onboarding when the browser UI is ready
|
||||
if (Services.startup.startingUp) {
|
||||
Services.obs.addObserver(observe, BROWSER_READY_NOTIFICATION);
|
||||
Services.obs.addObserver(observe, BROWSER_SESSION_STORE_NOTIFICATION);
|
||||
} else {
|
||||
onBrowserReady();
|
||||
}
|
||||
}
|
||||
|
||||
function shutdown(aData, aReason) {
|
||||
startupData = null;
|
||||
// Stop waiting for browser to be ready
|
||||
if (waitingForBrowserReady) {
|
||||
Services.obs.removeObserver(observe, BROWSER_READY_NOTIFICATION);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue