--- a/accessible/jsat/AccessFu.jsm
+++ b/accessible/jsat/AccessFu.jsm
@@ -32,26 +32,16 @@ this.AccessFu = { // jshint ignore:line
attach: function attach(aWindow) {
Utils.init(aWindow);
try {
Services.androidBridge.dispatch('Accessibility:Ready');
Services.obs.addObserver(this, 'Accessibility:Settings', false);
} catch (x) {
// Not on Android
- if (aWindow.navigator.mozSettings) {
- let lock = aWindow.navigator.mozSettings.createLock();
- let req = lock.get(SCREENREADER_SETTING);
- req.addEventListener('success', () => {
- this._systemPref = req.result[SCREENREADER_SETTING];
- this._enableOrDisable();
- });
- aWindow.navigator.mozSettings.addObserver(
- SCREENREADER_SETTING, this.handleEvent);
- }
}
this._activatePref = new PrefCache(
'accessibility.accessfu.activate', this._enableOrDisable.bind(this));
this._enableOrDisable();
},
@@ -60,19 +50,16 @@ this.AccessFu = { // jshint ignore:line
*/
detach: function detach() {
// Avoid disabling twice.
if (this._enabled) {
this._disable();
}
if (Utils.MozBuildApp === 'mobile/android') {
Services.obs.removeObserver(this, 'Accessibility:Settings');
- } else if (Utils.win.navigator.mozSettings) {
- Utils.win.navigator.mozSettings.removeObserver(
- SCREENREADER_SETTING, this.handleEvent);
}
delete this._activatePref;
Utils.uninit();
},
/**
* A lazy getter for event handler that binds the scope to AccessFu object.
*/
--- a/accessible/jsat/Utils.jsm
+++ b/accessible/jsat/Utils.jsm
@@ -1,15 +1,15 @@
/* 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/. */
/* global Components, XPCOMUtils, Services, PluralForm, Logger, Rect, Utils,
States, Relations, Roles, dump, Events, PivotContext, PrefCache */
-/* exported Utils, Logger, PivotContext, PrefCache, SettingCache */
+/* exported Utils, Logger, PivotContext, PrefCache */
'use strict';
const {classes: Cc, utils: Cu, interfaces: Ci} = Components;
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'Services', // jshint ignore:line
'resource://gre/modules/Services.jsm');
@@ -21,18 +21,17 @@ XPCOMUtils.defineLazyModuleGetter(this,
'resource://gre/modules/accessibility/Constants.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'Relations', // jshint ignore:line
'resource://gre/modules/accessibility/Constants.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'States', // jshint ignore:line
'resource://gre/modules/accessibility/Constants.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'PluralForm', // jshint ignore:line
'resource://gre/modules/PluralForm.jsm');
-this.EXPORTED_SYMBOLS = ['Utils', 'Logger', 'PivotContext', 'PrefCache', // jshint ignore:line
- 'SettingCache'];
+this.EXPORTED_SYMBOLS = ['Utils', 'Logger', 'PivotContext', 'PrefCache']; // jshint ignore:line
this.Utils = { // jshint ignore:line
_buildAppMap: {
'{3c2e2abc-06d4-11e1-ac3b-374f68613e61}': 'b2g',
'{d1bfe7d9-c01e-4237-998b-7b5f960a4314}': 'graphene',
'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': 'browser',
'{aa3c5121-dab2-40e2-81ca-7ea25febc110}': 'mobile/android',
'{a23983c0-fd0e-11dc-95ff-0800200c9a66}': 'mobile/xul'
@@ -1069,46 +1068,8 @@ PrefCache.prototype = {
Logger.logException(x);
}
}
},
QueryInterface : XPCOMUtils.generateQI([Ci.nsIObserver,
Ci.nsISupportsWeakReference])
};
-
-this.SettingCache = function SettingCache(aName, aCallback, aOptions = {}) { // jshint ignore:line
- this.value = aOptions.defaultValue;
- let runCallback = () => {
- if (aCallback) {
- aCallback(aName, this.value);
- if (aOptions.callbackOnce) {
- runCallback = () => {};
- }
- }
- };
-
- let settings = Utils.win.navigator.mozSettings;
- if (!settings) {
- if (aOptions.callbackNow) {
- runCallback();
- }
- return;
- }
-
-
- let lock = settings.createLock();
- let req = lock.get(aName);
-
- req.addEventListener('success', () => {
- this.value = req.result[aName] === undefined ?
- aOptions.defaultValue : req.result[aName];
- if (aOptions.callbackNow) {
- runCallback();
- }
- });
-
- settings.addObserver(aName,
- (evt) => {
- this.value = evt.settingValue;
- runCallback();
- });
-};
--- a/accessible/tests/mochitest/jsat/jsatcommon.js
+++ b/accessible/tests/mochitest/jsat/jsatcommon.js
@@ -144,18 +144,17 @@ var AccessFuTest = {
AccessFu.attach(getMainChromeWindow(window));
AccessFu.readyCallback = function readyCallback() {
// Enable logging to the console service.
Logger.test = true;
Logger.logLevel = Logger.DEBUG;
};
- var prefs = [['accessibility.accessfu.notify_output', 1],
- ['dom.mozSettings.enabled', true]];
+ var prefs = [['accessibility.accessfu.notify_output', 1]];
prefs.push.apply(prefs, aAdditionalPrefs);
this.originalDwellThreshold = GestureSettings.dwellThreshold;
this.originalSwipeMaxDuration = GestureSettings.swipeMaxDuration;
this.originalMaxGestureResolveTimeout =
GestureSettings.maxGestureResolveTimeout;
// https://bugzilla.mozilla.org/show_bug.cgi?id=1001945 - sometimes
// SimpleTest.executeSoon timeout is bigger than the timer settings in
--- a/addon-sdk/source/python-lib/cuddlefish/prefs.py
+++ b/addon-sdk/source/python-lib/cuddlefish/prefs.py
@@ -211,17 +211,16 @@ DEFAULT_TEST_PREFS = {
'security.default_personal_cert': 'Select Automatically',
'network.http.prompt-temp-redirect': False,
'security.warn_viewing_mixed': False,
'extensions.defaultProviders.enabled': True,
'datareporting.policy.dataSubmissionPolicyBypassNotification': True,
'layout.css.report_errors': True,
'layout.css.grid.enabled': True,
'layout.spammy_warnings.enabled': False,
- 'dom.mozSettings.enabled': True,
# Make sure the disk cache doesn't get auto disabled
'network.http.bypass-cachelock-threshold': 200000,
# Always use network provider for geolocation tests
# so we bypass the OSX dialog raised by the corelocation provider
'geo.provider.testing': True,
# Background thumbnails in particular cause grief, and disabling thumbnails
# in general can't hurt - we re-enable them when tests need them.
'browser.pagethumbnails.capturing_disabled': True,
--- a/addon-sdk/source/test/preferences/test.json
+++ b/addon-sdk/source/test/preferences/test.json
@@ -26,17 +26,16 @@
"security.default_personal_cert": "Select Automatically",
"network.http.prompt-temp-redirect": false,
"security.warn_viewing_mixed": false,
"extensions.defaultProviders.enabled": true,
"datareporting.policy.dataSubmissionPolicyBypassNotification": true,
"layout.css.report_errors": true,
"layout.css.grid.enabled": true,
"layout.spammy_warnings.enabled": false,
- "dom.mozSettings.enabled": true,
"network.http.bypass-cachelock-threshold": 200000,
"geo.provider.testing": true,
"browser.pagethumbnails.capturing_disabled": true,
"browser.download.panel.shown": true,
"general.useragent.updates.enabled": false,
"media.eme.enabled": true,
"media.eme.apiVisible": true,
"dom.ipc.tabs.shutdownTimeoutSecs": 0,
--- a/b2g/app/b2g.js
+++ b/b2g/app/b2g.js
@@ -273,17 +273,16 @@ pref("ui.graytext", "#b1a598");
pref("ui.highlighttext", "#1a1a1a");
pref("ui.threeddarkshadow", "#000");
pref("ui.threedface", "#ece7e2");
pref("ui.threedhighlight", "#fff");
pref("ui.threedlightshadow", "#ece7e2");
pref("ui.threedshadow", "#aea194");
pref("ui.windowframe", "#efebe7");
-// Themable via mozSettings
pref("ui.menu", "#f97c17");
pref("ui.menutext", "#ffffff");
pref("ui.infobackground", "#343e40");
pref("ui.infotext", "#686868");
pref("ui.window", "#ffffff");
pref("ui.windowtext", "#000000");
pref("ui.highlight", "#b2f2ff");
@@ -404,19 +403,16 @@ pref("dom.phonenumber.substringmatching.
pref("dom.webapps.firstRunWithSIM", true);
#endif
#ifdef MOZ_B2G_RIL
// SingleVariant
pref("dom.mozApps.single_variant_sourcedir", "/persist/svoperapps");
#endif
-// WebSettings
-pref("dom.mozSettings.enabled", true);
-
// controls if we want camera support
pref("device.camera.enabled", true);
pref("media.realtime_decoder.enabled", true);
// TCPSocket
pref("dom.mozTCPSocket.enabled", true);
// "Preview" landing of bug 710563, which is bogged down in analysis
@@ -911,37 +907,16 @@ pref("identity.fxaccounts.remote.profile
pref("identity.fxaccounts.skipDeviceRegistration", true);
// Enable mapped array buffer.
pref("dom.mapped_arraybuffer.enabled", true);
// UDPSocket API
pref("dom.udpsocket.enabled", true);
-// Enable TV Manager API
-pref("dom.tv.enabled", true);
-
-// Enable Inputport Manager API
-pref("dom.inputport.enabled", true);
-
-pref("dom.mozSettings.SettingsDB.debug.enabled", true);
-pref("dom.mozSettings.SettingsManager.debug.enabled", true);
-pref("dom.mozSettings.SettingsRequestManager.debug.enabled", true);
-pref("dom.mozSettings.SettingsService.debug.enabled", true);
-
-pref("dom.mozSettings.SettingsDB.verbose.enabled", false);
-pref("dom.mozSettings.SettingsManager.verbose.enabled", false);
-pref("dom.mozSettings.SettingsRequestManager.verbose.enabled", false);
-pref("dom.mozSettings.SettingsService.verbose.enabled", false);
-
-// Controlling whether we want to allow forcing some Settings
-// IndexedDB transactions to be opened as readonly or keep everything as
-// readwrite.
-pref("dom.mozSettings.allowForceReadOnly", false);
-
// Comma separated list of activity names that can only be provided by
// the system app in dev mode.
pref("dom.activities.developer_mode_only", "import-app");
// mulet apparently loads firefox.js as well as b2g.js, so we have to explicitly
// disable serviceworkers and push here to get them disabled in mulet.
pref("dom.serviceWorkers.enabled", false);
pref("dom.push.enabled", false);
--- a/b2g/chrome/content/desktop.js
+++ b/b2g/chrome/content/desktop.js
@@ -106,18 +106,16 @@ function checkDebuggerPort() {
let dbgport;
try {
dbgport = args.handleFlagWithParam('start-debugger-server', false);
} catch(e) {}
if (dbgport) {
dump('Opening debugger server on ' + dbgport + '\n');
Services.prefs.setCharPref('devtools.debugger.unix-domain-socket', dbgport);
- navigator.mozSettings.createLock().set(
- {'debugger.remote-mode': 'adb-devtools'});
}
}
function initResponsiveDesign() {
Cu.import('resource://devtools/client/responsivedesign/responsivedesign.jsm');
ResponsiveUIManager.on('on', function(event, {tab:tab}) {
let responsive = ResponsiveUIManager.getResponsiveUIForTab(tab);
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -202,17 +202,16 @@
@RESPATH@/components/dom_html.xpt
@RESPATH@/components/dom_offline.xpt
@RESPATH@/components/dom_json.xpt
@RESPATH@/components/dom_power.xpt
@RESPATH@/components/dom_push.xpt
@RESPATH@/components/dom_quota.xpt
@RESPATH@/components/dom_range.xpt
@RESPATH@/components/dom_security.xpt
-@RESPATH@/components/dom_settings.xpt
@RESPATH@/components/dom_sidebar.xpt
@RESPATH@/components/dom_storage.xpt
@RESPATH@/components/dom_stylesheets.xpt
@RESPATH@/components/dom_traversal.xpt
#ifdef MOZ_WEBSPEECH
@RESPATH@/components/dom_webspeechrecognition.xpt
#endif
@RESPATH@/components/dom_workers.xpt
@@ -496,18 +495,16 @@
@RESPATH@/components/servicesComponents.manifest
@RESPATH@/components/cryptoComponents.manifest
@RESPATH@/components/TelemetryStartup.js
@RESPATH@/components/TelemetryStartup.manifest
@RESPATH@/components/XULStore.js
@RESPATH@/components/XULStore.manifest
@RESPATH@/components/messageWakeupService.js
@RESPATH@/components/messageWakeupService.manifest
-@RESPATH@/components/SettingsManager.js
-@RESPATH@/components/SettingsManager.manifest
@RESPATH@/components/recording-cmdline.js
@RESPATH@/components/recording-cmdline.manifest
@RESPATH@/components/htmlMenuBuilder.js
@RESPATH@/components/htmlMenuBuilder.manifest
@RESPATH@/components/NotificationStorage.js
@RESPATH@/components/NotificationStorage.manifest
@RESPATH@/components/Push.js
deleted file mode 100644
--- a/devtools/client/webide/content/devicesettings.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* 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/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {Connection} = require("devtools/shared/client/connection-manager");
-const ConfigView = require("devtools/client/webide/modules/config-view");
-
-var configView = new ConfigView(window);
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- AppManager.on("app-manager-update", OnAppManagerUpdate);
- document.getElementById("close").onclick = CloseUI;
- document.getElementById("device-fields").onchange = UpdateField;
- document.getElementById("device-fields").onclick = CheckReset;
- document.getElementById("search-bar").onkeyup = document.getElementById("search-bar").onclick = SearchField;
- document.getElementById("custom-value").onclick = UpdateNewField;
- document.getElementById("custom-value-type").onchange = ClearNewFields;
- document.getElementById("add-custom-field").onkeyup = CheckNewFieldSubmit;
- BuildUI();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- AppManager.off("app-manager-update", OnAppManagerUpdate);
-});
-
-function CloseUI() {
- window.parent.UI.openProject();
-}
-
-function OnAppManagerUpdate(event, what) {
- if (what == "connection" || what == "runtime-global-actors") {
- BuildUI();
- }
-}
-
-function CheckNewFieldSubmit(event) {
- configView.checkNewFieldSubmit(event);
-}
-
-function UpdateNewField() {
- configView.updateNewField();
-}
-
-function ClearNewFields() {
- configView.clearNewFields();
-}
-
-function CheckReset(event) {
- configView.checkReset(event);
-}
-
-function UpdateField(event) {
- configView.updateField(event);
-}
-
-function SearchField(event) {
- configView.search(event);
-}
-
-var getAllSettings; // Used by tests
-function BuildUI() {
- configView.resetTable();
-
- if (AppManager.connection &&
- AppManager.connection.status == Connection.Status.CONNECTED &&
- AppManager.settingsFront) {
- configView.front = AppManager.settingsFront;
- configView.kind = "Setting";
- configView.includeTypeName = false;
-
- getAllSettings = AppManager.settingsFront.getAllSettings()
- .then(json => configView.generateDisplay(json));
- } else {
- CloseUI();
- }
-}
deleted file mode 100644
--- a/devtools/client/webide/content/devicesettings.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- 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/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/config-view.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/devicesettings.js"></script>
- </head>
- <body>
- <header>
- <div id="controls">
- <a id="close">&deck_close;</a>
- </div>
- <h1>&devicesetting_title;</h1>
- <div id="search">
- <input type="text" id="search-bar" placeholder="&devicesetting_search;"/>
- </div>
- </header>
- <table id="device-fields">
- <tr id="add-custom-field">
- <td>
- <select id="custom-value-type">
- <option value="" selected="selected">&device_typenone;</option>
- <option value="boolean">&device_typeboolean;</option>
- <option value="number">&device_typenumber;</option>
- <option value="string">&device_typestring;</option>
- <option value="object">&device_typeobject;</option>
- </select>
- <input type="text" id="custom-value-name" placeholder="&devicesetting_newname;"/>
- </td>
- <td class="custom-input">
- <input type="text" id="custom-value-text" placeholder="&devicesetting_newtext;"/>
- </td>
- <td>
- <button id="custom-value" class="new-editable">&devicesetting_addnew;</button>
- </td>
- </tr>
- </table>
- </body>
-</html>
--- a/devtools/client/webide/content/jar.mn
+++ b/devtools/client/webide/content/jar.mn
@@ -15,18 +15,16 @@ webide.jar:
content/runtimedetails.js (runtimedetails.js)
content/runtimedetails.xhtml (runtimedetails.xhtml)
content/prefs.js (prefs.js)
content/prefs.xhtml (prefs.xhtml)
content/monitor.xhtml (monitor.xhtml)
content/monitor.js (monitor.js)
content/devicepreferences.js (devicepreferences.js)
content/devicepreferences.xhtml (devicepreferences.xhtml)
- content/devicesettings.js (devicesettings.js)
- content/devicesettings.xhtml (devicesettings.xhtml)
content/wifi-auth.js (wifi-auth.js)
content/wifi-auth.xhtml (wifi-auth.xhtml)
content/logs.xhtml (logs.xhtml)
content/logs.js (logs.js)
content/project-listing.xhtml (project-listing.xhtml)
content/project-listing.js (project-listing.js)
content/project-panel.js (project-panel.js)
content/runtime-panel.js (runtime-panel.js)
--- a/devtools/client/webide/content/webide.js
+++ b/devtools/client/webide/content/webide.js
@@ -449,19 +449,16 @@ var UI = {
if (AppManager.deviceFront) {
monitorCmd.removeAttribute("disabled");
detailsCmd.removeAttribute("disabled");
screenshotCmd.removeAttribute("disabled");
}
if (AppManager.preferenceFront) {
devicePrefsCmd.removeAttribute("disabled");
}
- if (AppManager.settingsFront) {
- settingsCmd.removeAttribute("disabled");
- }
disconnectCmd.removeAttribute("disabled");
} else {
monitorCmd.setAttribute("disabled", "true");
detailsCmd.setAttribute("disabled", "true");
screenshotCmd.setAttribute("disabled", "true");
disconnectCmd.setAttribute("disabled", "true");
devicePrefsCmd.setAttribute("disabled", "true");
settingsCmd.setAttribute("disabled", "true");
@@ -1047,20 +1044,16 @@ var Cmds = {
showRuntimeDetails: function () {
UI.selectDeckPanel("runtimedetails");
},
showDevicePrefs: function () {
UI.selectDeckPanel("devicepreferences");
},
- showSettings: function () {
- UI.selectDeckPanel("devicesettings");
- },
-
showMonitor: function () {
UI.selectDeckPanel("monitor");
},
play: Task.async(function* () {
let busy;
switch (AppManager.selectedProject.type) {
case "packaged":
--- a/devtools/client/webide/content/webide.xul
+++ b/devtools/client/webide/content/webide.xul
@@ -152,17 +152,16 @@
<deck flex="1" id="deck" selectedIndex="-1">
<iframe id="deck-panel-details" flex="1" src="details.xhtml"/>
<iframe id="deck-panel-projecteditor" flex="1"/>
<iframe id="deck-panel-addons" flex="1" src="addons.xhtml"/>
<iframe id="deck-panel-prefs" flex="1" src="prefs.xhtml"/>
<iframe id="deck-panel-runtimedetails" flex="1" lazysrc="runtimedetails.xhtml"/>
<iframe id="deck-panel-monitor" flex="1" lazysrc="monitor.xhtml"/>
<iframe id="deck-panel-devicepreferences" flex="1" lazysrc="devicepreferences.xhtml"/>
- <iframe id="deck-panel-devicesettings" flex="1" lazysrc="devicesettings.xhtml"/>
<iframe id="deck-panel-logs" flex="1" src="logs.xhtml"/>
<iframe id="deck-panel-simulator" flex="1" lazysrc="simulator.xhtml"/>
</deck>
<splitter class="devtools-side-splitter" id="runtime-listing-splitter"/>
<vbox id="runtime-listing-panel" class="runtime-listing panel-list" flex="1">
<div id="runtime-listing-wrapper" class="panel-list-wrapper">
<iframe id="runtime-listing-panel-details" flex="1" src="runtime-listing.xhtml" tooltip="aHTMLTooltip"/>
</div>
--- a/devtools/client/webide/modules/app-manager.js
+++ b/devtools/client/webide/modules/app-manager.js
@@ -12,17 +12,16 @@ const EventEmitter = require("devtools/s
const {TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
const {AppProjects} = require("devtools/client/webide/modules/app-projects");
const TabStore = require("devtools/client/webide/modules/tab-store");
const {AppValidator} = require("devtools/client/webide/modules/app-validator");
const {ConnectionManager, Connection} = require("devtools/shared/client/connection-manager");
const {AppActorFront} = require("devtools/shared/apps/app-actor-front");
const {getDeviceFront} = require("devtools/shared/fronts/device");
const {getPreferenceFront} = require("devtools/shared/fronts/preference");
-const {getSettingsFront} = require("devtools/shared/fronts/settings");
const {Task} = require("devtools/shared/task");
const {RuntimeScanners, RuntimeTypes} = require("devtools/client/webide/modules/runtimes");
const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
const Telemetry = require("devtools/client/shared/telemetry");
const {ProjectBuilding} = require("./build");
const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
@@ -564,23 +563,16 @@ var AppManager = exports.AppManager = {
get preferenceFront() {
if (!this._listTabsResponse) {
return null;
}
return getPreferenceFront(this.connection.client, this._listTabsResponse);
},
- get settingsFront() {
- if (!this._listTabsResponse) {
- return null;
- }
- return getSettingsFront(this.connection.client, this._listTabsResponse);
- },
-
disconnectRuntime: function () {
if (!this.connected) {
return promise.resolve();
}
let deferred = promise.defer();
this.connection.once(Connection.Events.DISCONNECTED, () => deferred.resolve());
this.connection.disconnect();
return deferred.promise;
--- a/devtools/client/webide/modules/runtime-list.js
+++ b/devtools/client/webide/modules/runtime-list.js
@@ -99,19 +99,16 @@ RuntimeList.prototype = {
if (AppManager.connected) {
if (AppManager.deviceFront) {
detailsCmd.removeAttribute("disabled");
screenshotCmd.removeAttribute("disabled");
}
if (AppManager.preferenceFront) {
devicePrefsCmd.removeAttribute("disabled");
}
- if (AppManager.settingsFront) {
- settingsCmd.removeAttribute("disabled");
- }
disconnectCmd.removeAttribute("disabled");
} else {
detailsCmd.setAttribute("disabled", "true");
screenshotCmd.setAttribute("disabled", "true");
disconnectCmd.setAttribute("disabled", "true");
devicePrefsCmd.setAttribute("disabled", "true");
settingsCmd.setAttribute("disabled", "true");
}
--- a/devtools/client/webide/test/chrome.ini
+++ b/devtools/client/webide/test/chrome.ini
@@ -55,16 +55,15 @@ skip-if = (os == "linux") # Bug 1024734
[test_addons.html]
skip-if = true # Bug 1201392 - Update add-ons after migration
[test_device_runtime.html]
[test_autoconnect_runtime.html]
[test_autoselect_project.html]
[test_telemetry.html]
skip-if = true # Bug 1201392 - Update add-ons after migration
[test_device_preferences.html]
-[test_device_settings.html]
[test_fullscreenToolbox.html]
[test_zoom.html]
[test_build.html]
[test_simulators.html]
skip-if = true # Bug 1281138 - intermittent failures
[test_toolbox.html]
[test_app_validator.html]
deleted file mode 100644
--- a/devtools/client/webide/test/test_device_settings.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <script type="application/javascript;version=1.8" src="device_front_shared.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function*() {
- if (SpecialPowers.isMainProcess()) {
- Cu.import("resource://gre/modules/SettingsRequestManager.jsm");
- }
-
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- let win = yield openWebIDE();
-
- let settingIframe = win.document.querySelector("#deck-panel-devicesettings");
- let docRuntime = getRuntimeDocument(win);
-
- win.AppManager.update("runtime-list");
-
- yield connectToLocalRuntime(win);
-
- let settings = docRuntime.querySelector("#runtime-settings");
-
- ok(!settings.hasAttribute("disabled"), "device settings cmd enabled");
-
- let deck = win.document.querySelector("#deck");
-
- win.Cmds.showSettings();
- is(deck.selectedPanel, settingIframe, "device settings iframe selected");
-
- yield nextTick();
-
- yield lazyIframeIsLoaded(settingIframe);
-
- yield settingIframe.contentWindow.getAllSettings;
-
- setDocument(settingIframe);
-
- let fields = doc.querySelectorAll(".editable");
-
- addNewField();
-
- addNewFieldWithEnter();
-
- editExistingField();
-
- addNewFieldInteger();
-
- yield editFieldInteger();
-
- yield resetNewField("new-string-field");
-
- addNewFieldBoolean();
-
- searchFields(deck, "new-boolean-field2");
-
- DebuggerServer.destroy();
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
- }).then(null, e => {
- ok(false, "Exception: " + e);
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
--- a/devtools/server/actors/moz.build
+++ b/devtools/server/actors/moz.build
@@ -47,17 +47,16 @@ DevToolsModules(
'preference.js',
'pretty-print-worker.js',
'process.js',
'profiler.js',
'promises.js',
'reflow.js',
'root.js',
'script.js',
- 'settings.js',
'source.js',
'storage.js',
'string.js',
'styleeditor.js',
'styles.js',
'stylesheets.js',
'tab.js',
'timeline.js',
deleted file mode 100644
--- a/devtools/server/actors/settings.js
+++ /dev/null
@@ -1,148 +0,0 @@
-/* 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/. */
-
-"use strict";
-
-const {Cc, Ci} = require("chrome");
-const protocol = require("devtools/shared/protocol");
-const {DebuggerServer} = require("devtools/server/main");
-const promise = require("promise");
-const Services = require("Services");
-const { settingsSpec } = require("devtools/shared/specs/settings");
-const { FileUtils} = require("resource://gre/modules/FileUtils.jsm");
-const { NetUtil} = require("resource://gre/modules/NetUtil.jsm");
-
-var defaultSettings = {};
-var settingsFile;
-
-exports.register = function (handle) {
- handle.addGlobalActor(SettingsActor, "settingsActor");
-};
-
-exports.unregister = function (handle) {
-};
-
-function getDefaultSettings() {
- let chan = NetUtil.newChannel({
- uri: NetUtil.newURI(settingsFile),
- loadUsingSystemPrincipal: true});
- let stream = chan.open2();
- // Obtain a converter to read from a UTF-8 encoded input stream.
- let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
- .createInstance(Ci.nsIScriptableUnicodeConverter);
- converter.charset = "UTF-8";
- let rawstr = converter.ConvertToUnicode(NetUtil.readInputStreamToString(
- stream,
- stream.available()) || "");
-
- try {
- defaultSettings = JSON.parse(rawstr);
- } catch (e) {
- // ignore
- }
- stream.close();
-}
-
-function loadSettingsFile() {
- // Loading resource://app/defaults/settings.json doesn't work because
- // settings.json is not in the omnijar.
- // So we look for the app dir instead and go from here...
- if (settingsFile) {
- return;
- }
- settingsFile = FileUtils.getFile("DefRt", ["settings.json"], false);
- if (!settingsFile || (settingsFile && !settingsFile.exists())) {
- // On b2g desktop builds the settings.json file is moved in the
- // profile directory by the build system.
- settingsFile = FileUtils.getFile("ProfD", ["settings.json"], false);
- if (!settingsFile || (settingsFile && !settingsFile.exists())) {
- console.log("settings.json file does not exist");
- }
- }
-
- if (settingsFile.exists()) {
- getDefaultSettings();
- }
-}
-
-var SettingsActor = exports.SettingsActor = protocol.ActorClassWithSpec(settingsSpec, {
- _getSettingsService: function () {
- let win = Services.wm.getMostRecentWindow(DebuggerServer.chromeWindowType);
- return win.navigator.mozSettings;
- },
-
- getSetting: function (name) {
- let deferred = promise.defer();
- let lock = this._getSettingsService().createLock();
- let req = lock.get(name);
- req.onsuccess = function () {
- deferred.resolve(req.result[name]);
- };
- req.onerror = function () {
- deferred.reject(req.error);
- };
- return deferred.promise;
- },
-
- setSetting: function (name, value) {
- let deferred = promise.defer();
- let data = {};
- data[name] = value;
- let lock = this._getSettingsService().createLock();
- let req = lock.set(data);
- req.onsuccess = function () {
- deferred.resolve(true);
- };
- req.onerror = function () {
- deferred.reject(req.error);
- };
- return deferred.promise;
- },
-
- _hasUserSetting: function (name, value) {
- if (typeof value === "object") {
- return JSON.stringify(defaultSettings[name]) !== JSON.stringify(value);
- }
- return (defaultSettings[name] !== value);
- },
-
- getAllSettings: function () {
- loadSettingsFile();
- let settings = {};
- let self = this;
-
- let deferred = promise.defer();
- let lock = this._getSettingsService().createLock();
- let req = lock.get("*");
-
- req.onsuccess = function () {
- for (let name in req.result) {
- settings[name] = {
- value: req.result[name],
- hasUserValue: self._hasUserSetting(name, req.result[name])
- };
- }
- deferred.resolve(settings);
- };
- req.onfailure = function () {
- deferred.reject(req.error);
- };
-
- return deferred.promise;
- },
-
- clearUserSetting: function (name) {
- loadSettingsFile();
- try {
- this.setSetting(name, defaultSettings[name]);
- } catch (e) {
- console.log(e);
- }
- }
-});
-
-// For tests
-exports._setDefaultSettings = function (settings) {
- defaultSettings = settings || {};
-};
--- a/devtools/server/main.js
+++ b/devtools/server/main.js
@@ -428,23 +428,16 @@ var DebuggerServer = {
type: { global: true }
});
this.registerModule("devtools/server/actors/actor-registry", {
prefix: "actorRegistry",
constructor: "ActorRegistryActor",
type: { global: true }
});
}
- if (Services.prefs.getBoolPref("dom.mozSettings.enabled")) {
- this.registerModule("devtools/server/actors/settings", {
- prefix: "settings",
- constructor: "SettingsActor",
- type: { global: true }
- });
- }
this.registerModule("devtools/server/actors/addons", {
prefix: "addons",
constructor: "AddonsActor",
type: { global: true }
});
this.registerModule("devtools/server/actors/device", {
prefix: "device",
constructor: "DeviceActor",
--- a/devtools/server/tests/mochitest/chrome.ini
+++ b/devtools/server/tests/mochitest/chrome.ini
@@ -84,17 +84,16 @@ support-files =
[test_memory_allocations_06.html]
[test_memory_allocations_07.html]
[test_memory_attach_01.html]
[test_memory_attach_02.html]
[test_memory_census.html]
[test_memory_gc_01.html]
[test_memory_gc_events.html]
[test_preference.html]
-[test_settings.html]
[test_setupInParentChild.html]
[test_styles-applied.html]
[test_styles-computed.html]
[test_styles-layout.html]
[test_styles-matched.html]
[test_styles-modify.html]
[test_styles-svg.html]
[test_unsafeDereference.html]
deleted file mode 100644
--- a/devtools/server/tests/mochitest/test_settings.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-Bug 1022797 - Settings support from WebIDE
--->
-<head>
- <meta charset="utf-8">
- <title>Test Settings Actor</title>
- <script type="text/javascript" src="chrome://mochikit/content/MochiKit/MochiKit.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
-</head>
-<body>
-<pre id="test">
-<script>
-
-function runTests() {
- var Cu = Components.utils;
- var Cc = Components.classes;
- var Ci = Components.interfaces;
-
- var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
- var {DebuggerClient} = require("devtools/shared/client/main");
- var {DebuggerServer} = require("devtools/server/main");
-
- if (SpecialPowers.isMainProcess()) {
- Cu.import("resource://gre/modules/SettingsRequestManager.jsm");
- }
-
- SimpleTest.waitForExplicitFinish();
-
- var {getSettingsFront} = require("devtools/shared/fronts/settings");
- var {_setDefaultSettings} = require("devtools/server/actors/settings");
-
- DebuggerServer.init(function () { return true; });
- DebuggerServer.addBrowserActors();
-
- var client = new DebuggerClient(DebuggerServer.connectPipe());
- client.connect().then(function onConnect() {
- client.listTabs(function onListTabs(aResponse) {
- var s = getSettingsFront(client, aResponse);
-
- var settings = {};
- var resetSettings = {};
- var fakeSettings = {
- "wifi.enabled": true,
- "audio.volume.alarm": 15,
- "app.reportCrashes": "ask",
- "app.someObject": { active: true }
- };
- var localSetting = {
- "wifi.enabled": false,
- "audio.volume.alarm": 0,
- "app.reportCrashes": "none",
- "app.someObject": {}
- };
-
- function checkValues() {
- is(settings.allSettings["wifi.enabled"].hasUserValue, false, "original unchanged bool setting");
- is(settings.allSettings["audio.volume.alarm"].hasUserValue, false, "original unchanged int setting");
- is(settings.allSettings["app.reportCrashes"].hasUserValue, false, "original unchanged string setting");
- is(settings.allSettings["app.someObject"].hasUserValue, false, "original unchanged object setting");
-
- is(settings.allSettings["wifi.enabled"].value, fakeSettings["wifi.enabled"], "original read/write bool setting");
- is(settings.allSettings["audio.volume.alarm"].value, fakeSettings["audio.volume.alarm"], "original read/write int setting");
- is(settings.allSettings["app.reportCrashes"].value, fakeSettings["app.reportCrashes"], "original read/write string setting");
- is(JSON.stringify(settings.allSettings["app.someObject"].value), JSON.stringify(fakeSettings["app.someObject"]), "original read/write object setting");
-
- is(settings.allUpdatedSettings["wifi.enabled"].hasUserValue, true, "updated user-changed bool setting");
- is(settings.allUpdatedSettings["audio.volume.alarm"].hasUserValue, true, "updated user-changed int setting");
- is(settings.allUpdatedSettings["app.reportCrashes"].hasUserValue, true, "updated user-changed string setting");
- is(settings.allUpdatedSettings["app.someObject"].hasUserValue, true, "updated user-changed object setting");
-
- is(settings["wifi.enabled"], localSetting["wifi.enabled"], "updated bool setting");
- is(settings["audio.volume.alarm"], localSetting["audio.volume.alarm"], "updated int setting");
- is(settings["app.reportCrashes"], localSetting["app.reportCrashes"], "updated string setting");
- is(JSON.stringify(settings["app.someObject"]), JSON.stringify(localSetting["app.someObject"]), "updated object as string setting");
-
- is(resetSettings["wifi.enabled"], fakeSettings["wifi.enabled"], "reset to original bool setting");
- is(resetSettings["audio.volume.alarm"], fakeSettings["audio.volume.alarm"], "reset to original int setting");
- is(resetSettings["app.reportCrashes"], fakeSettings["app.reportCrashes"], "reset to original string setting");
- is(JSON.stringify(resetSettings["app.someObject"]), JSON.stringify(fakeSettings["app.someObject"]), "reset to original object setting");
-
- client.close().then(() => {
- DebuggerServer.destroy();
- SimpleTest.finish();
- });
- }
-
- // settings.json doesn't exist outside of b2g so we will fake it.
- _setDefaultSettings(fakeSettings);
- s.setSetting("wifi.enabled", fakeSettings["wifi.enabled"])
- .then(() => s.setSetting("audio.volume.alarm", fakeSettings["audio.volume.alarm"]))
- .then(() => s.setSetting("app.reportCrashes", fakeSettings["app.reportCrashes"]))
- .then(() => s.setSetting("app.someObject", fakeSettings["app.someObject"]))
- .then(() => s.getAllSettings().then(json => settings.allSettings = json))
- .then(() => s.setSetting("wifi.enabled", localSetting["wifi.enabled"]))
- .then(() => s.setSetting("audio.volume.alarm", localSetting["audio.volume.alarm"]))
- .then(() => s.setSetting("app.reportCrashes", localSetting["app.reportCrashes"]))
- .then(() => s.setSetting("app.someObject", localSetting["app.someObject"]))
- .then(() => s.getAllSettings().then(json => settings.allUpdatedSettings = json))
- .then(() => s.getSetting("wifi.enabled")).then(value => settings["wifi.enabled"] = value)
- .then(() => s.getSetting("audio.volume.alarm")).then(value => settings["audio.volume.alarm"] = value)
- .then(() => s.getSetting("app.reportCrashes")).then(value => settings["app.reportCrashes"] = value)
- .then(() => s.getSetting("app.someObject")).then(value => settings["app.someObject"] = value)
- .then(() => s.clearUserSetting("wifi.enabled")).then(() => {
- s.getSetting("wifi.enabled").then(value => resetSettings["wifi.enabled"] = value);
- })
- .then(() => s.clearUserSetting("audio.volume.alarm")).then(() => {
- s.getSetting("audio.volume.alarm").then(value => resetSettings["audio.volume.alarm"] = value);
- })
- .then(() => s.clearUserSetting("app.reportCrashes")).then(() => {
- s.getSetting("app.reportCrashes").then(value => resetSettings["app.reportCrashes"] = value);
- })
- .then(() => s.clearUserSetting("app.someObject")).then(() => {
- s.getSetting("app.someObject").then(value => {
- resetSettings["app.someObject"] = value
- }).then(checkValues);
- });
- });
- });
-}
-
-window.onload = function () {
- runTests();
-}
-</script>
-</pre>
-</body>
-</html>
--- a/devtools/shared/discovery/discovery.js
+++ b/devtools/shared/discovery/discovery.js
@@ -132,55 +132,32 @@ Transport.prototype = {
onStopListening: function () {}
};
/**
* Manages the local device's name. The name can be generated in serveral
* platform-specific ways (see |_generate|). The aim is for each device on the
- * same local network to have a unique name. If the Settings API is available,
- * the name is saved there to persist across reboots.
+ * same local network to have a unique name.
*/
function LocalDevice() {
this._name = LocalDevice.UNKNOWN;
- if ("@mozilla.org/settingsService;1" in Cc) {
- this._settings =
- Cc["@mozilla.org/settingsService;1"].getService(Ci.nsISettingsService);
- Services.obs.addObserver(this, "mozsettings-changed", false);
- }
// Trigger |_get| to load name eagerly
this._get();
}
-LocalDevice.SETTING = "devtools.discovery.device";
LocalDevice.UNKNOWN = "unknown";
LocalDevice.prototype = {
_get: function () {
- if (!this._settings) {
- // Without Settings API, just generate a name and stop, since the value
- // can't be persisted.
- this._generate();
- return;
- }
- // Initial read of setting value
- this._settings.createLock().get(LocalDevice.SETTING, {
- handle: (_, name) => {
- if (name && name !== LocalDevice.UNKNOWN) {
- this._name = name;
- log("Device: " + this._name);
- return;
- }
- // No existing name saved, so generate one.
- this._generate();
- },
- handleError: () => log("Failed to get device name setting")
- });
+ // Without Settings API, just generate a name and stop, since the value
+ // can't be persisted.
+ this._generate();
},
/**
* Generate a new device name from various platform-specific properties.
* Triggers the |name| setter to persist if needed.
*/
_generate: function () {
if (Services.appinfo.widgetToolkit == "gonk") {
@@ -198,49 +175,23 @@ LocalDevice.prototype = {
// For Firefox for Android, use the device's model name.
// TODO: Bug 1180997: Find the right way to expose an editable name
this.name = sysInfo.get("device");
} else {
this.name = sysInfo.get("host");
}
},
- /**
- * Observe any changes that might be made via the Settings app
- */
- observe: function (subject, topic, data) {
- if (topic !== "mozsettings-changed") {
- return;
- }
- if ("wrappedJSObject" in subject) {
- subject = subject.wrappedJSObject;
- }
- if (subject.key !== LocalDevice.SETTING) {
- return;
- }
- this._name = subject.value;
- log("Device: " + this._name);
- },
-
get name() {
return this._name;
},
set name(name) {
- if (!this._settings) {
- this._name = name;
- log("Device: " + this._name);
- return;
- }
- // Persist to Settings API
- // The new value will be seen and stored by the observer above
- this._settings.createLock().set(LocalDevice.SETTING, name, {
- handle: () => {},
- handleError: () => log("Failed to set device name setting")
- });
+ this._name = name;
+ log("Device: " + this._name);
}
};
function Discovery() {
EventEmitter.decorate(this);
this.localServices = {};
--- a/devtools/shared/fronts/moz.build
+++ b/devtools/shared/fronts/moz.build
@@ -25,17 +25,16 @@ DevToolsModules(
'memory.js',
'performance-entries.js',
'performance-recording.js',
'performance.js',
'preference.js',
'profiler.js',
'promises.js',
'reflow.js',
- 'settings.js',
'storage.js',
'string.js',
'styles.js',
'stylesheets.js',
'timeline.js',
'webaudio.js',
'webextension-inspected-window.js',
'webgl.js'
deleted file mode 100644
--- a/devtools/shared/fronts/settings.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/* 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/. */
-"use strict";
-
-const {settingsSpec} = require("devtools/shared/specs/settings");
-const protocol = require("devtools/shared/protocol");
-
-const SettingsFront = protocol.FrontClassWithSpec(settingsSpec, {
- initialize: function (client, form) {
- protocol.Front.prototype.initialize.call(this, client);
- this.actorID = form.settingsActor;
- this.manage(this);
- },
-});
-
-const _knownSettingsFronts = new WeakMap();
-
-exports.getSettingsFront = function (client, form) {
- if (!form.settingsActor) {
- return null;
- }
- if (_knownSettingsFronts.has(client)) {
- return _knownSettingsFronts.get(client);
- }
- let front = new SettingsFront(client, form);
- _knownSettingsFronts.set(client, front);
- return front;
-};
--- a/devtools/shared/specs/moz.build
+++ b/devtools/shared/specs/moz.build
@@ -31,17 +31,16 @@ DevToolsModules(
'performance-entries.js',
'performance-recording.js',
'performance.js',
'preference.js',
'profiler.js',
'promises.js',
'reflow.js',
'script.js',
- 'settings.js',
'source.js',
'storage.js',
'string.js',
'styleeditor.js',
'styles.js',
'stylesheets.js',
'timeline.js',
'webaudio.js',
deleted file mode 100644
--- a/devtools/shared/specs/settings.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/* 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/. */
-"use strict";
-
-const {Arg, RetVal, generateActorSpec} = require("devtools/shared/protocol");
-
-const settingsSpec = generateActorSpec({
- typeName: "settings",
-
- methods: {
- getSetting: {
- request: { value: Arg(0) },
- response: { value: RetVal("json") }
- },
- setSetting: {
- request: { name: Arg(0), value: Arg(1) },
- response: {}
- },
- getAllSettings: {
- request: {},
- response: { value: RetVal("json") }
- },
- clearUserSetting: {
- request: { name: Arg(0) },
- response: {}
- }
- },
-});
-
-exports.settingsSpec = settingsSpec;
--- a/dom/audiochannel/AudioChannelService.cpp
+++ b/dom/audiochannel/AudioChannelService.cpp
@@ -20,17 +20,16 @@
#include "nsIScriptSecurityManager.h"
#include "nsISupportsPrimitives.h"
#include "nsThreadUtils.h"
#include "nsHashPropertyBag.h"
#include "nsComponentManagerUtils.h"
#include "nsGlobalWindow.h"
#include "nsPIDOMWindow.h"
#include "nsServiceManagerUtils.h"
-#include "mozilla/dom/SettingChangeNotificationBinding.h"
#ifdef MOZ_WIDGET_GONK
#include "nsJSUtils.h"
#endif
#include "mozilla/Preferences.h"
using namespace mozilla;
@@ -230,21 +229,16 @@ AudioChannelService::Shutdown()
if (gAudioChannelService) {
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
if (obs) {
obs->RemoveObserver(gAudioChannelService, "xpcom-shutdown");
obs->RemoveObserver(gAudioChannelService, "outer-window-destroyed");
if (IsParentProcess()) {
obs->RemoveObserver(gAudioChannelService, "ipc:content-shutdown");
-
-#ifdef MOZ_WIDGET_GONK
- // To monitor the volume settings based on audio channel.
- obs->RemoveObserver(gAudioChannelService, "mozsettings-changed");
-#endif
}
}
gAudioChannelService->mWindows.Clear();
gAudioChannelService->mPlayingChildren.Clear();
gAudioChannelService->mTabParents.Clear();
gAudioChannelService = nullptr;
@@ -274,21 +268,16 @@ AudioChannelService::AudioChannelService
, mAnyChannel(false)
{
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
if (obs) {
obs->AddObserver(this, "xpcom-shutdown", false);
obs->AddObserver(this, "outer-window-destroyed", false);
if (IsParentProcess()) {
obs->AddObserver(this, "ipc:content-shutdown", false);
-
-#ifdef MOZ_WIDGET_GONK
- // To monitor the volume settings based on audio channel.
- obs->AddObserver(this, "mozsettings-changed", false);
-#endif
}
}
Preferences::AddBoolVarCache(&sAudioChannelMutedByDefault,
"dom.audiochannel.mutedByDefault");
Preferences::AddBoolVarCache(&sAudioChannelCompeting,
"dom.audiochannel.audioCompeting");
}
--- a/dom/events/moz.build
+++ b/dom/events/moz.build
@@ -134,17 +134,16 @@ if CONFIG['MOZ_WEBSPEECH']:
include('/ipc/chromium/chromium-config.mozbuild')
FINAL_LIBRARY = 'xul'
LOCAL_INCLUDES += [
'/docshell/base',
'/dom/base',
'/dom/html',
- '/dom/settings',
'/dom/storage',
'/dom/svg',
'/dom/workers',
'/dom/xml',
'/dom/xul',
'/js/xpconnect/wrappers',
'/layout/generic',
'/layout/xul',
--- a/dom/events/test/test_all_synthetic_events.html
+++ b/dom/events/test/test_all_synthetic_events.html
@@ -254,24 +254,16 @@ const kEventConstructors = {
MozMmsEvent: { create: function (aName, aProps) {
return new MozMmsEvent(aName, aProps);
},
},
MozOtaStatusEvent: { create: function (aName, aProps) {
return new MozOtaStatusEvent(aName, aProps);
},
},
- MozSettingsEvent: { create: function (aName, aProps) {
- return new MozSettingsEvent(aName, aProps);
- },
- },
- MozSettingsTransactionEvent: { create: function (aName, aProps) {
- return new MozSettingsTransactionEvent(aName, aProps);
- },
- },
MozSmsEvent: { create: function (aName, aProps) {
return new MozSmsEvent(aName, aProps);
},
},
MozStkCommandEvent: { create: function (aName, aProps) {
return new MozStkCommandEvent(aName, aProps);
},
},
--- a/dom/media/tests/mochitest/NetworkPreparationChromeScript.js
+++ b/dom/media/tests/mochitest/NetworkPreparationChromeScript.js
@@ -3,31 +3,16 @@
const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
const { Services } = Cu.import('resource://gre/modules/Services.jsm');
var browser = Services.wm.getMostRecentWindow('navigator:browser');
var connection = browser.navigator.mozMobileConnections[0];
// provide a fake APN and enable data connection.
-function enableDataConnection() {
- let setLock = browser.navigator.mozSettings.createLock();
- setLock.set({
- 'ril.data.enabled': true,
- 'ril.data.apnSettings': [
- [
- {'carrier':'T-Mobile US',
- 'apn':'epc.tmobile.com',
- 'mmsc':'http://mms.msg.eng.t-mobile.com/mms/wapenc',
- 'types':['default','supl','mms']}
- ]
- ]
- });
-}
-
// enable 3G radio
function enableRadio() {
if (connection.radioState !== 'enabled') {
connection.setRadioEnabled(true);
}
}
// disable 3G radio
@@ -42,17 +27,16 @@ addMessageListener('prepare-network', fu
if (connection.data.connected) {
connection.removeEventListener('datachange', onDataChange);
Services.prefs.setIntPref('network.proxy.type', 2);
sendAsyncMessage('network-ready', true);
}
});
enableRadio();
- enableDataConnection();
});
addMessageListener('network-cleanup', function(message) {
connection.addEventListener('datachange', function onDataChange() {
if (!connection.data.connected) {
connection.removeEventListener('datachange', onDataChange);
Services.prefs.setIntPref('network.proxy.type', 2);
sendAsyncMessage('network-disabled', true);
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -7,17 +7,16 @@
JAR_MANIFESTS += ['jar.mn']
interfaces = [
'base',
'canvas',
'core',
'html',
'events',
- 'settings',
'stylesheets',
'sidebar',
'css',
'traversal',
'range',
'xbl',
'xpath',
'xul',
@@ -63,17 +62,16 @@ DIRS += [
'mathml',
'media',
'notification',
'offline',
'power',
'push',
'quota',
'security',
- 'settings',
'storage',
'svg',
'time',
'locales',
'network',
'permission',
'plugins/base',
'plugins/ipc',
deleted file mode 100644
--- a/dom/settings/SettingsDB.jsm
+++ /dev/null
@@ -1,249 +0,0 @@
-/* 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/. */
-
-"use strict";
-
-var Cc = Components.classes;
-var Ci = Components.interfaces;
-var Cu = Components.utils;
-
-Cu.importGlobalProperties(['Blob', 'File']);
-Cu.import("resource://gre/modules/Services.jsm");
-
-this.EXPORTED_SYMBOLS = ["SettingsDB", "SETTINGSDB_NAME", "SETTINGSSTORE_NAME"];
-
-var DEBUG = false;
-var VERBOSE = false;
-
-try {
- DEBUG =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsDB.debug.enabled");
- VERBOSE =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsDB.verbose.enabled");
-} catch (ex) { }
-
-function debug(s) {
- dump("-*- SettingsDB: " + s + "\n");
-}
-
-const TYPED_ARRAY_THINGS = new Set([
- "Int8Array",
- "Uint8Array",
- "Uint8ClampedArray",
- "Int16Array",
- "Uint16Array",
- "Int32Array",
- "Uint32Array",
- "Float32Array",
- "Float64Array",
-]);
-
-this.SETTINGSDB_NAME = "settings";
-this.SETTINGSDB_VERSION = 8;
-this.SETTINGSSTORE_NAME = "settings";
-
-Cu.import("resource://gre/modules/IndexedDBHelper.jsm");
-Cu.import("resource://gre/modules/FileUtils.jsm");
-Cu.import("resource://gre/modules/NetUtil.jsm");
-
-this.SettingsDB = function SettingsDB() {}
-
-SettingsDB.prototype = {
-
- __proto__: IndexedDBHelper.prototype,
-
- upgradeSchema: function upgradeSchema(aTransaction, aDb, aOldVersion, aNewVersion) {
- let objectStore;
- if (aOldVersion == 0) {
- objectStore = aDb.createObjectStore(SETTINGSSTORE_NAME, { keyPath: "settingName" });
- if (VERBOSE) debug("Created object stores");
- } else if (aOldVersion == 1) {
- if (VERBOSE) debug("Get object store for upgrade and remove old index");
- objectStore = aTransaction.objectStore(SETTINGSSTORE_NAME);
- objectStore.deleteIndex("settingValue");
- } else {
- if (VERBOSE) debug("Get object store for upgrade");
- objectStore = aTransaction.objectStore(SETTINGSSTORE_NAME);
- }
-
- // Loading resource://app/defaults/settings.json doesn't work because
- // settings.json is not in the omnijar.
- // So we look for the app dir instead and go from here...
- let settingsFile = FileUtils.getFile("DefRt", ["settings.json"], false);
- if (!settingsFile || (settingsFile && !settingsFile.exists())) {
- // On b2g desktop builds the settings.json file is moved in the
- // profile directory by the build system.
- settingsFile = FileUtils.getFile("ProfD", ["settings.json"], false);
- if (!settingsFile || (settingsFile && !settingsFile.exists())) {
- return;
- }
- }
-
- let chan = NetUtil.newChannel({
- uri: NetUtil.newURI(settingsFile),
- loadUsingSystemPrincipal: true});
- let stream = chan.open2();
- // Obtain a converter to read from a UTF-8 encoded input stream.
- let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
- .createInstance(Ci.nsIScriptableUnicodeConverter);
- converter.charset = "UTF-8";
- let rawstr = converter.ConvertToUnicode(NetUtil.readInputStreamToString(
- stream,
- stream.available()) || "");
- let settings;
- try {
- settings = JSON.parse(rawstr);
- } catch(e) {
- if (DEBUG) debug("Error parsing " + settingsFile.path + " : " + e);
- return;
- }
- stream.close();
-
- objectStore.openCursor().onsuccess = function(event) {
- let cursor = event.target.result;
- if (cursor) {
- let value = cursor.value;
- if (value.settingName in settings) {
- if (VERBOSE) debug("Upgrade " +settings[value.settingName]);
- value.defaultValue = this.prepareValue(settings[value.settingName]);
- delete settings[value.settingName];
- if ("settingValue" in value) {
- value.userValue = this.prepareValue(value.settingValue);
- delete value.settingValue;
- }
- cursor.update(value);
- } else if ("userValue" in value || "settingValue" in value) {
- value.defaultValue = undefined;
- if (aOldVersion == 1 && value.settingValue) {
- value.userValue = this.prepareValue(value.settingValue);
- delete value.settingValue;
- }
- cursor.update(value);
- } else {
- cursor.delete();
- }
- cursor.continue();
- } else {
- for (let name in settings) {
- let value = this.prepareValue(settings[name]);
- if (VERBOSE) debug("Set new:" + name +", " + value);
- objectStore.add({ settingName: name, defaultValue: value, userValue: undefined });
- }
- }
- }.bind(this);
- },
-
- // If the value is a data: uri, convert it to a Blob.
- convertDataURIToBlob: function(aValue) {
- /* base64 to ArrayBuffer decoding, from
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding
- */
- function b64ToUint6 (nChr) {
- return nChr > 64 && nChr < 91 ?
- nChr - 65
- : nChr > 96 && nChr < 123 ?
- nChr - 71
- : nChr > 47 && nChr < 58 ?
- nChr + 4
- : nChr === 43 ?
- 62
- : nChr === 47 ?
- 63
- :
- 0;
- }
-
- function base64DecToArr(sBase64, nBlocksSize) {
- let sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""),
- nInLen = sB64Enc.length,
- nOutLen = nBlocksSize ? Math.ceil((nInLen * 3 + 1 >> 2) / nBlocksSize) * nBlocksSize
- : nInLen * 3 + 1 >> 2,
- taBytes = new Uint8Array(nOutLen);
-
- for (let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {
- nMod4 = nInIdx & 3;
- nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;
- if (nMod4 === 3 || nInLen - nInIdx === 1) {
- for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
- taBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;
- }
- nUint24 = 0;
- }
- }
- return taBytes;
- }
-
- // Check if we have a data: uri, and if it's base64 encoded.
- // data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA...
- if (typeof aValue == "string" && aValue.startsWith("data:")) {
- try {
- let uri = Services.io.newURI(aValue);
- // XXX: that would be nice to reuse the c++ bits of the data:
- // protocol handler instead.
- let mimeType = "application/octet-stream";
- let mimeDelim = aValue.indexOf(";");
- if (mimeDelim !== -1) {
- mimeType = aValue.substring(5, mimeDelim);
- }
- let start = aValue.indexOf(",") + 1;
- let isBase64 = ((aValue.indexOf("base64") + 7) == start);
- let payload = aValue.substring(start);
-
- return new Blob([isBase64 ? base64DecToArr(payload) : payload],
- { type: mimeType });
- } catch(e) {
- dump(e);
- }
- }
- return aValue
- },
-
- getObjectKind: function(aObject) {
- if (aObject === null || aObject === undefined) {
- return "primitive";
- } else if (Array.isArray(aObject)) {
- return "array";
- } else if (aObject instanceof File) {
- return "file";
- } else if (aObject instanceof Ci.nsIDOMBlob) {
- return "blob";
- } else if (aObject.constructor.name == "Date") {
- return "date";
- } else if (TYPED_ARRAY_THINGS.has(aObject.constructor.name)) {
- return aObject.constructor.name;
- } else if (typeof aObject == "object") {
- return "object";
- } else {
- return "primitive";
- }
- },
-
- // Makes sure any property that is a data: uri gets converted to a Blob.
- prepareValue: function(aObject) {
- let kind = this.getObjectKind(aObject);
- if (kind == "array") {
- let res = [];
- aObject.forEach(function(aObj) {
- res.push(this.prepareValue(aObj));
- }, this);
- return res;
- } else if (kind == "file" || kind == "blob" || kind == "date") {
- return aObject;
- } else if (kind == "primitive") {
- return this.convertDataURIToBlob(aObject);
- }
-
- // Fall-through, we now have a dictionary object.
- let res = {};
- for (let prop in aObject) {
- res[prop] = this.prepareValue(aObject[prop]);
- }
- return res;
- },
-
- init: function init() {
- this.initDBHelper(SETTINGSDB_NAME, SETTINGSDB_VERSION,
- [SETTINGSSTORE_NAME]);
- }
-}
deleted file mode 100644
--- a/dom/settings/SettingsManager.js
+++ /dev/null
@@ -1,506 +0,0 @@
-/* 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/. */
-
-"use strict";
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
-
-var DEBUG = false;
-var VERBOSE = false;
-
-try {
- DEBUG =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsManager.debug.enabled");
- VERBOSE =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsManager.verbose.enabled");
-} catch (ex) { }
-
-function debug(s) {
- dump("-*- SettingsManager: " + s + "\n");
-}
-
-XPCOMUtils.defineLazyServiceGetter(Services, "DOMRequest",
- "@mozilla.org/dom/dom-request-service;1",
- "nsIDOMRequestService");
-XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
- "@mozilla.org/childprocessmessagemanager;1",
- "nsIMessageSender");
-XPCOMUtils.defineLazyServiceGetter(this, "mrm",
- "@mozilla.org/memory-reporter-manager;1",
- "nsIMemoryReporterManager");
-XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
- "@mozilla.org/uuid-generator;1",
- "nsIUUIDGenerator");
-
-const kObserverSoftLimit = 10;
-
-/**
- * In order to make SettingsManager work with Privileged Apps, we need the lock
- * to be OOP. However, the lock state needs to be managed on the child process,
- * while the IDB functions now happen on the parent process so we don't have to
- * expose IDB permissions at the child process level. We use the
- * DOMRequestHelper mechanism to deal with DOMRequests/promises across the
- * processes.
- *
- * However, due to the nature of the IDBTransaction lifetime, we need to relay
- * to the parent when to finalize the transaction once the child is done with the
- * lock. We keep a list of all open requests for a lock, and once the lock
- * reaches the end of its receiveMessage function with no more queued requests,
- * we consider it dead. At that point, we send a message to the parent to notify
- * it to finalize the transaction.
- */
-
-function SettingsLock(aSettingsManager) {
- if (VERBOSE) debug("settings lock init");
- this._open = true;
- this._settingsManager = aSettingsManager;
- this._id = uuidgen.generateUUID().toString();
-
- // DOMRequestIpcHelper.initHelper sets this._window
- this.initDOMRequestHelper(this._settingsManager._window, ["Settings:Get:OK", "Settings:Get:KO",
- "Settings:Clear:OK", "Settings:Clear:KO",
- "Settings:Set:OK", "Settings:Set:KO",
- "Settings:Finalize:OK", "Settings:Finalize:KO"]);
- let createLockPayload = {
- lockID: this._id,
- isServiceLock: false,
- windowID: this._settingsManager.innerWindowID,
- lockStack: (new Error).stack
- };
- this.sendMessage("Settings:CreateLock", createLockPayload);
- Services.tm.currentThread.dispatch(this._closeHelper.bind(this), Ci.nsIThread.DISPATCH_NORMAL);
-
- // We only want to file closeHelper once per set of receiveMessage calls.
- this._closeCalled = true;
-}
-
-SettingsLock.prototype = {
- __proto__: DOMRequestIpcHelper.prototype,
- set onsettingstransactionsuccess(aHandler) {
- this.__DOM_IMPL__.setEventHandler("onsettingstransactionsuccess", aHandler);
- },
-
- get onsettingstransactionsuccess() {
- return this.__DOM_IMPL__.getEventHandler("onsettingstransactionsuccess");
- },
-
- set onsettingstransactionfailure(aHandler) {
- this.__DOM_IMPL__.setEventHandler("onsettingstransactionfailure", aHandler);
- },
-
- get onsettingstransactionfailure() {
- return this.__DOM_IMPL__.getEventHandler("onsettingstransactionfailure");
- },
-
- get closed() {
- return !this._open;
- },
-
- _closeHelper: function() {
- if (VERBOSE) debug("closing lock " + this._id);
- this._open = false;
- this._closeCalled = false;
- if (!this._requests || Object.keys(this._requests).length == 0) {
- if (VERBOSE) debug("Requests exhausted, finalizing " + this._id);
- this._settingsManager.unregisterLock(this._id);
- this.sendMessage("Settings:Finalize", {lockID: this._id});
- } else {
- if (VERBOSE) debug("Requests left: " + Object.keys(this._requests).length);
- this.sendMessage("Settings:Run", {lockID: this._id});
- }
- },
-
-
- _wrap: function _wrap(obj) {
- return Cu.cloneInto(obj, this._settingsManager._window);
- },
-
- sendMessage: function(aMessageName, aData) {
- // sendMessage can be called after our window has died, or get
- // queued to run later in a thread via _closeHelper, but the
- // SettingsManager may have died in between the time it was
- // scheduled and the time it runs. Make sure our window is valid
- // before sending, otherwise just ignore.
- if (!this._settingsManager._window) {
- Cu.reportError(
- "SettingsManager window died, cannot run settings transaction." +
- " SettingsMessage: " + aMessageName +
- " SettingsData: " + JSON.stringify(aData));
- return;
- }
- cpmm.sendAsyncMessage(aMessageName,
- aData,
- undefined,
- this._settingsManager._window.document.nodePrincipal);
- },
-
- receiveMessage: function(aMessage) {
- let msg = aMessage.data;
-
- // SettingsRequestManager broadcasts changes to all locks in the child. If
- // our lock isn't being addressed, just return.
- if (msg.lockID != this._id) {
- return;
- }
- if (VERBOSE) debug("receiveMessage (" + this._id + "): " + aMessage.name);
-
- // Finalizing a transaction does not return a request ID since we are
- // supposed to fire callbacks.
- //
- // We also destroy the DOMRequestHelper after we've received the
- // finalize message. At this point, we will be guarenteed no more
- // request returns are coming from the SettingsRequestManager.
-
- if (!msg.requestID) {
- let event;
- switch (aMessage.name) {
- case "Settings:Finalize:OK":
- if (VERBOSE) debug("Lock finalize ok: " + this._id);
- event = new this._window.MozSettingsTransactionEvent("settingstransactionsuccess", {});
- this.__DOM_IMPL__.dispatchEvent(event);
- this.destroyDOMRequestHelper();
- break;
- case "Settings:Finalize:KO":
- if (DEBUG) debug("Lock finalize failed: " + this._id);
- event = new this._window.MozSettingsTransactionEvent("settingstransactionfailure", {
- error: msg.errorMsg
- });
- this.__DOM_IMPL__.dispatchEvent(event);
- this.destroyDOMRequestHelper();
- break;
- default:
- if (DEBUG) debug("Message type " + aMessage.name + " is missing a requestID");
- }
- return;
- }
-
-
- let req = this.getRequest(msg.requestID);
- if (!req) {
- if (DEBUG) debug("Matching request not found.");
- return;
- }
- this.removeRequest(msg.requestID);
- // DOMRequest callbacks called from here can die due to having
- // things like marionetteScriptFinished in them. Make sure we file
- // our call to run/finalize BEFORE opening the lock and fulfilling
- // DOMRequests.
- if (!this._closeCalled) {
- // We only want to file closeHelper once per set of receiveMessage calls.
- Services.tm.currentThread.dispatch(this._closeHelper.bind(this), Ci.nsIThread.DISPATCH_NORMAL);
- this._closeCalled = true;
- }
- if (VERBOSE) debug("receiveMessage: " + aMessage.name);
- switch (aMessage.name) {
- case "Settings:Get:OK":
- for (let i in msg.settings) {
- msg.settings[i] = this._wrap(msg.settings[i]);
- }
- this._open = true;
- Services.DOMRequest.fireSuccess(req.request, this._wrap(msg.settings));
- this._open = false;
- break;
- case "Settings:Set:OK":
- case "Settings:Clear:OK":
- this._open = true;
- Services.DOMRequest.fireSuccess(req.request, 0);
- this._open = false;
- break;
- case "Settings:Get:KO":
- case "Settings:Set:KO":
- case "Settings:Clear:KO":
- if (DEBUG) debug("error:" + msg.errorMsg);
- Services.DOMRequest.fireError(req.request, msg.errorMsg);
- break;
- default:
- if (DEBUG) debug("Wrong message: " + aMessage.name);
- }
- },
-
- get: function get(aName) {
- if (VERBOSE) debug("get (" + this._id + "): " + aName);
- if (!this._open) {
- dump("Settings lock not open!\n");
- throw Components.results.NS_ERROR_ABORT;
- }
- let req = this.createRequest();
- let reqID = this.getRequestId({request: req});
- this.sendMessage("Settings:Get", {requestID: reqID,
- lockID: this._id,
- name: aName});
- return req;
- },
-
- set: function set(aSettings) {
- if (VERBOSE) debug("send: " + JSON.stringify(aSettings));
- if (!this._open) {
- throw "Settings lock not open";
- }
- let req = this.createRequest();
- let reqID = this.getRequestId({request: req});
- this.sendMessage("Settings:Set", {requestID: reqID,
- lockID: this._id,
- settings: aSettings});
- return req;
- },
-
- clear: function clear() {
- if (VERBOSE) debug("clear");
- if (!this._open) {
- throw "Settings lock not open";
- }
- let req = this.createRequest();
- let reqID = this.getRequestId({request: req});
- this.sendMessage("Settings:Clear", {requestID: reqID,
- lockID: this._id});
- return req;
- },
-
- classID: Components.ID("{60c9357c-3ae0-4222-8f55-da01428470d5}"),
- contractID: "@mozilla.org/settingsLock;1",
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports,
- Ci.nsIObserver,
- Ci.nsISupportsWeakReference])
-};
-
-function SettingsManager() {
- this._callbacks = null;
- this._isRegistered = false;
- this._locks = [];
- this._createdLocks = 0;
- this._unregisteredLocks = 0;
-}
-
-SettingsManager.prototype = {
- _wrap: function _wrap(obj) {
- return Cu.cloneInto(obj, this._window);
- },
-
- set onsettingchange(aHandler) {
- this.__DOM_IMPL__.setEventHandler("onsettingchange", aHandler);
- this.checkMessageRegistration();
- },
-
- get onsettingchange() {
- return this.__DOM_IMPL__.getEventHandler("onsettingchange");
- },
-
- createLock: function() {
- let lock = new SettingsLock(this);
- if (VERBOSE) debug("creating lock " + lock._id);
- this._locks.push(lock._id);
- this._createdLocks++;
- return lock;
- },
-
- unregisterLock: function(aLockID) {
- let lock_index = this._locks.indexOf(aLockID);
- if (lock_index != -1) {
- if (VERBOSE) debug("Unregistering lock " + aLockID);
- this._locks.splice(lock_index, 1);
- this._unregisteredLocks++;
- }
- },
-
- receiveMessage: function(aMessage) {
- if (VERBOSE) debug("Settings::receiveMessage: " + aMessage.name);
- let msg = aMessage.json;
-
- switch (aMessage.name) {
- case "Settings:Change:Return:OK":
- if (VERBOSE) debug('data:' + msg.key + ':' + msg.value + '\n');
-
- let event = new this._window.MozSettingsEvent("settingchange", this._wrap({
- settingName: msg.key,
- settingValue: msg.value
- }));
- this.__DOM_IMPL__.dispatchEvent(event);
-
- if (this._callbacks && this._callbacks[msg.key]) {
- if (VERBOSE) debug("observe callback called! " + msg.key + " " + this._callbacks[msg.key].length);
- this._callbacks[msg.key].forEach(function(cb) {
- cb(this._wrap({settingName: msg.key, settingValue: msg.value}));
- }.bind(this));
- } else {
- if (VERBOSE) debug("no observers stored!");
- }
- break;
- default:
- if (DEBUG) debug("Wrong message: " + aMessage.name);
- }
- },
-
- // If we have either observer callbacks or an event handler,
- // register for messages from the main thread. Otherwise, if no one
- // is listening, unregister to reduce parent load.
- checkMessageRegistration: function checkRegistration() {
- let handler = this.__DOM_IMPL__.getEventHandler("onsettingchange");
- if (!this._isRegistered) {
- if (VERBOSE) debug("Registering for messages");
- cpmm.sendAsyncMessage("Settings:RegisterForMessages",
- undefined,
- undefined,
- this._window.document.nodePrincipal);
- this._isRegistered = true;
- } else {
- if ((!this._callbacks || Object.keys(this._callbacks).length == 0) &&
- !handler) {
- if (VERBOSE) debug("Unregistering for messages");
- cpmm.sendAsyncMessage("Settings:UnregisterForMessages",
- undefined,
- undefined,
- this._window.document.nodePrincipal);
- this._isRegistered = false;
- this._callbacks = null;
- }
- }
- },
-
- addObserver: function addObserver(aName, aCallback) {
- if (VERBOSE) debug("addObserver " + aName);
-
- if (!this._callbacks) {
- this._callbacks = {};
- }
-
- if (!this._callbacks[aName]) {
- this._callbacks[aName] = [aCallback];
- } else {
- this._callbacks[aName].push(aCallback);
- }
-
- let length = this._callbacks[aName].length;
- if (length >= kObserverSoftLimit) {
- debug("WARNING: MORE THAN " + kObserverSoftLimit + " OBSERVERS FOR " +
- aName + ": " + length + " FROM" + (new Error).stack);
-#ifdef DEBUG
- debug("JS STOPS EXECUTING AT THIS POINT IN DEBUG BUILDS!");
- throw Components.results.NS_ERROR_ABORT;
-#endif
- }
-
- this.checkMessageRegistration();
- },
-
- removeObserver: function removeObserver(aName, aCallback) {
- if (VERBOSE) debug("deleteObserver " + aName);
- if (this._callbacks && this._callbacks[aName]) {
- let index = this._callbacks[aName].indexOf(aCallback);
- if (index != -1) {
- this._callbacks[aName].splice(index, 1);
- if (this._callbacks[aName].length == 0) {
- delete this._callbacks[aName];
- }
- } else {
- if (VERBOSE) debug("Callback not found for: " + aName);
- }
- } else {
- if (VERBOSE) debug("No observers stored for " + aName);
- }
- this.checkMessageRegistration();
- },
-
- init: function(aWindow) {
- if (VERBOSE) debug("SettingsManager init");
- mrm.registerStrongReporter(this);
- cpmm.addMessageListener("Settings:Change:Return:OK", this);
- Services.obs.addObserver(this, "inner-window-destroyed", false);
- let util = aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
- this.innerWindowID = util.currentInnerWindowID;
- this._window = aWindow;
- },
-
- observe: function(aSubject, aTopic, aData) {
- if (VERBOSE) debug("Topic: " + aTopic);
- if (aTopic === "inner-window-destroyed") {
- let wId = aSubject.QueryInterface(Ci.nsISupportsPRUint64).data;
- if (wId === this.innerWindowID) {
- if (DEBUG) debug("Received: inner-window-destroyed for valid innerWindowID=" + wId + ", cleanup.");
- this.cleanup();
- }
- }
- },
-
- collectReports: function(aCallback, aData, aAnonymize) {
- for (let topic in this._callbacks) {
- let length = this._callbacks[topic].length;
- if (length == 0) {
- continue;
- }
-
- let path;
- if (length < kObserverSoftLimit) {
- path = "settings-observers";
- } else {
- path = "settings-observers-suspect/referent(topic=" +
- (aAnonymize ? "<anonymized>" : topic) + ")";
- }
-
- aCallback.callback("", path,
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- length,
- "The number of settings observers for this topic.",
- aData);
- }
-
- aCallback.callback("",
- "settings-locks/alive",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this._locks.length,
- "The number of locks that are currently alives.",
- aData);
-
- aCallback.callback("",
- "settings-locks/created",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this._createdLocks,
- "The number of locks that were created.",
- aData);
-
- aCallback.callback("",
- "settings-locks/deleted",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this._unregisteredLocks,
- "The number of locks that were deleted.",
- aData);
- },
-
- cleanup: function() {
- Services.obs.removeObserver(this, "inner-window-destroyed");
- // At this point, the window is dying, so there's nothing left
- // that we could do with our lock. Go ahead and run finalize on
- // it to make sure changes are commited.
- for (let i = 0; i < this._locks.length; ++i) {
- if (DEBUG) debug("Lock alive at destroy, finalizing: " + this._locks[i]);
- // Due to bug 1105511 we should be able to send this without
- // cached principals. However, this is scary because any iframe
- // in the process could run this?
- cpmm.sendAsyncMessage("Settings:Finalize",
- {lockID: this._locks[i]});
- }
- cpmm.removeMessageListener("Settings:Change:Return:OK", this);
- mrm.unregisterStrongReporter(this);
- this.innerWindowID = null;
- this._window = null;
- },
-
- classID: Components.ID("{c40b1c70-00fb-11e2-a21f-0800200c9a66}"),
- contractID: "@mozilla.org/settingsManager;1",
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports,
- Ci.nsIDOMGlobalPropertyInitializer,
- Ci.nsIObserver,
- Ci.nsIMemoryReporter]),
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([SettingsManager, SettingsLock]);
deleted file mode 100644
--- a/dom/settings/SettingsManager.manifest
+++ /dev/null
@@ -1,5 +0,0 @@
-component {c40b1c70-00fb-11e2-a21f-0800200c9a66} SettingsManager.js
-contract @mozilla.org/settingsManager;1 {c40b1c70-00fb-11e2-a21f-0800200c9a66}
-
-component {60c9357c-3ae0-4222-8f55-da01428470d5} SettingsManager.js
-contract @mozilla.org/settingsLock;1 {60c9357c-3ae0-4222-8f55-da01428470d5}
deleted file mode 100644
--- a/dom/settings/SettingsRequestManager.jsm
+++ /dev/null
@@ -1,1213 +0,0 @@
-/* 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/. */
-
-"use strict";
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cr = Components.results;
-const Cu = Components.utils;
-
-Cu.importGlobalProperties(['File']);
-
-this.EXPORTED_SYMBOLS = ["SettingsRequestManager"];
-
-Cu.import("resource://gre/modules/SettingsDB.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-var DEBUG = false;
-var VERBOSE = false;
-var TRACK = false;
-
-try {
- DEBUG =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsRequestManager.debug.enabled");
- VERBOSE =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsRequestManager.verbose.enabled");
- TRACK =
- Services.prefs.getBoolPref("dom.mozSettings.trackTasksUsage");
-} catch (ex) { }
-
-var allowForceReadOnly = false;
-try {
- allowForceReadOnly = Services.prefs.getBoolPref("dom.mozSettings.allowForceReadOnly");
-} catch (ex) { }
-
-function debug(s) {
- dump("-*- SettingsRequestManager: " + s + "\n");
-}
-
-var inParent = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime)
- .processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
-
-const kXpcomShutdownObserverTopic = "xpcom-shutdown";
-const kInnerWindowDestroyed = "inner-window-destroyed";
-const kMozSettingsChangedObserverTopic = "mozsettings-changed";
-const kSettingsReadSuffix = "-read";
-const kSettingsWriteSuffix = "-write";
-const kSettingsClearPermission = "settings-clear";
-const kAllSettingsReadPermission = "settings" + kSettingsReadSuffix;
-const kAllSettingsWritePermission = "settings" + kSettingsWriteSuffix;
-// Any application with settings permissions, be it for all settings
-// or a single one, will need to be able to access the settings API.
-// The settings-api permission allows an app to see the mozSettings
-// API in order to create locks and queue tasks. Whether these tasks
-// will be allowed depends on the exact permissions the app has.
-const kSomeSettingsReadPermission = "settings-api" + kSettingsReadSuffix;
-const kSomeSettingsWritePermission = "settings-api" + kSettingsWriteSuffix;
-
-// Time, in seconds, to consider the API is starting to jam
-var kSoftLockupDelta = 30;
-try {
- kSoftLockupDelta = Services.prefs.getIntPref("dom.mozSettings.softLockupDelta");
-} catch (ex) { }
-
-XPCOMUtils.defineLazyServiceGetter(this, "mrm",
- "@mozilla.org/memory-reporter-manager;1",
- "nsIMemoryReporterManager");
-XPCOMUtils.defineLazyServiceGetter(this, "ppmm",
- "@mozilla.org/parentprocessmessagemanager;1",
- "nsIMessageBroadcaster");
-XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
- "@mozilla.org/uuid-generator;1",
- "nsIUUIDGenerator");
-XPCOMUtils.defineLazyServiceGetter(this, "gSettingsService",
- "@mozilla.org/settingsService;1",
- "nsISettingsService");
-
-var SettingsPermissions = {
- checkPermission: function(aPrincipal, aPerm) {
- if (!aPrincipal) {
- Cu.reportError("SettingsPermissions.checkPermission was passed a null principal. Denying all permissions.");
- return false;
- }
- if (aPrincipal.origin == "[System Principal]" ||
- Services.perms.testExactPermissionFromPrincipal(aPrincipal, aPerm) == Ci.nsIPermissionManager.ALLOW_ACTION) {
- return true;
- }
- return false;
- },
- hasAllReadPermission: function(aPrincipal) {
- return this.checkPermission(aPrincipal, kAllSettingsReadPermission);
- },
- hasAllWritePermission: function(aPrincipal) {
- return this.checkPermission(aPrincipal, kAllSettingsWritePermission);
- },
- hasSomeReadPermission: function(aPrincipal) {
- return this.checkPermission(aPrincipal, kSomeSettingsReadPermission);
- },
- hasSomeWritePermission: function(aPrincipal) {
- return this.checkPermission(aPrincipal, kSomeSettingsWritePermission);
- },
- hasClearPermission: function(aPrincipal) {
- return this.checkPermission(aPrincipal, kSettingsClearPermission);
- },
- hasReadPermission: function(aPrincipal, aSettingsName) {
- return this.hasAllReadPermission(aPrincipal) || this.checkPermission(aPrincipal, "settings:" + aSettingsName + kSettingsReadSuffix);
- },
- hasWritePermission: function(aPrincipal, aSettingsName) {
- return this.hasAllWritePermission(aPrincipal) || this.checkPermission(aPrincipal, "settings:" + aSettingsName + kSettingsWriteSuffix);
- }
-};
-
-
-function SettingsLockInfo(aDB, aMsgMgr, aPrincipal, aLockID, aIsServiceLock, aWindowID, aLockStack) {
- return {
- // ID Shared with the object on the child side
- lockID: aLockID,
- // Is this a content lock or a settings service lock?
- isServiceLock: aIsServiceLock,
- // Which inner window ID
- windowID: aWindowID,
- // Where does this lock comes from
- lockStack: aLockStack,
- // Tasks to be run once the lock is at the head of the queue
- tasks: [],
- // This is set to true once a transaction is ready to run, but is not at the
- // head of the lock queue.
- consumable: false,
- // Holds values that are requested to be set until the lock lifetime ends,
- // then commits them to the DB.
- queuedSets: {},
- // Internal transaction object
- _transaction: undefined,
- // Message manager that controls the lock
- _mm: aMsgMgr,
- // If true, it means a permissions check failed, so just fail everything now
- _failed: false,
- // If we're slated to run finalize, set this to make sure we don't
- // somehow run other events afterward.
- finalizing: false,
- // Lets us know if we can use this lock for a clear command
- canClear: true,
- // Lets us know if this lock has been used to clear at any point.
- hasCleared: false,
- // forceReadOnly sets whether we want to do a read only transaction. Define
- // true by default, and let queueTask() set this to false if we queue any
- // "set" task. Since users of settings locks will queue all tasks before
- // any idb transaction is created, we know we will have all needed
- // information to set this before creating a transaction.
- forceReadOnly: true,
- // Principal the lock was created under. We assume that the lock
- // will continue to exist under this principal for the duration of
- // its lifetime.
- principal: aPrincipal,
- getObjectStore: function() {
- if (VERBOSE) debug("Getting transaction for " + this.lockID);
- let store;
- // Test for transaction validity via trying to get the
- // datastore. If it doesn't work, assume the transaction is
- // closed, create a new transaction and try again.
- if (this._transaction) {
- try {
- store = this._transaction.objectStore(SETTINGSSTORE_NAME);
- } catch (e) {
- if (e.name == "InvalidStateError") {
- if (VERBOSE) debug("Current transaction for " + this.lockID + " closed, trying to create new one.");
- } else {
- if (DEBUG) debug("Unexpected exception, throwing: " + e);
- throw e;
- }
- }
- }
- // Create one transaction with a global permission. This may be
- // slightly slower on apps with full settings permissions, but
- // it means we don't have to do our own transaction order
- // bookkeeping.
- let canReadOnly = allowForceReadOnly && this.forceReadOnly;
- if (canReadOnly || !SettingsPermissions.hasSomeWritePermission(this.principal)) {
- if (VERBOSE) debug("Making READONLY transaction for " + this.lockID);
- this._transaction = aDB._db.transaction(SETTINGSSTORE_NAME, "readonly");
- } else {
- if (VERBOSE) debug("Making READWRITE transaction for " + this.lockID);
- this._transaction = aDB._db.transaction(SETTINGSSTORE_NAME, "readwrite");
- }
- this._transaction.oncomplete = function() {
- if (VERBOSE) debug("Transaction for lock " + this.lockID + " closed");
- }.bind(this);
- this._transaction.onabort = function () {
- if (DEBUG) debug("Transaction for lock " + this.lockID + " aborted");
- this._failed = true;
- }.bind(this);
- try {
- store = this._transaction.objectStore(SETTINGSSTORE_NAME);
- } catch (e) {
- if (e.name == "InvalidStateError") {
- if (DEBUG) debug("Cannot create objectstore on transaction for " + this.lockID);
- return null;
- } else {
- if (DEBUG) debug("Unexpected exception, throwing: " + e);
- throw e;
- }
- }
- return store;
- }
- };
-}
-
-var SettingsRequestManager = {
- // Access to the settings DB
- settingsDB: new SettingsDB(),
- // Remote messages to listen for from child
- messages: ["child-process-shutdown", "Settings:Get", "Settings:Set",
- "Settings:Clear", "Settings:Run", "Settings:Finalize",
- "Settings:CreateLock", "Settings:RegisterForMessages"],
- // Map of LockID to SettingsLockInfo objects
- lockInfo: {},
- // Storing soft lockup detection infos
- softLockup: {
- lockId: null, // last lock dealt with
- lockTs: null // last time of dealing with
- },
- // Queue of LockIDs. The LockID on the front of the queue is the only lock
- // that will have requests processed, all other locks will queue requests
- // until they hit the front of the queue.
- settingsLockQueue: [],
- children: [],
- // Since we need to call observers at times when we may not have
- // just received a message from a child process, we cache principals
- // for message managers and check permissions on them before we send
- // settings notifications to child processes.
- observerPrincipalCache: new Map(),
- totalProcessed: 0,
- tasksConsumed: {},
- totalSetProcessed: 0,
- tasksSetConsumed: {},
- totalGetProcessed: 0,
- tasksGetConsumed: {},
-
- init: function() {
- if (VERBOSE) debug("init");
- this.settingsDB.init();
- this.messages.forEach((function(msgName) {
- ppmm.addMessageListener(msgName, this);
- }).bind(this));
- Services.obs.addObserver(this, kXpcomShutdownObserverTopic, false);
- Services.obs.addObserver(this, kInnerWindowDestroyed, false);
- mrm.registerStrongReporter(this);
- },
-
- _serializePreservingBinaries: function _serializePreservingBinaries(aObject) {
- function needsUUID(aValue) {
- if (!aValue || !aValue.constructor) {
- return false;
- }
- return (aValue.constructor.name == "Date") || (aValue instanceof File) ||
- (aValue instanceof Ci.nsIDOMBlob);
- }
- // We need to serialize settings objects, otherwise they can change between
- // the set() call and the enqueued request being processed. We can't simply
- // parse(stringify(obj)) because that breaks things like Blobs, Files and
- // Dates, so we use stringify's replacer and parse's reviver parameters to
- // preserve binaries.
- let binaries = Object.create(null);
- let stringified = JSON.stringify(aObject, function(key, value) {
- value = this.settingsDB.prepareValue(value);
- if (needsUUID(value)) {
- let uuid = uuidgen.generateUUID().toString();
- binaries[uuid] = value;
- return uuid;
- }
- return value;
- }.bind(this));
- return JSON.parse(stringified, function(key, value) {
- if (value in binaries) {
- return binaries[value];
- }
- return value;
- });
- },
-
- queueTask: function(aOperation, aData) {
- if (VERBOSE) debug("Queueing task: " + aOperation);
-
- let defer = {};
-
- let lock = this.lockInfo[aData.lockID];
-
- if (!lock) {
- return Promise.reject({error: "Lock already dead, cannot queue task"});
- }
-
- if (aOperation == "set") {
- aData.settings = this._serializePreservingBinaries(aData.settings);
- }
-
- if (aOperation === "set" || aOperation === "clear") {
- lock.forceReadOnly = false;
- }
-
- lock.tasks.push({
- operation: aOperation,
- data: aData,
- defer: defer
- });
-
- let promise = new Promise(function(resolve, reject) {
- defer.resolve = resolve;
- defer.reject = reject;
- });
-
- return promise;
- },
-
- // Due to the fact that we're skipping the database in some places
- // by keeping a local "set" value cache, resolving some calls
- // without a call to the database would mean we could potentially
- // receive promise responses out of expected order if a get is
- // called before a set. Therefore, we wrap our resolve in a null
- // get, which means it will resolves afer the rest of the calls
- // queued to the DB.
- queueTaskReturn: function(aTask, aReturnValue) {
- if (VERBOSE) debug("Making task queuing transaction request.");
- let data = aTask.data;
- let lock = this.lockInfo[data.lockID];
- let store = lock.getObjectStore(lock.principal);
- if (!store) {
- if (DEBUG) debug("Rejecting task queue on lock " + aTask.data.lockID);
- return Promise.reject({task: aTask, error: "Cannot get object store"});
- }
- // Due to the fact that we're skipping the database, resolving
- // this without a call to the database would mean we could
- // potentially receive promise responses out of expected order if
- // a get is called before a set. Therefore, we wrap our resolve in
- // a null get, which means it will resolves afer the rest of the
- // calls queued to the DB.
- let getReq = store.get(0);
-
- let defer = {};
- let promiseWrapper = new Promise(function(resolve, reject) {
- defer.resolve = resolve;
- defer.reject = reject;
- });
-
- getReq.onsuccess = function(event) {
- return defer.resolve(aReturnValue);
- };
- getReq.onerror = function() {
- return defer.reject({task: aTask, error: getReq.error.name});
- };
- return promiseWrapper;
- },
-
- taskGet: function(aTask) {
- if (VERBOSE) debug("Running Get task on lock " + aTask.data.lockID);
-
- // Check that we have permissions for getting the value
- let data = aTask.data;
- let lock = this.lockInfo[data.lockID];
-
- if (!lock) {
- return Promise.reject({task: aTask, error: "Lock died, can't finalize"});
- }
- if (lock._failed) {
- if (DEBUG) debug("Lock failed. All subsequent requests will fail.");
- return Promise.reject({task: aTask, error: "Lock failed, all requests now failing."});
- }
-
- if (lock.hasCleared) {
- if (DEBUG) debug("Lock was used for a clear command. All subsequent requests will fail.");
- return Promise.reject({task: aTask, error: "Lock was used for a clear command. All subsequent requests will fail."});
- }
-
- lock.canClear = false;
-
- if (!SettingsPermissions.hasReadPermission(lock.principal, data.name)) {
- if (DEBUG) debug("get not allowed for " + data.name);
- lock._failed = true;
- return Promise.reject({task: aTask, error: "No permission to get " + data.name});
- }
-
- // If the value was set during this transaction, use the cached value
- if (data.name in lock.queuedSets) {
- if (VERBOSE) debug("Returning cached set value " + lock.queuedSets[data.name] + " for " + data.name);
- let local_results = {};
- local_results[data.name] = lock.queuedSets[data.name];
- return this.queueTaskReturn(aTask, {task: aTask, results: local_results});
- }
-
- // Create/Get transaction and make request
- if (VERBOSE) debug("Making get transaction request for " + data.name);
- let store = lock.getObjectStore(lock.principal);
- if (!store) {
- if (DEBUG) debug("Rejecting Get task on lock " + aTask.data.lockID);
- return Promise.reject({task: aTask, error: "Cannot get object store"});
- }
-
- if (VERBOSE) debug("Making get request for " + data.name);
- let getReq = (data.name === "*") ? store.mozGetAll() : store.mozGetAll(data.name);
-
- let defer = {};
- let promiseWrapper = new Promise(function(resolve, reject) {
- defer.resolve = resolve;
- defer.reject = reject;
- });
-
- getReq.onsuccess = function(event) {
- if (VERBOSE) debug("Request for '" + data.name + "' successful. " +
- "Record count: " + event.target.result.length);
-
- if (event.target.result.length == 0) {
- if (VERBOSE) debug("MOZSETTINGS-GET-WARNING: " + data.name + " is not in the database.\n");
- }
-
- let results = {};
-
- for (let i in event.target.result) {
- let result = event.target.result[i];
- let name = result.settingName;
- if (VERBOSE) debug(name + ": " + result.userValue +", " + result.defaultValue);
- let value = result.userValue !== undefined ? result.userValue : result.defaultValue;
- results[name] = value;
- }
- return defer.resolve({task: aTask, results: results});
- };
- getReq.onerror = function() {
- return defer.reject({task: aTask, error: getReq.error.name});
- };
- return promiseWrapper;
- },
-
- taskSet: function(aTask) {
- let data = aTask.data;
- let lock = this.lockInfo[data.lockID];
- let keys = Object.getOwnPropertyNames(data.settings);
-
- if (!lock) {
- return Promise.reject({task: aTask, error: "Lock died, can't finalize"});
- }
- if (lock._failed) {
- if (DEBUG) debug("Lock failed. All subsequent requests will fail.");
- return Promise.reject({task: aTask, error: "Lock failed a permissions check, all requests now failing."});
- }
-
- if (lock.hasCleared) {
- if (DEBUG) debug("Lock was used for a clear command. All subsequent requests will fail.");
- return Promise.reject({task: aTask, error: "Lock was used for a clear command. All other requests will fail."});
- }
-
- lock.canClear = false;
-
- // If we have no keys, resolve
- if (keys.length === 0) {
- if (DEBUG) debug("No keys to change entered!");
- return Promise.resolve({task: aTask});
- }
-
- for (let i = 0; i < keys.length; i++) {
- if (!SettingsPermissions.hasWritePermission(lock.principal, keys[i])) {
- if (DEBUG) debug("set not allowed on " + keys[i]);
- lock._failed = true;
- return Promise.reject({task: aTask, error: "No permission to set " + keys[i]});
- }
- }
-
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i];
- if (VERBOSE) debug("key: " + key + ", val: " + JSON.stringify(data.settings[key]) + ", type: " + typeof(data.settings[key]));
- lock.queuedSets[key] = data.settings[key];
- }
-
- return this.queueTaskReturn(aTask, {task: aTask});
- },
-
- startRunning: function(aLockID) {
- let lock = this.lockInfo[aLockID];
-
- if (!lock) {
- if (DEBUG) debug("Lock no longer alive, cannot start running");
- return;
- }
-
- lock.consumable = true;
- if (aLockID == this.settingsLockQueue[0] || this.settingsLockQueue.length == 0) {
- // If a lock is currently at the head of the queue, run all tasks for
- // it.
- if (VERBOSE) debug("Start running tasks for " + aLockID);
- this.queueConsume();
- } else {
- // If a lock isn't at the head of the queue, but requests to be run,
- // simply mark it as consumable, which means it will automatically run
- // once it comes to the head of the queue.
- if (VERBOSE) debug("Queuing tasks for " + aLockID + " while waiting for " + this.settingsLockQueue[0]);
- }
- },
-
- queueConsume: function() {
- if (this.settingsLockQueue.length > 0 && this.lockInfo[this.settingsLockQueue[0]].consumable) {
- Services.tm.currentThread.dispatch(SettingsRequestManager.consumeTasks.bind(this), Ci.nsIThread.DISPATCH_NORMAL);
- }
- },
-
- finalizeSets: function(aTask) {
- let data = aTask.data;
- if (VERBOSE) debug("Finalizing tasks for lock " + data.lockID);
- let lock = this.lockInfo[data.lockID];
-
- if (!lock) {
- return Promise.reject({task: aTask, error: "Lock died, can't finalize"});
- }
- lock.finalizing = true;
- if (lock._failed) {
- this.removeLock(data.lockID);
- return Promise.reject({task: aTask, error: "Lock failed a permissions check, all requests now failing."});
- }
- // If we have cleared, there is no reason to continue finalizing
- // this lock. Just resolve promise with task and move on.
- if (lock.hasCleared) {
- if (VERBOSE) debug("Clear was called on lock, skipping finalize");
- this.removeLock(data.lockID);
- return Promise.resolve({task: aTask});
- }
- let keys = Object.getOwnPropertyNames(lock.queuedSets);
- if (keys.length === 0) {
- if (VERBOSE) debug("Nothing to finalize. Exiting.");
- this.removeLock(data.lockID);
- return Promise.resolve({task: aTask});
- }
-
- let store = lock.getObjectStore(lock.principal);
- if (!store) {
- if (DEBUG) debug("Rejecting Set task on lock " + aTask.data.lockID);
- this.removeLock(data.lockID);
- return Promise.reject({task: aTask, error: "Cannot get object store"});
- }
-
- // Due to the fact there may have multiple set operations to clear, and
- // they're all async, callbacks are gathered into promises, and the promises
- // are processed with Promises.all().
- let checkPromises = [];
- let finalValues = {};
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i];
- if (VERBOSE) debug("key: " + key + ", val: " + lock.queuedSets[key] + ", type: " + typeof(lock.queuedSets[key]));
- let checkDefer = {};
- let checkPromise = new Promise(function(resolve, reject) {
- checkDefer.resolve = resolve;
- checkDefer.reject = reject;
- });
-
- // Get operation is used to fill in the default value, assuming there is
- // one. For the moment, if a value doesn't exist in the settings DB, we
- // allow the user to add it, and just pass back a null default value.
- let checkKeyRequest = store.get(key);
- checkKeyRequest.onsuccess = function (event) {
- let userValue = lock.queuedSets[key];
- let defaultValue;
- if (!event.target.result) {
- defaultValue = null;
- if (VERBOSE) debug("MOZSETTINGS-GET-WARNING: " + key + " is not in the database.\n");
- } else {
- defaultValue = event.target.result.defaultValue;
- }
- let obj = {settingName: key, defaultValue: defaultValue, userValue: userValue};
- finalValues[key] = {defaultValue: defaultValue, userValue: userValue};
- let setReq = store.put(obj);
- setReq.onsuccess = function() {
- if (VERBOSE) debug("Set successful!");
- if (VERBOSE) debug("key: " + key + ", val: " + finalValues[key] + ", type: " + typeof(finalValues[key]));
- return checkDefer.resolve({task: aTask});
- };
- setReq.onerror = function() {
- return checkDefer.reject({task: aTask, error: setReq.error.name});
- };
- }.bind(this);
- checkKeyRequest.onerror = function(event) {
- return checkDefer.reject({task: aTask, error: checkKeyRequest.error.name});
- };
- checkPromises.push(checkPromise);
- }
-
- let defer = {};
- let promiseWrapper = new Promise(function(resolve, reject) {
- defer.resolve = resolve;
- defer.reject = reject;
- });
-
- // Once all transactions are done, or any have failed, remove the lock and
- // start processing the tasks from the next lock in the queue.
- Promise.all(checkPromises).then(function() {
- // If all commits were successful, notify observers
- for (let i = 0; i < keys.length; i++) {
- this.sendSettingsChange(keys[i], finalValues[keys[i]].userValue, lock.isServiceLock);
- }
- this.removeLock(data.lockID);
- defer.resolve({task: aTask});
- }.bind(this), function(ret) {
- this.removeLock(data.lockID);
- defer.reject({task: aTask, error: "Set transaction failure"});
- }.bind(this));
- return promiseWrapper;
- },
-
- // Clear is only expected to be called via tests, and if a lock
- // calls clear, it should be the only thing the lock does. This
- // allows us to not have to deal with the possibility of query
- // integrity checking. Clear should never be called in the wild,
- // even by certified apps, which is why it has its own permission
- // (settings-clear).
- taskClear: function(aTask) {
- if (VERBOSE) debug("Clearing");
- let data = aTask.data;
- let lock = this.lockInfo[data.lockID];
-
- if (lock._failed) {
- if (DEBUG) debug("Lock failed, all requests now failing.");
- return Promise.reject({task: aTask, error: "Lock failed, all requests now failing."});
- }
-
- if (!lock.canClear) {
- if (DEBUG) debug("Lock tried to clear after queuing other tasks. Failing.");
- lock._failed = true;
- return Promise.reject({task: aTask, error: "Cannot call clear after queuing other tasks, all requests now failing."});
- }
-
- if (!SettingsPermissions.hasClearPermission(lock.principal)) {
- if (DEBUG) debug("clear not allowed");
- lock._failed = true;
- return Promise.reject({task: aTask, error: "No permission to clear DB"});
- }
-
- lock.hasCleared = true;
-
- let store = lock.getObjectStore(lock.principal);
- if (!store) {
- if (DEBUG) debug("Rejecting Clear task on lock " + aTask.data.lockID);
- return Promise.reject({task: aTask, error: "Cannot get object store"});
- }
- let defer = {};
- let promiseWrapper = new Promise(function(resolve, reject) {
- defer.resolve = resolve;
- defer.reject = reject;
- });
-
- let clearReq = store.clear();
- clearReq.onsuccess = function() {
- return defer.resolve({task: aTask});
- };
- clearReq.onerror = function() {
- return defer.reject({task: aTask});
- };
- return promiseWrapper;
- },
-
- ensureConnection : function() {
- if (VERBOSE) debug("Ensuring Connection");
- let defer = {};
- let promiseWrapper = new Promise(function(resolve, reject) {
- defer.resolve = resolve;
- defer.reject = reject;
- });
- this.settingsDB.ensureDB(
- function() { defer.resolve(); },
- function(error) {
- if (DEBUG) debug("Cannot open Settings DB. Trying to open an old version?\n");
- defer.reject(error);
- }
- );
- return promiseWrapper;
- },
-
- runTasks: function(aLockID) {
- if (VERBOSE) debug("Running tasks for " + aLockID);
- let lock = this.lockInfo[aLockID];
- if (!lock) {
- if (DEBUG) debug("Lock no longer alive, cannot run tasks");
- return;
- }
- let currentTask = lock.tasks.shift();
- let promises = [];
- if (TRACK) {
- if (this.tasksConsumed[aLockID] === undefined) {
- this.tasksConsumed[aLockID] = 0;
- this.tasksGetConsumed[aLockID] = 0;
- this.tasksSetConsumed[aLockID] = 0;
- }
- }
- while (currentTask) {
- if (VERBOSE) debug("Running Operation " + currentTask.operation);
- if (lock.finalizing) {
- // We should really never get to this point, but if we do,
- // fail every task that happens.
- Cu.reportError("Settings lock trying to run more tasks after finalizing. Ignoring tasks, but this is bad. Lock: " + aLockID);
- currentTask.defer.reject("Cannot call new task after finalizing");
- } else {
- let p;
- this.totalProcessed++;
- if (TRACK) {
- this.tasksConsumed[aLockID]++;
- }
- switch (currentTask.operation) {
- case "get":
- this.totalGetProcessed++;
- if (TRACK) {
- this.tasksGetConsumed[aLockID]++;
- }
- p = this.taskGet(currentTask);
- break;
- case "set":
- this.totalSetProcessed++;
- if (TRACK) {
- this.tasksSetConsumed[aLockID]++;
- }
- p = this.taskSet(currentTask);
- break;
- case "clear":
- p = this.taskClear(currentTask);
- break;
- case "finalize":
- p = this.finalizeSets(currentTask);
- break;
- default:
- if (DEBUG) debug("Invalid operation: " + currentTask.operation);
- p.reject("Invalid operation: " + currentTask.operation);
- }
- p.then(function(ret) {
- ret.task.defer.resolve("results" in ret ? ret.results : null);
- }.bind(currentTask), function(ret) {
- ret.task.defer.reject(ret.error);
- });
- promises.push(p);
- }
- currentTask = lock.tasks.shift();
- }
- },
-
- consumeTasks: function() {
- if (this.settingsLockQueue.length == 0) {
- if (VERBOSE) debug("Nothing to run!");
- return;
- }
-
- let lockID = this.settingsLockQueue[0];
- if (VERBOSE) debug("Consuming tasks for " + lockID);
- let lock = this.lockInfo[lockID];
-
- // If a process dies, we should clean up after it via the
- // child-process-shutdown event. But just in case we don't, we want to make
- // sure we never block on consuming.
- if (!lock) {
- if (DEBUG) debug("Lock no longer alive, cannot consume tasks");
- this.queueConsume();
- return;
- }
-
- if (!lock.consumable || lock.tasks.length === 0) {
- if (VERBOSE) debug("No more tasks to run or not yet consuamble.");
- return;
- }
-
- lock.consumable = false;
- this.ensureConnection().then(
- function(task) {
- this.runTasks(lockID);
- this.updateSoftLockup(lockID);
- }.bind(this), function(ret) {
- dump("-*- SettingsRequestManager: SETTINGS DATABASE ERROR: Cannot make DB connection!\n");
- });
- },
-
- observe: function(aSubject, aTopic, aData) {
- if (VERBOSE) debug("observe: " + aTopic);
- switch (aTopic) {
- case kXpcomShutdownObserverTopic:
- this.messages.forEach((function(msgName) {
- ppmm.removeMessageListener(msgName, this);
- }).bind(this));
- Services.obs.removeObserver(this, kXpcomShutdownObserverTopic);
- ppmm = null;
- mrm.unregisterStrongReporter(this);
- break;
-
- case kInnerWindowDestroyed:
- let wId = aSubject.QueryInterface(Ci.nsISupportsPRUint64).data;
- this.forceFinalizeChildLocksNonOOP(wId);
- break;
-
- default:
- if (DEBUG) debug("Wrong observer topic: " + aTopic);
- break;
- }
- },
-
- collectReports: function(aCallback, aData, aAnonymize) {
- for (let lockId of Object.keys(this.lockInfo)) {
- let lock = this.lockInfo[lockId];
- let length = lock.tasks.length;
-
- if (length === 0) {
- continue;
- }
-
- let path = "settings-locks/tasks/lock(id=" + lockId + ")/";
-
- aCallback.callback("", path + "alive",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- length,
- "Alive tasks for this lock",
- aData);
- }
-
- aCallback.callback("",
- "settings-locks/tasks-total/processed",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this.totalProcessed,
- "The total number of tasks that were executed.",
- aData);
-
- aCallback.callback("",
- "settings-locks/tasks-total/set",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this.totalSetProcessed,
- "The total number of set tasks that were executed.",
- aData);
-
- aCallback.callback("",
- "settings-locks/tasks-total/get",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this.totalGetProcessed,
- "The total number of get tasks that were executed.",
- aData);
-
- // if TRACK is not enabled, then, no details are available
- if (!TRACK) {
- return;
- }
-
- for (let lockId of Object.keys(this.tasksConsumed)) {
- let lock = this.lockInfo[lockId];
- let length = 0;
- if (lock) {
- length = lock.tasks.length;
- }
-
- let path = "settings-locks/tasks/lock(id=" + lockId + ")/";
-
- aCallback.callback("", path + "set",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this.tasksSetConsumed[lockId],
- "Set tasks for this lock.",
- aData);
-
- aCallback.callback("", path + "get",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this.tasksGetConsumed[lockId],
- "Get tasks for this lock.",
- aData);
-
- aCallback.callback("", path + "processed",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this.tasksConsumed[lockId],
- "Number of tasks that were executed.",
- aData);
- }
- },
-
- sendSettingsChange: function(aKey, aValue, aIsServiceLock) {
- this.broadcastMessage("Settings:Change:Return:OK",
- { key: aKey, value: aValue });
- var setting = {
- key: aKey,
- value: aValue,
- isInternalChange: aIsServiceLock
- };
- setting.wrappedJSObject = setting;
- Services.obs.notifyObservers(setting, kMozSettingsChangedObserverTopic, "");
- },
-
- broadcastMessage: function broadcastMessage(aMsgName, aContent) {
- if (VERBOSE) debug("Broadcast");
- this.children.forEach(function(msgMgr) {
- let principal = this.observerPrincipalCache.get(msgMgr);
- if (!principal) {
- if (DEBUG) debug("Cannot find principal for message manager to check permissions");
- }
- else if (SettingsPermissions.hasReadPermission(principal, aContent.key)) {
- try {
- msgMgr.sendAsyncMessage(aMsgName, aContent);
- } catch (e) {
- if (DEBUG) debug("Failed sending message: " + aMsgName);
- }
- }
- }.bind(this));
- if (VERBOSE) debug("Finished Broadcasting");
- },
-
- addObserver: function(aMsgMgr, aPrincipal) {
- if (VERBOSE) debug("Add observer for " + aPrincipal.origin);
- if (this.children.indexOf(aMsgMgr) == -1) {
- this.children.push(aMsgMgr);
- this.observerPrincipalCache.set(aMsgMgr, aPrincipal);
- }
- },
-
- removeObserver: function(aMsgMgr) {
- if (VERBOSE) {
- let principal = this.observerPrincipalCache.get(aMsgMgr);
- if (principal) {
- debug("Remove observer for " + principal.origin);
- }
- }
- let index = this.children.indexOf(aMsgMgr);
- if (index != -1) {
- this.children.splice(index, 1);
- this.observerPrincipalCache.delete(aMsgMgr);
- }
- if (VERBOSE) debug("Principal/MessageManager pairs left in observer cache: " + this.observerPrincipalCache.size);
- },
-
- removeLock: function(aLockID) {
- if (VERBOSE) debug("Removing lock " + aLockID);
- if (this.lockInfo[aLockID]) {
- let transaction = this.lockInfo[aLockID]._transaction;
- if (transaction) {
- try {
- transaction.abort();
- } catch (e) {
- if (e.name == "InvalidStateError") {
- if (VERBOSE) debug("Transaction for " + aLockID + " closed already");
- } else {
- if (DEBUG) debug("Unexpected exception, throwing: " + e);
- throw e;
- }
- }
- }
- delete this.lockInfo[aLockID];
- }
- let index = this.settingsLockQueue.indexOf(aLockID);
- if (index > -1) {
- this.settingsLockQueue.splice(index, 1);
- }
- // If index is 0, the lock we just removed was at the head of
- // the queue, so possibly queue the next lock if it's
- // consumable.
- if (index == 0) {
- this.queueConsume();
- }
- },
-
- hasLockFinalizeTask: function(lock) {
- // Go in reverse order because finalize should be the last one
- for (let task_index = lock.tasks.length; task_index >= 0; task_index--) {
- if (lock.tasks[task_index]
- && lock.tasks[task_index].operation === "finalize") {
- return true;
- }
- }
- return false;
- },
-
- enqueueForceFinalize: function(lock) {
- if (!this.hasLockFinalizeTask(lock)) {
- if (VERBOSE) debug("Alive lock has pending tasks: " + lock.lockID);
- this.queueTask("finalize", {lockID: lock.lockID}).then(
- function() {
- if (VERBOSE) debug("Alive lock " + lock.lockID + " succeeded to force-finalize");
- },
- function(error) {
- if (DEBUG) debug("Alive lock " + lock.lockID + " failed to force-finalize due to error: " + error);
- }
- );
- // Finalize is considered a task running situation, but it also needs to
- // queue a task.
- this.startRunning(lock.lockID);
- }
- },
-
- forceFinalizeChildLocksNonOOP: function(windowId) {
- if (VERBOSE) debug("Forcing finalize on child locks, non OOP");
-
- for (let lockId of Object.keys(this.lockInfo)) {
- let lock = this.lockInfo[lockId];
- if (lock.windowID === windowId) {
- this.enqueueForceFinalize(lock);
- }
- }
- },
-
- forceFinalizeChildLocksOOP: function(aMsgMgr) {
- if (VERBOSE) debug("Forcing finalize on child locks, OOP");
-
- for (let lockId of Object.keys(this.lockInfo)) {
- let lock = this.lockInfo[lockId];
- if (lock._mm === aMsgMgr) {
- this.enqueueForceFinalize(lock);
- }
- }
- },
-
- updateSoftLockup: function(aLockId) {
- if (VERBOSE) debug("Treating lock " + aLockId + ", so updating soft lockup infos ...");
-
- this.softLockup = {
- lockId: aLockId,
- lockTs: new Date()
- };
- },
-
- checkSoftLockup: function() {
- if (VERBOSE) debug("Checking for soft lockup ...");
-
- if (this.settingsLockQueue.length === 0) {
- if (VERBOSE) debug("Empty settings lock queue, no soft lockup ...");
- return;
- }
-
- let head = this.settingsLockQueue[0];
- if (head !== this.softLockup.lockId) {
- if (VERBOSE) debug("Non matching head of settings lock queue, no soft lockup ...");
- return;
- }
-
- let delta = (new Date() - this.softLockup.lockTs) / 1000;
- if (delta < kSoftLockupDelta) {
- if (VERBOSE) debug("Matching head of settings lock queue, but delta (" + delta + ") < 30 secs, no soft lockup ...");
- return;
- }
-
- let msgBlocked = "Settings queue head blocked at " + head +
- " for " + delta + " secs, Settings API may be soft lockup. Lock from: " +
- this.lockInfo[head].lockStack;
- Cu.reportError(msgBlocked);
- if (DEBUG) debug(msgBlocked);
- },
-
- receiveMessage: function(aMessage) {
- if (VERBOSE) debug("receiveMessage " + aMessage.name + ": " + JSON.stringify(aMessage.data));
-
- let msg = aMessage.data;
- let mm = aMessage.target;
-
- function returnMessage(name, data) {
- if (mm) {
- try {
- mm.sendAsyncMessage(name, data);
- } catch (e) {
- if (DEBUG) debug("Return message failed, " + name + ": " + e);
- }
- } else {
- try {
- gSettingsService.receiveMessage({ name: name, data: data });
- } catch (e) {
- if (DEBUG) debug("Direct return message failed, " + name + ": " + e);
- }
- }
- }
-
- // For all message types that expect a lockID, we check to make
- // sure that we're accessing a lock that's part of our process. If
- // not, consider it a security violation and kill the app. Killing
- // based on creating a colliding lock ID happens as part of
- // CreateLock check below.
- switch (aMessage.name) {
- case "Settings:Get":
- case "Settings:Set":
- case "Settings:Clear":
- case "Settings:Run":
- case "Settings:Finalize":
- this.checkSoftLockup();
- if (!msg.lockID) {
- Cu.reportError("Process sending request for lock that does not exist. Killing.");
- }
- else if (!this.lockInfo[msg.lockID]) {
- if (DEBUG) debug("Cannot find lock ID " + msg.lockID);
- // This doesn't kill, because we can have things that file
- // finalize, then die, and we may get the observer
- // notification before we get the IPC messages.
- return;
- }
- else if (mm != this.lockInfo[msg.lockID]._mm) {
- Cu.reportError("Process trying to access settings lock from another process. Killing.");
- }
- default:
- break;
- }
-
- switch (aMessage.name) {
- case "child-process-shutdown":
- if (VERBOSE) debug("Child process shutdown received.");
- this.forceFinalizeChildLocksOOP(mm);
- this.removeObserver(mm);
- break;
- case "Settings:RegisterForMessages":
- if (!SettingsPermissions.hasSomeReadPermission(aMessage.principal)) {
- Cu.reportError("Settings message " + aMessage.name +
- " from a content process with no 'settings-api-read' privileges.");
- return;
- }
- this.addObserver(mm, aMessage.principal);
- break;
- case "Settings:UnregisterForMessages":
- this.removeObserver(mm);
- break;
- case "Settings:CreateLock":
- if (VERBOSE) debug("Received CreateLock for " + msg.lockID + " from " + aMessage.principal.origin + " window: " + msg.windowID);
- // If we try to create a lock ID that collides with one
- // already in the system, consider it a security violation and
- // kill.
- if (msg.lockID in this.settingsLockQueue) {
- Cu.reportError("Trying to queue a lock with the same ID as an already queued lock. Killing app.");
- return;
- }
-
- if (this.softLockup.lockId === null) {
- this.updateSoftLockup(msg.lockID);
- }
-
- this.settingsLockQueue.push(msg.lockID);
- this.lockInfo[msg.lockID] = SettingsLockInfo(this.settingsDB,
- mm,
- aMessage.principal,
- msg.lockID,
- msg.isServiceLock,
- msg.windowID,
- msg.lockStack);
- break;
- case "Settings:Get":
- if (VERBOSE) debug("Received getRequest from " + msg.lockID);
- this.queueTask("get", msg).then(function(settings) {
- returnMessage("Settings:Get:OK", {
- lockID: msg.lockID,
- requestID: msg.requestID,
- settings: settings
- });
- }, function(error) {
- if (DEBUG) debug("getRequest FAILED " + msg.name);
- returnMessage("Settings:Get:KO", {
- lockID: msg.lockID,
- requestID: msg.requestID,
- errorMsg: error
- });
- });
- break;
- case "Settings:Set":
- if (VERBOSE) debug("Received Set Request from " + msg.lockID);
- this.queueTask("set", msg).then(function(settings) {
- returnMessage("Settings:Set:OK", {
- lockID: msg.lockID,
- requestID: msg.requestID
- });
- }, function(error) {
- returnMessage("Settings:Set:KO", {
- lockID: msg.lockID,
- requestID: msg.requestID,
- errorMsg: error
- });
- });
- break;
- case "Settings:Clear":
- if (VERBOSE) debug("Received Clear Request from " + msg.lockID);
- this.queueTask("clear", msg).then(function() {
- returnMessage("Settings:Clear:OK", {
- lockID: msg.lockID,
- requestID: msg.requestID
- });
- }, function(error) {
- returnMessage("Settings:Clear:KO", {
- lockID: msg.lockID,
- requestID: msg.requestID,
- errorMsg: error
- });
- });
- break;
- case "Settings:Finalize":
- if (VERBOSE) debug("Received Finalize");
- this.queueTask("finalize", msg).then(function() {
- returnMessage("Settings:Finalize:OK", {
- lockID: msg.lockID
- });
- }, function(error) {
- returnMessage("Settings:Finalize:KO", {
- lockID: msg.lockID,
- errorMsg: error
- });
- });
- // YES THIS IS SUPPOSED TO FALL THROUGH. Finalize is considered a task
- // running situation, but it also needs to queue a task.
- case "Settings:Run":
- if (VERBOSE) debug("Received Run");
- this.startRunning(msg.lockID);
- break;
- default:
- if (DEBUG) debug("Wrong message: " + aMessage.name);
- }
- }
-};
-
-// This code should ALWAYS be living only on the parent side.
-if (!inParent) {
- debug("SettingsRequestManager should be living on parent side.");
- throw Cr.NS_ERROR_ABORT;
-} else {
- this.SettingsRequestManager = SettingsRequestManager;
- SettingsRequestManager.init();
-}
deleted file mode 100644
--- a/dom/settings/SettingsService.js
+++ /dev/null
@@ -1,358 +0,0 @@
-/* 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/. */
-
-"use strict";
-
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import('resource://gre/modules/SettingsRequestManager.jsm');
-
-/* static functions */
-var DEBUG = false;
-var VERBOSE = false;
-
-try {
- DEBUG =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsService.debug.enabled");
- VERBOSE =
- Services.prefs.getBoolPref("dom.mozSettings.SettingsService.verbose.enabled");
-} catch (ex) { }
-
-function debug(s) {
- dump("-*- SettingsService: " + s + "\n");
-}
-
-XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
- "@mozilla.org/uuid-generator;1",
- "nsIUUIDGenerator");
-XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
- "@mozilla.org/childprocessmessagemanager;1",
- "nsIMessageSender");
-XPCOMUtils.defineLazyServiceGetter(this, "mrm",
- "@mozilla.org/memory-reporter-manager;1",
- "nsIMemoryReporterManager");
-
-const nsIClassInfo = Ci.nsIClassInfo;
-const kXpcomShutdownObserverTopic = "xpcom-shutdown";
-
-const SETTINGSSERVICELOCK_CONTRACTID = "@mozilla.org/settingsServiceLock;1";
-const SETTINGSSERVICELOCK_CID = Components.ID("{d7a395a0-e292-11e1-834e-1761d57f5f99}");
-const nsISettingsServiceLock = Ci.nsISettingsServiceLock;
-
-function makeSettingsServiceRequest(aCallback, aName, aValue) {
- return {
- callback: aCallback,
- name: aName,
- value: aValue
- };
-};
-
-const kLockListeners = ["Settings:Get:OK", "Settings:Get:KO",
- "Settings:Clear:OK", "Settings:Clear:KO",
- "Settings:Set:OK", "Settings:Set:KO",
- "Settings:Finalize:OK", "Settings:Finalize:KO"];
-
-function SettingsServiceLock(aSettingsService, aTransactionCallback) {
- if (VERBOSE) debug("settingsServiceLock constr!");
- this._open = true;
- this._settingsService = aSettingsService;
- this._id = uuidgen.generateUUID().toString();
- this._transactionCallback = aTransactionCallback;
- this._requests = {};
- let closeHelper = function() {
- if (VERBOSE) debug("closing lock " + this._id);
- this._open = false;
- this.runOrFinalizeQueries();
- }.bind(this);
-
- this.addListeners();
-
- let createLockPayload = {
- lockID: this._id,
- isServiceLock: true,
- windowID: undefined,
- lockStack: (new Error).stack
- };
-
- this.returnMessage("Settings:CreateLock", createLockPayload);
- Services.tm.currentThread.dispatch(closeHelper, Ci.nsIThread.DISPATCH_NORMAL);
-}
-
-SettingsServiceLock.prototype = {
- get closed() {
- return !this._open;
- },
-
- addListeners: function() {
- for (let msg of kLockListeners) {
- cpmm.addMessageListener(msg, this);
- }
- },
-
- removeListeners: function() {
- for (let msg of kLockListeners) {
- cpmm.removeMessageListener(msg, this);
- }
- },
-
- returnMessage: function(aMessage, aData) {
- SettingsRequestManager.receiveMessage({
- name: aMessage,
- data: aData,
- target: undefined,
- principal: Services.scriptSecurityManager.getSystemPrincipal()
- });
- },
-
- runOrFinalizeQueries: function() {
- if (!this._requests || Object.keys(this._requests).length == 0) {
- this.returnMessage("Settings:Finalize", {lockID: this._id});
- } else {
- this.returnMessage("Settings:Run", {lockID: this._id});
- }
- },
-
- receiveMessage: function(aMessage) {
-
- let msg = aMessage.data;
- // SettingsRequestManager broadcasts changes to all locks in the child. If
- // our lock isn't being addressed, just return.
- if(msg.lockID != this._id) {
- return;
- }
- if (VERBOSE) debug("receiveMessage (" + this._id + "): " + aMessage.name);
- // Finalizing a transaction does not return a request ID since we are
- // supposed to fire callbacks.
- if (!msg.requestID) {
- switch (aMessage.name) {
- case "Settings:Finalize:OK":
- if (VERBOSE) debug("Lock finalize ok!");
- this.callTransactionHandle();
- break;
- case "Settings:Finalize:KO":
- if (DEBUG) debug("Lock finalize failed!");
- this.callAbort();
- break;
- default:
- if (DEBUG) debug("Message type " + aMessage.name + " is missing a requestID");
- }
-
- this._settingsService.unregisterLock(this._id);
- return;
- }
-
- let req = this._requests[msg.requestID];
- if (!req) {
- if (DEBUG) debug("Matching request not found.");
- return;
- }
- delete this._requests[msg.requestID];
- switch (aMessage.name) {
- case "Settings:Get:OK":
- this._open = true;
- let settings_names = Object.keys(msg.settings);
- if (settings_names.length > 0) {
- let name = settings_names[0];
- if (DEBUG && settings_names.length > 1) {
- debug("Warning: overloaded setting:" + name);
- }
- let result = msg.settings[name];
- this.callHandle(req.callback, name, result);
- } else {
- this.callHandle(req.callback, req.name, null);
- }
- this._open = false;
- break;
- case "Settings:Set:OK":
- this._open = true;
- // We don't pass values back from sets in SettingsManager...
- this.callHandle(req.callback, req.name, req.value);
- this._open = false;
- break;
- case "Settings:Get:KO":
- case "Settings:Set:KO":
- if (DEBUG) debug("error:" + msg.errorMsg);
- this.callError(req.callback, msg.error);
- break;
- default:
- if (DEBUG) debug("Wrong message: " + aMessage.name);
- }
- this.runOrFinalizeQueries();
- },
-
- get: function get(aName, aCallback) {
- if (VERBOSE) debug("get (" + this._id + "): " + aName);
- if (!this._open) {
- if (DEBUG) debug("Settings lock not open!\n");
- throw Components.results.NS_ERROR_ABORT;
- }
- let reqID = uuidgen.generateUUID().toString();
- this._requests[reqID] = makeSettingsServiceRequest(aCallback, aName);
- this.returnMessage("Settings:Get", {requestID: reqID,
- lockID: this._id,
- name: aName});
- },
-
- set: function set(aName, aValue, aCallback) {
- if (VERBOSE) debug("set: " + aName + " " + aValue);
- if (!this._open) {
- throw "Settings lock not open";
- }
- let reqID = uuidgen.generateUUID().toString();
- this._requests[reqID] = makeSettingsServiceRequest(aCallback, aName, aValue);
- let settings = {};
- settings[aName] = aValue;
- this.returnMessage("Settings:Set", {requestID: reqID,
- lockID: this._id,
- settings: settings});
- },
-
- callHandle: function callHandle(aCallback, aName, aValue) {
- try {
- aCallback && aCallback.handle ? aCallback.handle(aName, aValue) : null;
- } catch (e) {
- if (DEBUG) debug("settings 'handle' for " + aName + " callback threw an exception, dropping: " + e + "\n");
- }
- },
-
- callAbort: function callAbort(aCallback, aMessage) {
- try {
- aCallback && aCallback.handleAbort ? aCallback.handleAbort(aMessage) : null;
- } catch (e) {
- if (DEBUG) debug("settings 'abort' callback threw an exception, dropping: " + e + "\n");
- }
- },
-
- callError: function callError(aCallback, aMessage) {
- try {
- aCallback && aCallback.handleError ? aCallback.handleError(aMessage) : null;
- } catch (e) {
- if (DEBUG) debug("settings 'error' callback threw an exception, dropping: " + e + "\n");
- }
- },
-
- callTransactionHandle: function callTransactionHandle() {
- try {
- this._transactionCallback && this._transactionCallback.handle ? this._transactionCallback.handle() : null;
- } catch (e) {
- if (DEBUG) debug("settings 'Transaction handle' callback threw an exception, dropping: " + e + "\n");
- }
- },
-
- classID : SETTINGSSERVICELOCK_CID,
- QueryInterface : XPCOMUtils.generateQI([nsISettingsServiceLock])
-};
-
-const SETTINGSSERVICE_CID = Components.ID("{f656f0c0-f776-11e1-a21f-0800200c9a66}");
-
-function SettingsService()
-{
- if (VERBOSE) debug("settingsService Constructor");
- this._locks = [];
- this._serviceLocks = {};
- this._createdLocks = 0;
- this._unregisteredLocks = 0;
- this.init();
-}
-
-SettingsService.prototype = {
-
- init: function() {
- Services.obs.addObserver(this, kXpcomShutdownObserverTopic, false);
- mrm.registerStrongReporter(this);
- },
-
- uninit: function() {
- Services.obs.removeObserver(this, kXpcomShutdownObserverTopic);
- mrm.unregisterStrongReporter(this);
- },
-
- observe: function(aSubject, aTopic, aData) {
- if (VERBOSE) debug("observe: " + aTopic);
- if (aTopic === kXpcomShutdownObserverTopic) {
- this.uninit();
- }
- },
-
- receiveMessage: function(aMessage) {
- if (VERBOSE) debug("Entering receiveMessage");
-
- let lockID = aMessage.data.lockID;
- if (!lockID) {
- if (DEBUG) debug("No lock ID");
- return;
- }
-
- if (!(lockID in this._serviceLocks)) {
- if (DEBUG) debug("Received message for lock " + lockID + " but no lock");
- return;
- }
-
- if (VERBOSE) debug("Delivering message");
- this._serviceLocks[lockID].receiveMessage(aMessage);
- },
-
- createLock: function createLock(aCallback) {
- if (VERBOSE) debug("Calling createLock");
- var lock = new SettingsServiceLock(this, aCallback);
- if (VERBOSE) debug("Created lock " + lock._id);
- this.registerLock(lock);
- return lock;
- },
-
- registerLock: function(aLock) {
- if (VERBOSE) debug("Registering lock " + aLock._id);
- this._locks.push(aLock._id);
- this._serviceLocks[aLock._id] = aLock;
- this._createdLocks++;
- },
-
- unregisterLock: function(aLockID) {
- let lock_index = this._locks.indexOf(aLockID);
- if (lock_index != -1) {
- if (VERBOSE) debug("Unregistering lock " + aLockID);
- this._locks.splice(lock_index, 1);
- this._serviceLocks[aLockID].removeListeners();
- this._serviceLocks[aLockID] = null;
- delete this._serviceLocks[aLockID];
- this._unregisteredLocks++;
- }
- },
-
- collectReports: function(aCallback, aData, aAnonymize) {
- aCallback.callback("",
- "settings-service-locks/alive",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this._locks.length,
- "The number of service locks that are currently alives.",
- aData);
-
- aCallback.callback("",
- "settings-service-locks/created",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this._createdLocks,
- "The number of service locks that were created.",
- aData);
-
- aCallback.callback("",
- "settings-service-locks/deleted",
- Ci.nsIMemoryReporter.KIND_OTHER,
- Ci.nsIMemoryReporter.UNITS_COUNT,
- this._unregisteredLocks,
- "The number of service locks that were deleted.",
- aData);
- },
-
- classID : SETTINGSSERVICE_CID,
- QueryInterface : XPCOMUtils.generateQI([Ci.nsISettingsService,
- Ci.nsIObserver,
- Ci.nsIMemoryReporter])
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([SettingsService, SettingsServiceLock]);
deleted file mode 100644
--- a/dom/settings/SettingsService.manifest
+++ /dev/null
@@ -1,5 +0,0 @@
-component {d7a395a0-e292-11e1-834e-1761d57f5f99} SettingsService.js
-contract @mozilla.org/settingsServiceLock;1 {d7a395a0-e292-11e1-834e-1761d57f5f99}
-
-component {f656f0c0-f776-11e1-a21f-0800200c9a66} SettingsService.js
-contract @mozilla.org/settingsService;1 {f656f0c0-f776-11e1-a21f-0800200c9a66}
deleted file mode 100644
--- a/dom/settings/moz.build
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-EXTRA_COMPONENTS += [
- 'SettingsManager.manifest'
-]
-
-EXTRA_PP_COMPONENTS += [
- 'SettingsManager.js'
-]
-
-if CONFIG['MOZ_B2G']:
- EXTRA_COMPONENTS += [
- 'SettingsService.js',
- 'SettingsService.manifest',
- ]
-
-EXTRA_JS_MODULES += [
- 'SettingsDB.jsm',
- 'SettingsRequestManager.jsm'
-]
-
-MOCHITEST_CHROME_MANIFESTS += ['tests/chrome.ini']
-
-XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
deleted file mode 100644
--- a/dom/settings/tests/chrome.ini
+++ /dev/null
@@ -1,24 +0,0 @@
-[DEFAULT]
-skip-if = toolkit == 'android' # Bug 1287455: takes too long to complete on Android
-support-files =
- file_loadserver.js
- file_bug1110872.js
- file_bug1110872.html
- test_settings_service.js
- test_settings_service_callback.js
-
-[test_settings_service.xul]
-run-if = buildapp == 'b2g' || buildapp == 'mulet'
-[test_settings_service_callback.xul]
-run-if = buildapp == 'b2g' || buildapp == 'mulet'
-[test_settings_basics.html]
-[test_settings_permissions.html]
-[test_settings_blobs.html]
-[test_settings_data_uris.html]
-[test_settings_events.html]
-[test_settings_navigator_object.html]
-[test_settings_onsettingchange.html]
-[test_settings_bug1110872.html]
-skip-if = !e10s
-[test_settings_observer_killer.html]
-skip-if = !debug
deleted file mode 100644
--- a/dom/settings/tests/file_bug1110872.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML>
-<html>
- <head>
- <title>Test for Bug {1110872} Settings API Reloads</title>
- </head>
- <body>
- <script type="application/javascript;version=1.7">
-
- var createLock = function (msg) {
- var lock = navigator.mozSettings.createLock();
- var req = lock.get("wallpaper.image");
- // We don't actually care about success or failure here, we just
- // want to know the queue gets processed at all.
- req.onsuccess = function () {
- parent.postMessage({name:"done" + msg.data.step}, "*");
- }
- req.onerror = function () {
- parent.postMessage({name:"done" + msg.data.step}, "*");
- };
- return req;
- }
- window.onload = function() {
- window.addEventListener("message", function (msg) {
- var i;
- var reqs = [];
- if (msg.data.step == 1) {
- for (i = 0; i < 100; ++i) {
- reqs.push(createLock(msg));
- }
- } else {
- reqs.push(createLock(msg));
- }
- // If this is our first time through, reload
- // before the SettingsManager has a chance to get a response
- // to our query.
- if (msg.data.step == 1) {
- location.reload();
- }
- });
- }
- </script>
- <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={1110872}">Mozilla Bug {1110872} Inner Window for Reload Test</a>
- <p id="display"></p>
- <div id="content" style="display: none">
- </div>
- </body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/file_bug1110872.js
+++ /dev/null
@@ -1,47 +0,0 @@
-"use strict";
-
-SimpleTest.waitForExplicitFinish();
-
-var iframe;
-var loadedEvents = 0;
-
-function loadServer() {
- var url = SimpleTest.getTestFileURL("file_loadserver.js");
- var script = SpecialPowers.loadChromeScript(url);
-}
-
-function runTest() {
- iframe = document.createElement('iframe');
- document.body.appendChild(iframe);
- iframe.addEventListener('load', mozbrowserLoaded);
- iframe.src = 'file_bug1110872.html';
-}
-
-function iframeBodyRecv(msg) {
- switch (loadedEvents) {
- case 1:
- // If we get a message back before we've seen 2 loads, that means
- // something went wrong with the test. Fail immediately.
- ok(true, 'got response from first test!');
- break;
- case 2:
- // If we get a message back after 2 loads (initial load, reload),
- // it means the callback for the last lock fired, which means the
- // SettingsRequestManager queue has to have been cleared
- // correctly.
- ok(true, 'further queries returned ok after SettingsManager death');
- SimpleTest.finish();
- break;
- }
-}
-
-function mozbrowserLoaded() {
- loadedEvents++;
- iframe.contentWindow.postMessage({name: "start", step: loadedEvents}, '*');
- window.addEventListener('message', iframeBodyRecv);
-}
-
-window.addEventListener("load", function() {
- loadServer();
- runTest();
-});
deleted file mode 100644
--- a/dom/settings/tests/file_loadserver.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var Ci = Components.interfaces;
-var Cc = Components.classes;
-var Cu = Components.utils;
-
-// Stolen from SpecialPowers, since at this point we don't know we're in a test.
-var isMainProcess = function() {
- try {
- return Cc["@mozilla.org/xre/app-info;1"].
- getService(Ci.nsIXULRuntime).
- processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
- } catch (e) { }
- return true;
-};
-
-if (isMainProcess()) {
- Components.utils.import("resource://gre/modules/SettingsRequestManager.jsm");
-}
deleted file mode 100644
--- a/dom/settings/tests/test_settings_basics.html
+++ /dev/null
@@ -1,816 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id={678695}
--->
-<head>
- <title>Test for Bug {678695} Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-</head>
-<body>
-
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={678695}">Mozilla Bug {678695}</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script class="testbody" type="text/javascript">
-
-"use strict";
-
-var url = SimpleTest.getTestFileURL("file_loadserver.js");
-var script = SpecialPowers.loadChromeScript(url);
-
-function onUnwantedSuccess() {
- ok(false, "onUnwantedSuccess: shouldn't get here");
-}
-
-function onFailure() {
- ok(false, "in on Failure!");
-}
-
-const wifi = {"net3g.apn": "internet.mnc012.mcc345.gprs"};
-const wifi2 = {"net3g.apn": "internet.mnc012.mcc345.test"};
-var wifi3 = {"net3g.apn2": "internet.mnc012.mcc345.test3"};
-var wifiEnabled = {"wifi.enabled": true};
-var wifiDisabled = {"wifi.enabled": false};
-var screenBright = {"screen.brightness": 0.7};
-var screenBright2 = {"screen.brightness": 0.1};
-var wifiNetworks0 = { "wifi.networks[0]": { ssid: "myfreenetwork", mac: "01:23:45:67:89:ab", passwd: "secret"}};
-var wifiNetworks1 = { "wifi.networks[1]": { ssid: "myfreenetwork2", mac: "01:23:45:67:89:ab", passwd: "secret2"}};
-
-var combination = {
- "wifi.enabled": false,
- "screen.brightness": 0.7,
- "wifi.networks[0]": { ssid: "myfreenetwork", mac: "01:23:45:67:89:ab", passwd: "secret" },
- "test.test": true,
- "net3g.apn2": "internet.mnc012.mcc345.gprs"
-}
-
-function equals(o1, o2) {
- var k1 = Object.keys(o1).sort();
- var k2 = Object.keys(o2).sort();
- if (k1.length != k2.length) return false;
- return k1.zip(k2, function(keyPair) {
- if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
- return equals(o1[keyPair[0]], o2[keyPair[1]])
- } else {
- return o1[keyPair[0]] == o2[keyPair[1]];
- }
- }).all();
-};
-
-function observer1(setting) {
- is(setting.settingName, "screen.brightness", "Same settingName");
- is(setting.settingValue, 0.7, "Same settingvalue");
-};
-
-function observer2(setting) {
- is(setting.settingName, "screen.brightness", "Same settingName");
- is(setting.settingValue, 0.7, "Same settingvalue");
-};
-
-function observerWithNext(setting) {
- is(setting.settingName, "screen.brightness", "Same settingName");
- is(setting.settingValue, 0.7, "Same settingvalue");
- next();
-};
-
-function onsettingschangeWithNext(event) {
- is(event.settingName, "screen.brightness", "Same settingName");
- is(event.settingValue, 0.7, "Same settingvalue");
- next();
-};
-
-function check(o1, o2) {
- is(JSON.stringify(o1), JSON.stringify(o2), "same");
-}
-
-var req, req2, req3, req4, req5, req6;
-var index = 0;
-
-var steps = [
- function () {
- ok(true, "Deleting database");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- },
- function () {
- ok(true, "Setting wifi");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifi);
- req.onsuccess = function () {
- ok(true, "set done");
- }
- req.onerror = onFailure;
-
- var lock2 = navigator.mozSettings.createLock();
- req2 = lock2.get("net3g.apn");
- req2.onsuccess = function () {
- is(Object.keys(req2.result).length, 1, "length 1");
- check(wifi, req2.result);
- ok(true, "Get net3g.apn Done");
- next();
- };
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "Change wifi1");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifi2);
- req.onsuccess = function () {
- ok(true, "Set Done");
- };
- req.onerror = onFailure;
- ok(true, "Get changed net3g.apn");
- req2 = lock.get("net3g.apn");
- req2.onsuccess = function () {
- is(Object.keys(req2.result).length, 1, "length 1");
- check(wifi2, req2.result);
- ok(true, "Get net3g.apn Done");
- next();
- };
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "Set Combination");
- var lock = navigator.mozSettings.createLock();
- req3 = lock.set(combination);
- req3.onsuccess = function () {
- ok(true, "set done");
- req4 = lock.get("net3g.apn2");
- req4.onsuccess = function() {
- ok(true, "Done");
- check(combination["net3g.apn2"], req4.result["net3g.apn2"]);
- next();
- }
- }
- req3.onerror = onFailure;
- },
- function() {
- var lock = navigator.mozSettings.createLock();
- req4 = lock.get("net3g.apn2");
- req4.onsuccess = function() {
- ok(true, "Done");
- check(combination["net3g.apn2"], req4.result["net3g.apn2"]);
- next();
- }
- req4.onerror = onFailure;
- },
- function() {
- ok(true, "Get unknown key");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("abc.def");
- req.onsuccess = function() {
- is(req.result["abc.def"], undefined, "no result");
- next();
- };
- req.onerror = onFailure;
- },
- function() {
- ok(true, "adding onsettingchange");
- navigator.mozSettings.onsettingchange = onsettingschangeWithNext;
- var lock = navigator.mozSettings.createLock();
- req2 = lock.get("screen.brightness");
- req2.onsuccess = function() {
- ok(true, "end adding onsettingchange");
- next();
- };
- req2.onerror = onFailure;
- },
- function() {
- ok(true, "Test onsettingchange");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set done, observer has to call next");
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "delete onsettingschange");
- var lock = navigator.mozSettings.createLock();
- navigator.mozSettings.onsettingchange = null;
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set done");
- next();
- }
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Waiting for all set callbacks");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- req.onsuccess = function() {
- ok(true, "Done");
- next();
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "adding Observers 1");
- navigator.mozSettings.addObserver("screen.brightness", observer1);
- navigator.mozSettings.addObserver("screen.brightness", observer1);
- navigator.mozSettings.addObserver("screen.brightness", observer2);
- navigator.mozSettings.addObserver("screen.brightness", observerWithNext);
- var lock = navigator.mozSettings.createLock();
- req2 = lock.get("screen.brightness");
- req2.onsuccess = function() {
- ok(true, "set observeSetting done!");
- next();
- };
- req2.onerror = onFailure;
- },
- function() {
- ok(true, "test observers");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set done");
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "removing Event Listener");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set done");
- navigator.mozSettings.removeObserver("screen.brightness", observer2);
- navigator.mozSettings.removeObserver("screen.brightness", observer1);
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "test Event Listener");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set done");
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "removing Event Listener");
- var lock = navigator.mozSettings.createLock();
- navigator.mozSettings.removeObserver("screen.brightness", observerWithNext);
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set done");
- navigator.mozSettings.removeObserver("screen.brightness", observer2);
- navigator.mozSettings.removeObserver("screen.brightness", observer1);
- next();
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "removing Event Listener");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- req.onsuccess = function () {
- ok(true, "get done");
- next();
- }
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Nested test");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- req.onsuccess = function () {
- req3 = lock.set({"screen.brightness": req.result["screen.brightness"] + 1})
- req3.onsuccess = function () {
- req4 = lock.get("screen.brightness");
- req4.onsuccess = function() {
- is(req4.result["screen.brightness"], 1.7, "same Value");
- }
- req4.onerror = onFailure;
- }
- req3.onerror = onFailure;
- };
- req.onerror = onFailure;
-
- req2 = lock.get("screen.brightness");
- req2.onsuccess = function () {
- is(req2.result["screen.brightness"], 0.7, "same Value");
- }
- req2.onerror = onFailure;
-
- var lock2 = navigator.mozSettings.createLock();
- req5 = lock2.get("screen.brightness");
- req5.onsuccess = function () {
- is(req5.result["screen.brightness"], 1.7, "same Value");
- next();
- }
- req5.onerror = onFailure;
- },
- function () {
- ok(true, "Deleting database");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- },
- function () {
- var lock = navigator.mozSettings.createLock();
- req2 = lock.set(wifi);
- req2.onsuccess = function () {
- ok(true, "set done");
- }
- req2.onerror = onFailure;
-
- ok(true, "Get all settings");
- var lock2 = navigator.mozSettings.createLock();
- req3 = lock2.get("*");
- req3.onsuccess = function () {
- is(Object.keys(req3.result).length, 1, "length 1");
- check(req3.result, wifi);
- ok(true, JSON.stringify(req3.result));
- ok(true, "Get all settings Done");
- };
- req3.onerror = onFailure;
-
- req4 = lock2.get("net3g.apn");
- req4.onsuccess = function () {
- is(Object.keys(req4.result).length, 1, "length 1");
- check(wifi, req4.result);
- ok(true, "Get net3g.apn Done");
- next();
- };
- req4.onerror = onFailure;
- },
- function () {
- ok(true, "Change wifi1");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifi2);
- req.onsuccess = function () {
- ok(true, "Set Done");
- };
- req.onerror = onFailure;
-
- ok(true, "Get changed net3g.apn");
- req2 = lock.get("net3g.apn");
- req2.onsuccess = function () {
- is(Object.keys(req2.result).length, 1, "length 1");
- check(wifi2, req2.result);
- ok(true, "Get net3g.apn Done");
- next();
- };
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "Test locking");
- var lock = navigator.mozSettings.createLock();
- var lock2 = navigator.mozSettings.createLock();
- req = lock.set(wifiEnabled);
- req.onsuccess = function () {
- ok(true, "Test Locking Done");
- };
- req.onerror = onFailure;
-
- req2 = lock2.set(wifiDisabled);
- req2.onsuccess = function () {
- ok(true, "Set Done");
- next();
- };
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "Test locking result");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("wifi.enabled");
- req.onsuccess = function() {
- check(req.result, wifiDisabled);
- ok(true, "Test1 locking result done");
- next();
- }
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Test locking heavy");
- for (var i=0; i<30; i++) {
- // only new locks!
- var lock = navigator.mozSettings.createLock();
- var obj = {};
- obj["wifi.enabled" + i] = true;
- req = lock.set( obj );
- req.onsuccess = function () {
- ok(true, "Set1 Done");
- };
- req.onerror = onFailure;
- };
- {
- var lock2 = navigator.mozSettings.createLock();
- req2 = lock2.get("*");
- req2.onsuccess = function () {
- is(Object.keys(req2.result).length, 32, "length 12");
- ok(true, JSON.stringify(req2.result));
- ok(true, "Get all settings Done");
- };
- req2.onerror = onFailure;
- }
- var lock2 = navigator.mozSettings.createLock();
- var obj = {};
- obj["wifi.enabled" + 30] = true;
- req3 = lock2.set( obj );
- req3.onsuccess = function () {
- ok(true, "Set12 Done");
- };
- req3.onerror = onFailure;
-
- var lock3 = navigator.mozSettings.createLock();
- // with one lock
- for (var i = 0; i < 30; i++) {
- req4 = lock3.get("wifi.enabled" + i);
- var testObj = {};
- testObj["wifi.enabled" + i] = true;
- req4.onsuccess = function () {
- check(this.request.result, this.testObj);
- ok(true, "Get1 Done");
- }.bind({testObj: testObj, request: req4});
- req4.onerror = onFailure;
- }
-
- ok(true, "start next2!");
- var lock4 = navigator.mozSettings.createLock();
- for (var i=0; i<30; i++) {
- var obj = {};
- obj["wifi.enabled" + i] = false;
- req4 = lock4.set( obj );
- req4.onsuccess = function () {
- ok(true, "Set2 Done");
- };
- req4.onerror = onFailure;
- }
- var lock5 = navigator.mozSettings.createLock();
- for (var i=0; i<30; i++) {
- req5 = lock5.get("wifi.enabled" + i);
- var testObj = {};
- testObj["wifi.enabled" + i] = false;
- req5.onsuccess = function () {
- check(this.request.result, this.testObj);
- ok(true, "Get2 Done");
- }.bind({testObj: testObj, request: req5});
- req5.onerror = onFailure;
- }
-
- var lock6 = navigator.mozSettings.createLock();
- req6 = lock6.clear();
- req6.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req6.onerror = onFailure;
- },
- function () {
- ok(true, "reverse Test locking");
- var lock2 = navigator.mozSettings.createLock();
- var lock = navigator.mozSettings.createLock();
-
- req = lock.set(wifiEnabled);
- req.onsuccess = function () {
- ok(true, "Test Locking Done");
- next();
- };
- req.onerror = onFailure;
-
- req2 = lock2.set(wifiDisabled);
- req2.onsuccess = function () {
- ok(true, "Set Done");
- };
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "Test locking result");
- var lock = navigator.mozSettings.createLock();
-
- req = lock.get("wifi.enabled");
- req.onsuccess = function() {
- check(req.result, wifiEnabled);
- ok(true, "Test2 locking result done");
- }
- req.onerror = onFailure;
-
- var lock2 = navigator.mozSettings.createLock();
- req2 = lock2.clear();
- req2.onsuccess = function () {
- ok(true, "Deleted the database");
- };
- req2.onerror = onFailure;
-
- var lock3 = navigator.mozSettings.createLock();
- req3 = lock3.set(wifi);
- req3.onsuccess = function () {
- ok(true, "set done");
- next();
- }
- req3.onerror = onFailure;
-
- },
- function () {
- ok(true, "Get all settings");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("*");
- req.onsuccess = function () {
- is(Object.keys(req.result).length, 1, "length 1");
- check(wifi, req.result);
- ok(true, "Get all settings Done");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Get net3g.apn");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("net3g.apn");
- req.onsuccess = function () {
- is(Object.keys(req.result).length, 1, "length 1");
- check(wifi, req.result);
- ok(true, "Get net3g.apn Done");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Change wifi2");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifi2);
- req.onsuccess = function () {
- ok(true, "Set Done");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Get net3g.apn");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("net3g.apn");
- req.onsuccess = function () {
- is(Object.keys(req.result).length, 1, "length 1");
- check(wifi2, req.result);
- ok(true, "Get net3g.apn Done");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Add wifi.enabled");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifiEnabled);
- req.onsuccess = function () {
- ok(true, "Set Done");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Get Wifi Enabled");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("wifi.enabled");
- req.onsuccess = function () {
- is(Object.keys(req.result).length, 1, "length 1");
- check(wifiEnabled, req.result);
- ok(true, "Get wifi.enabledDone");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Get all");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("*");
- req.onsuccess = function () {
- is(Object.keys(req.result).length, 2, "length 2");
- check(wifiEnabled["wifi.enabled"], req.result["wifi.enabled"]);
- check(wifi2["net3g.apn"], req.result["net3g.apn"]);
- ok(true, "Get all Done");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Add wifiNetworks");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifiNetworks0);
- req.onsuccess = function () {
- ok(true, "Set Done");
- };
- req.onerror = onFailure;
-
- req2 = lock.set(wifiNetworks1);
- req2.onsuccess = function () {
- ok(true, "Set Done");
- next();
- };
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "Get Wifi Networks");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("wifi.networks[0]");
- req.onsuccess = function () {
- is(Object.keys(req.result).length, 1, "length 1");
- check(wifiNetworks0, req.result);
- ok(true, "Get wifi.networks[0]");
- next();
- };
- req.onerror = onFailure;
- },
- function() {
- ok(true, "Clear DB, multiple locks");
- var lock4 = navigator.mozSettings.createLock();
- var lock3 = navigator.mozSettings.createLock();
- var lock2 = navigator.mozSettings.createLock();
- var lock = navigator.mozSettings.createLock();
- var lock6 = navigator.mozSettings.createLock();
- var lock7 = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Add wifiNetworks");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifiNetworks0);
- req.onsuccess = function () {
- ok(true, "Set Done");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Test set after lock closed");
- var lockx = navigator.mozSettings.createLock();
- var cb = function() {
- var reqx = null;
- try {
- reqx = lockx.set(wifiNetworks0);
- ok(false, "should have thrown");
- } catch (ex) {
- ok(reqx == null, "request is still null");
- ok(true, "Caught Exception");
- next();
- }
- }
- SimpleTest.executeSoon(cb);
- },
- function() {
- ok(true, "Clear DB");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function() {
- ok(true, "Set with multiple arguments");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(combination);
- req.onsuccess = function () {
- ok(true, "Set Done");
- next();
- };
- req.onerror = onFailure;
- },
- function() {
- ok(true, "request argument from multiple set");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- req.onsuccess = function () {
- check(req.result["screen.brightness"], 0.7, "get done");
- next();
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "Test closed attribute on a valid lock");
- var lock = navigator.mozSettings.createLock();
- is(lock.closed, false, "closed attribute is false on creation");
- req = lock.get("screen.brightness");
- req.onsuccess = function () {
- is(lock.closed, false, "closed attribute is false on success callback");
- next();
- }
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Test closed attribute on invalid lock");
- var lockx = navigator.mozSettings.createLock();
- var cb = function() {
- var reqx = null;
- try {
- reqx = lockx.set(wifiNetworks0);
- ok(false, "should have thrown");
- } catch (ex) {
- is(lockx.closed, true, "closed attribute is true");
- ok(true, "Caught Exception");
- next();
- }
- }
- SimpleTest.executeSoon(cb);
- },
- function() {
- ok(true, "Clear DB");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function() {
- ok(true, "Set object value");
- var lock = navigator.mozSettings.createLock();
- req = lock.set({"setting-obj": {foo: {bar: 23}}});
- req.onsuccess = function() {
- req2 = lock.get("setting-obj");
- req2.onsuccess = function(event) {
- var result = event.target.result["setting-obj"];
- ok(result, "Got valid result");
- ok(typeof result == "object", "Result is object");
- ok("foo" in result && "bar" in result.foo, "Result has properties");
- ok(result.foo.bar == 23, "Result properties are set");
- next();
- };
- };
- },
- function() {
- ok(true, "Clear DB");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Call success callback when transaction commits");
- var lock = navigator.mozSettings.createLock();
- lock.onsettingstransactionsuccess = function () {
- next();
- };
- req = lock.set({"setting-obj": {foo: {bar: 23}}});
- req.onsuccess = function() {
- req2 = lock.get("setting-obj");
- req2.onsuccess = function(event) {
- var result = event.target.result["setting-obj"];
- ok(result, "Got valid result");
- ok(typeof result == "object", "Result is object");
- ok("foo" in result && "bar" in result.foo, "Result has properties");
- ok(result.foo.bar == 23, "Result properties are set");
- };
- };
- },
- function() {
- ok(true, "Clear DB");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "all done!\n");
- SimpleTest.finish();
- }
-];
-
-function next() {
- ok(true, "Begin!");
- if (index >= steps.length) {
- ok(false, "Shouldn't get here!");
- return;
- }
- try {
- steps[index]();
- } catch(ex) {
- ok(false, "Caught exception", ex);
- }
- index += 1;
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(next);
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_blobs.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=821630
--->
-<head>
- <title>Test for Bug 821630 Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-</head>
-<body>
-
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=821630">Mozilla Bug 821630</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script class="testbody" type="text/javascript;version=1.7">
-
-"use strict";
-
-var url = SimpleTest.getTestFileURL("file_loadserver.js");
-var script = SpecialPowers.loadChromeScript(url);
-
-function onUnwantedSuccess() {
- ok(false, "onUnwantedSuccess: shouldn't get here");
-}
-
-function onFailure() {
- return function(s) {
- if (s) {
- ok(false, "in on Failure! - " + s);
- } else {
- ok(false, "in on Failure!");
- }
- }
-}
-
-let req;
-
-let storedBlob = new Blob(['12345'], {"type": "text/plain"});
-
-function checkBlob(blob) {
- try {
- let url = URL.createObjectURL(blob);
- ok(true, "Valid blob");
- } catch (e) {
- ok(false, "Valid blob");
- }
-}
-
-let steps = [
- function() {
- let lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = next;
- req.onerror = onFailure("Deleting database");
- },
- function() {
- function obs(e) {
- checkBlob(e.settingValue);
- navigator.mozSettings.removeObserver("test1", obs);
- next();
- }
- navigator.mozSettings.addObserver("test1", obs);
- next();
- },
- function() {
- // next is called by the observer above
- let req = navigator.mozSettings.createLock().set({"test1": storedBlob});
- req.onerror = onFailure("Saving blob");
- },
- function() {
- let req = navigator.mozSettings.createLock().get("test1");
- req.onsuccess = function(event) {
- checkBlob(event.target.result["test1"]);
- next();
- };
- req.onerror = onFailure("Getting blob");
- },
- function() {
- let req = navigator.mozSettings.createLock().set({"test2": [1, 2, storedBlob, 4]});
- req.onsuccess = next;
- req.onerror = onFailure("Saving array");
- },
- function() {
- let req = navigator.mozSettings.createLock().get("test2");
- req.onsuccess = function(event) {
- let val = event.target.result["test2"];
- ok(Array.isArray(val), "Result is an array");
- ok(val[0] == 1 && val[1] == 2 && val[3] == 4, "Primitives are preserved");
- checkBlob(val[2]);
- next();
- };
- req.onerror = onFailure("Getting array");
- },
- function() {
- let req = navigator.mozSettings.createLock().set({"test3": {foo: "bar", baz: {number: 1, arr: [storedBlob]}}});
- req.onsuccess = next();
- req.onerror = onFailure("Saving object");
- },
- function() {
- let req = navigator.mozSettings.createLock().get("test3");
- req.onsuccess = function(event) {
- let val = event.target.result["test3"];
- ok(typeof(val) == "object", "Result is an object");
- ok("foo" in val && typeof(val.foo) == "string", "String property preserved");
- ok("baz" in val && typeof(val.baz) == "object", "Object property preserved");
- let baz = val.baz;
- ok("number" in baz && baz.number == 1, "Primite inside object preserved");
- ok("arr" in baz && Array.isArray(baz.arr), "Array inside object is preserved");
- checkBlob(baz.arr[0]);
- next();
- };
- req.onerror = onFailure("Getting object");
- },
- function() {
- let req = navigator.mozSettings.createLock().clear();
- req.onsuccess = function() {
- next();
- };
- req.onerror = onFailure("Deleting database");
- },
- function () {
- ok(true, "all done!\n");
- SimpleTest.finish();
- }
-];
-
-function next() {
- try {
- let step = steps.shift();
- if (step) {
- step();
- }
- } catch(ex) {
- ok(false, "Caught exception", ex);
- }
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(next);
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_bug1110872.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE HTML>
-<html>
- <head>
- <title>Test for Bug {1110872} Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
- </head>
- <body>
- <script type="application/javascript;version=1.7" src="file_bug1110872.js">
- </script>
- <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={1110872}">Mozilla Bug {1110872}</a>
- <p id="display"></p>
- <div id="content" style="display: none">
- </div>
- </body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_data_uris.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=806374
--->
-<head>
- <title>Test for Bug 806374 Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-</head>
-<body>
-
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=821630">Mozilla Bug 821630</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script class="testbody" type="text/javascript;version=1.7">
-
-"use strict";
-
-var url = SimpleTest.getTestFileURL("file_loadserver.js");
-var script = SpecialPowers.loadChromeScript(url);
-
-function onUnwantedSuccess() {
- ok(false, "onUnwantedSuccess: shouldn't get here");
-}
-
-function onFailure() {
- return function(s) {
- if (s) {
- ok(false, "in on Failure! - " + s);
- } else {
- ok(false, "in on Failure!");
- }
- }
-}
-
-let req;
-
-// A simple data URI that will be converted to a blob.
-let dataURI = "data:text/html;charset=utf-8,%3C!DOCTYPE html>%3Cbody style='background:black;";
-
-function checkBlob(blob) {
- try {
- let url = URL.createObjectURL(blob);
- ok(true, "Valid blob");
- } catch (e) {
- ok(false, "Valid blob");
- }
-}
-
-let steps = [
- function() {
- let lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = next;
- req.onerror = onFailure("Deleting database");
- },
- function() {
- function obs(e) {
- checkBlob(e.settingValue);
- navigator.mozSettings.removeObserver("test1", obs);
- next();
- }
- navigator.mozSettings.addObserver("test1", obs);
- next();
- },
- function() {
- // next is called by the observer above
- let req = navigator.mozSettings.createLock().set({"test1": dataURI});
- req.onerror = onFailure("Saving blob");
- },
- function() {
- let req = navigator.mozSettings.createLock().get("test1");
- req.onsuccess = function(event) {
- checkBlob(event.target.result["test1"]);
- next();
- };
- req.onerror = onFailure("Getting blob");
- },
- function() {
- let req = navigator.mozSettings.createLock().set({"test2": [1, 2, dataURI, 4]});
- req.onsuccess = next;
- req.onerror = onFailure("Saving array");
- },
- function() {
- let req = navigator.mozSettings.createLock().get("test2");
- req.onsuccess = function(event) {
- let val = event.target.result["test2"];
- ok(Array.isArray(val), "Result is an array");
- ok(val[0] == 1 && val[1] == 2 && val[3] == 4, "Primitives are preserved");
- checkBlob(val[2]);
- next();
- };
- req.onerror = onFailure("Getting array");
- },
- function() {
- let req = navigator.mozSettings.createLock().set({"test3": {foo: "bar", baz: {number: 1, arr: [dataURI]}}});
- req.onsuccess = next();
- req.onerror = onFailure("Saving object");
- },
- function() {
- let req = navigator.mozSettings.createLock().get("test3");
- req.onsuccess = function(event) {
- let val = event.target.result["test3"];
- ok(typeof(val) == "object", "Result is an object");
- ok("foo" in val && typeof(val.foo) == "string", "String property preserved");
- ok("baz" in val && typeof(val.baz) == "object", "Object property preserved");
- let baz = val.baz;
- ok("number" in baz && baz.number == 1, "Primite inside object preserved");
- ok("arr" in baz && Array.isArray(baz.arr), "Array inside object is preserved");
- checkBlob(baz.arr[0]);
- next();
- };
- req.onerror = onFailure("Getting object");
- },
- function() {
- let req = navigator.mozSettings.createLock().clear();
- req.onsuccess = function() {
- next();
- };
- req.onerror = onFailure("Deleting database");
- },
- function () {
- ok(true, "all done!\n");
- SimpleTest.finish();
- }
-];
-
-function next() {
- try {
- let step = steps.shift();
- if (step) {
- step();
- }
- } catch(ex) {
- ok(false, "Caught exception", ex);
- }
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(next);
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_events.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=678695
--->
-<head>
- <title>Test for Bug 678695</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=678695">Mozilla Bug 678695</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-/** Test for Bug 678695 **/
-
-var e = new MozSettingsEvent("settingchanged", {settingName: "a", settingValue: 1});
-ok(e, "Should have settings event!");
-is(e.settingName, "a", "Name should be a.");
-is(e.settingValue, 1, "Value should be 1.");
-
-e = new MozSettingsEvent("settingchanged", {settingName: "test", settingValue: {test: "test"}});
-is(e.settingName, "test", "Name should be 'test'.");
-is(e.settingValue.test, "test", "Name should be 'test'.");
-
-e = new MozSettingsEvent("settingchanged", {settingName: "a", settingValue: true});
-is(e.settingName, "a", "Name should be a.");
-is(e.settingValue, true, "Value should be true.");
-
-var e = new MozSettingsTransactionEvent("settingtransactionsuccess", {});
-ok(e, "Should have settings event!");
-is(e.error, "", "error should be null");
-
-var e = new MozSettingsTransactionEvent("settingtransactionfailure", {error: "Test error."});
-ok(e, "Should have settings event!");
-is(e.error, "Test error.", "error should be 'Test error.'");
-
-
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_navigator_object.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=898512
--->
-<head>
- <title>Test for Bug 898512 Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-</head>
-<body>
-
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=898512">Mozilla Bug 898512</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe></iframe>
-</div>
-<pre id="test">
-<script class="testbody" type="text/javascript;version=1.7">
-
-SimpleTest.waitForExplicitFinish();
-
-function testPref() {
- SpecialPowers.pushPrefEnv({
- set: [["dom.mozSettings.enabled", false]]
- }, function() {
- is(navigator.mozSettings, undefined, "navigator.mozSettings is undefined");
- SimpleTest.finish();
- });
-}
-
-testPref();
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_observer_killer.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1193469
--->
-<head>
- <title>Test for Bug 1193469 Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-</head>
-<body>
-
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1193469">Mozilla Bug 1193469</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-<iframe></iframe>
-</div>
-<pre id="test">
-<script class="testbody" type="text/javascript;version=1.7">
-
-var url = SimpleTest.getTestFileURL("file_loadserver.js");
-var script = SpecialPowers.loadChromeScript(url);
-
-SimpleTest.waitForExplicitFinish();
-
-SpecialPowers.pushPrefEnv({
- set: [["dom.mozSettings.enabled", true]]
-},
- function () {
- ok(true, "abusing observers");
-
- var obs;
- for (obs = 0; obs < 9; obs++) {
- navigator.mozSettings.addObserver("fake.setting.key", function(v) {
- // nothing to do for real ...
- ok(false, "should not be called");
- });
- ok(true, "first: added observer #" + obs);
- }
- ok(true, "adding first observers, should not have thrown");
-
- try {
- ok(true, "second: adding new observer");
- navigator.mozSettings.addObserver("fake.setting.key", function(v) {
- // nothing to do for real ...
- ok(false, "should not be called");
- });
- ok(false, "adding too many observers should have thrown");
- } catch (ex) {
- ok(true, "got exception when trying to add too many observers");
- }
-
- SimpleTest.finish();
- });
-
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_onsettingchange.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=678695
--->
-<head>
- <title>Test for Bug 678695 Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-</head>
-<body>
-
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=678695">Mozilla Bug 678695</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script class="testbody" type="text/javascript">
-
-"use strict";
-
-var url = SimpleTest.getTestFileURL("file_loadserver.js");
-var script = SpecialPowers.loadChromeScript(url);
-
-var screenBright = {"screen.brightness": 0.7};
-
-function onFailure() {
- ok(false, "in on Failure!");
-}
-
-function observer1(setting) {
- dump("observer 1 called!\n");
- is(setting.settingName, "screen.brightness", "Same settingName");
- is(setting.settingValue, 0.7, "Same settingvalue");
-};
-
-function observer2(setting) {
- dump("observer 2 called!\n");
- is(setting.settingName, "screen.brightness", "Same settingName");
- is(setting.settingValue, 0.7, "Same settingvalue");
-};
-
-var calls = 0;
-function observerOnlyCalledOnce(setting) {
- is(++calls, 1, "Observer only called once!");
-};
-
-
-function observerWithNext(setting) {
- dump("observer with next called!\n");
- is(setting.settingName, "screen.brightness", "Same settingName");
- is(setting.settingValue, 0.7, "Same settingvalue");
- next();
-};
-
-function onsettingschangeWithNext(event) {
- dump("onsettingschangewithnext called!\n");
- is(event.settingName, "screen.brightness", "Same settingName");
- is(event.settingValue, 0.7, "Same settingvalue");
- next();
-};
-
-var cset = {'a':'b','c':[{'d':'e'}]};
-
-function onComplexSettingschangeWithNext(event) {
- is(event.settingName, "test.key", "Same settingName");
- is(event.settingValue['a'], "b", "Same settingvalue");
- var c = event.settingValue['c'];
- ok(Array.isArray(c), "c is array!");
- is(c[0]['d'], 'e', "Right settingValue!");
- next();
-};
-
-var req, req2;
-var index = 0;
-
-var steps = [
- function () {
- ok(true, "Deleting database");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- var lock = navigator.mozSettings.createLock();
- req2 = lock.set(screenBright);
- req2.onsuccess = function () {
- ok(true, "set done");
- navigator.mozSettings.onsettingchange = onsettingschangeWithNext;
- next();
- }
- req2.onerror = onFailure;
- },
- function() {
- ok(true, "testing");
- var lock = navigator.mozSettings.createLock();
- req2 = lock.set(screenBright);
- req2.onsuccess = function() {
- ok(true, "end adding onsettingchange");
- };
- req2.onerror = onFailure;
- },
- function() {
- ok(true, "test observers");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- req.onsuccess = function () {
- ok(true, "get done");
- next();
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "adding Observers 1");
- navigator.mozSettings.addObserver("screen.brightness", observer1);
- navigator.mozSettings.addObserver("screen.brightness", observer1);
- navigator.mozSettings.addObserver("screen.brightness", observer2);
- navigator.mozSettings.addObserver("screen.brightness", observerOnlyCalledOnce);
- var lock = navigator.mozSettings.createLock();
- req2 = lock.get("screen.brightness");
- req2.onsuccess = function() {
- ok(true, "set observeSetting done!");
- next();
- };
- req2.onerror = onFailure;
- },
- function() {
- ok(true, "test observers");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set1 done");
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "test observers");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- navigator.mozSettings.removeObserver("screen.brightness", observerOnlyCalledOnce);
- req.onsuccess = function () {
- ok(true, "set1 done");
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "removing Event Listener");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set2 done");
- navigator.mozSettings.removeObserver("screen.brightness", observer2);
- navigator.mozSettings.removeObserver("screen.brightness", observer1);
- navigator.mozSettings.removeObserver("screen.brightness", observer1);
- }
- req.onerror = onFailure;
- },
-
- function() {
- ok(true, "delete onsettingschange");
- var lock = navigator.mozSettings.createLock();
- navigator.mozSettings.onsettingchange = null;
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set0 done");
- next();
- }
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Waiting for all set callbacks");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- req.onsuccess = function() {
- ok(true, "Done");
- next();
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "adding Observers 1");
- navigator.mozSettings.addObserver("screen.brightness", observer1);
- navigator.mozSettings.addObserver("screen.brightness", observer1);
- navigator.mozSettings.addObserver("screen.brightness", observer2);
- navigator.mozSettings.addObserver("screen.brightness", observerWithNext);
- var lock = navigator.mozSettings.createLock();
- req2 = lock.get("screen.brightness");
- req2.onsuccess = function() {
- ok(true, "set observeSetting done!");
- next();
- };
- req2.onerror = onFailure;
- },
- function() {
- ok(true, "test observers");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set1 done");
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "removing Event Listener");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set2 done");
- navigator.mozSettings.removeObserver("screen.brightness", observer2);
- navigator.mozSettings.removeObserver("screen.brightness", observer1);
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "test Event Listener");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set3 done");
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "removing Event Listener");
- var lock = navigator.mozSettings.createLock();
- navigator.mozSettings.removeObserver("screen.brightness", observerWithNext);
- req = lock.set(screenBright);
- req.onsuccess = function () {
- ok(true, "set4 done");
- navigator.mozSettings.removeObserver("screen.brightness", observer2);
- navigator.mozSettings.removeObserver("screen.brightness", observer1);
- next();
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "removing Event Listener");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("screen.brightness");
- req.onsuccess = function () {
- ok(true, "get5 done");
- next();
- }
- req.onerror = onFailure;
- },
- function() {
- ok(true, "Clear DB");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- ok(true, "Deleting database");
- var lock = navigator.mozSettings.createLock();
- req = lock.clear();
- req.onsuccess = function () {
- ok(true, "Deleted the database");
- next();
- };
- req.onerror = onFailure;
- },
- function () {
- var lock = navigator.mozSettings.createLock();
- navigator.mozSettings.onsettingchange = onComplexSettingschangeWithNext;
- req2 = navigator.mozSettings.createLock().set({'test.key': cset});
- req2.onsuccess = function () {
- ok(true, "set done");
- }
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "all done!\n");
- SimpleTest.finish();
- }
-];
-
-function next() {
- ok(true, "Begin!");
- if (index >= steps.length) {
- ok(false, "Shouldn't get here!");
- return;
- }
- try {
- steps[index]();
- } catch(ex) {
- ok(false, "Caught exception", ex);
- }
- index += 1;
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(next);
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_permissions.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id={678695}
--->
-<head>
- <title>Test for Bug {678695} Settings API</title>
- <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
- <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-</head>
-<body>
-
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={900551}">Mozilla Bug {900551}</a>
-<p id="display"></p>
-<div id="content" style="display: none">
-
-</div>
-<pre id="test">
-<script class="testbody" type="text/javascript">
-
-"use strict";
-
-var url = SimpleTest.getTestFileURL("file_loadserver.js");
-var script = SpecialPowers.loadChromeScript(url);
-
-function onUnwantedSuccess() {
- ok(false, "onUnwantedSuccess: shouldn't get here");
-}
-
-// No more permissions, so failure cannot happen
-function onFailure() {
- ok(true, "in on Failure!");
- next();
-}
-
-const wifi = {"wifi.enabled": false}
-const wallpaper = {"wallpaper.image": "test-image"};
-
-var combination = {
- "wifi.enabled": false,
- "wallpaper.image": "test-image"
-}
-
-function equals(o1, o2) {
- var k1 = Object.keys(o1).sort();
- var k2 = Object.keys(o2).sort();
- if (k1.length != k2.length) return false;
- return k1.zip(k2, function(keyPair) {
- if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
- return equals(o1[keyPair[0]], o2[keyPair[1]])
- } else {
- return o1[keyPair[0]] == o2[keyPair[1]];
- }
- }).all();
-};
-
-function observer1(setting) {
- is(setting.settingName, "screen.brightness", "Same settingName");
- is(setting.settingValue, "0.7", "Same settingvalue");
-};
-
-function onsettingschangeWithNext(event) {
- is(event.settingName, "screen.brightness", "Same settingName");
- is(event.settingValue, "0.7", "Same settingvalue");
- next();
-};
-
-function check(o1, o2) {
- is(JSON.stringify(o1), JSON.stringify(o2), "same");
-}
-
-var req, req2, req3, req4, req5, req6;
-var index = 0;
-
-var steps = [
- // Can't delete database here since that requires permissions we don't want
- // to give the page.
- function () {
- ok(true, "Setting wallpaper");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wallpaper);
- req.onsuccess = function () {
- ok(true, "set done");
- }
- req.onerror = onFailure;
-
- var lock2 = navigator.mozSettings.createLock();
- req2 = lock2.get("wallpaper.image");
- req2.onsuccess = function () {
- is(Object.keys(req2.result).length, 1, "length 1");
- check(wallpaper, req2.result);
- ok(true, "Get wallpaper Done");
- next();
- };
- req2.onerror = onFailure;
- },
- function () {
- ok(true, "Get Wifi");
- var lock = navigator.mozSettings.createLock();
- req = lock.get("wifi.enabled");
- req.onerror = function () {
- ok(true, "get failed (expected)");
- next();
- }
- req.onsuccess = onFailure;
- },
- function () {
- ok(true, "Set Wifi");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(wifi);
- req.onerror = function () {
- ok(true, "set failed (expected)");
- next();
- }
- req.onsuccess = onFailure;
- },
- function () {
- ok(true, "Set combination (1 valid 1 not valid)");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(combination);
- req.onerror = function () {
- ok(true, "set failed (expected)");
- next();
- }
- req.onsuccess = onFailure;
- },
- function () {
- ok(true, "All requests on a failed lock should fail");
- var lock = navigator.mozSettings.createLock();
- lock.onsettingstransactionfailure = function (evt) {
- ok(evt.error == "Lock failed a permissions check, all requests now failing.", "transaction failure on permissions error message correct.");
- ok(true, "transaction failed (expected) ");
- next();
- };
- lock.onsettingstransactionsuccess = onFailure;
-
- req = lock.set(wifi);
- req.onerror = function () {
- ok(true, "set failed (expected)");
- }
- req.onsuccess = onFailure;
- req2 = lock.get("wallpaper.image");
- req2.onerror = function () {
- ok(true, "get failed (expected)");
- }
- req2.onsuccess = onFailure;
- },
- function () {
- ok(true, "Set combination (1 valid 1 not valid)");
- var lock = navigator.mozSettings.createLock();
- req = lock.set(combination);
- req.onerror = function () {
- ok(true, "set failed (expected)");
- next();
- }
- req.onsuccess = onFailure;
- },
- function () {
- ok(true, "all done!\n");
- SimpleTest.finish();
- }
-];
-
-function next() {
- ok(true, "Begin!");
- if (index >= steps.length) {
- ok(false, "Shouldn't get here!");
- return;
- }
- try {
- steps[index]();
- } catch(ex) {
- ok(false, "Caught exception", ex);
- }
- index += 1;
-}
-
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(next);
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_service.js
+++ /dev/null
@@ -1,138 +0,0 @@
-"use strict";
-
-var Cu = Components.utils;
-var Cc = Components.classes;
-var Ci = Components.interfaces;
-
-if (SpecialPowers.isMainProcess()) {
- SpecialPowers.Cu.import("resource://gre/modules/SettingsRequestManager.jsm");
-}
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-SimpleTest.waitForExplicitFinish();
-
-XPCOMUtils.defineLazyServiceGetter(this, "SettingsService",
- "@mozilla.org/settingsService;1",
- "nsISettingsService");
-
-var tests = [
- /* Callback tests */
- function() {
- let callbackCount = 10;
-
- let callback = {
- handle: function(name, result) {
- switch (callbackCount) {
- case 10:
- case 9:
- is(result, true, "result is true");
- break;
- case 8:
- case 7:
- is(result, false, "result is false");
- break;
- case 6:
- case 5:
- is(result, 9, "result is 9");
- break;
- case 4:
- case 3:
- is(result, 9.4, "result is 9.4");
- break;
- case 2:
- is(result, false, "result is false");
- break;
- case 1:
- is(result, null, "result is null");
- break;
- default:
- ok(false, "Unexpected call: " + callbackCount);
- }
-
- --callbackCount;
- if (callbackCount === 0) {
- next();
- }
- },
-
- handleError: function(name) {
- ok(false, "error: " + name);
- }
- };
-
- let lock = SettingsService.createLock();
- let lock1 = SettingsService.createLock();
-
- lock.set("asdf", true, callback, null);
- lock1.get("asdf", callback);
- lock.get("asdf", callback);
- lock.set("asdf", false, callback, null);
- lock.get("asdf", callback);
- lock.set("int", 9, callback, null);
- lock.get("int", callback);
- lock.set("doub", 9.4, callback, null);
- lock.get("doub", callback);
- lock1.get("asdfxxx", callback);
- },
-
- /* Observer tests */
- function() {
- const MOZSETTINGS_CHANGED = "mozsettings-changed";
- const TEST_OBSERVER_KEY = "test.observer.key";
- const TEST_OBSERVER_VALUE = true;
- const TEST_OBSERVER_MESSAGE = "test.observer.message";
-
- var obs = {
- observe: function (subject, topic, data) {
-
- if (topic !== MOZSETTINGS_CHANGED) {
- ok(false, "Event is not mozsettings-changed.");
- return;
- }
- // Data is now stored in subject
- if ("wrappedJSObject" in subject) {
- ok(true, "JS object wrapped into subject");
- subject = subject.wrappedJSObject;
- }
- if (subject["key"] != TEST_OBSERVER_KEY) {
- return;
- }
-
- function checkProp(name, type, value) {
- ok(name in subject, "subject." + name + " is present");
- is(typeof subject[name], type, "subject." + name + " is " + type);
- is(subject[name], value, "subject." + name + " is " + value);
- }
-
- checkProp("key", "string", TEST_OBSERVER_KEY);
- checkProp("value", "boolean", TEST_OBSERVER_VALUE);
- checkProp("isInternalChange", "boolean", true);
-
- Services.obs.removeObserver(this, MOZSETTINGS_CHANGED);
- next();
- }
- };
-
- Services.obs.addObserver(obs, MOZSETTINGS_CHANGED, false);
-
- let lock = SettingsService.createLock();
- lock.set(TEST_OBSERVER_KEY, TEST_OBSERVER_VALUE, null);
- }
-];
-
-function next() {
- let step = tests.shift();
- if (step) {
- try {
- step();
- } catch(e) {
- ok(false, "Test threw: " + e);
- }
- } else {
- SimpleTest.finish();
- }
-}
-
-next();
deleted file mode 100644
--- a/dom/settings/tests/test_settings_service.xul
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
-<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=678695
--->
-<window title="Mozilla Bug 678695"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-
- <!-- test results are displayed in the html:body -->
- <body xmlns="http://www.w3.org/1999/xhtml">
- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=678695"
- target="_blank">Mozilla Bug 678695</a>
- </body>
-
- <script type="application/javascript;version=1.7" src="test_settings_service.js" />
-</window>
deleted file mode 100644
--- a/dom/settings/tests/test_settings_service_callback.js
+++ /dev/null
@@ -1,47 +0,0 @@
-"use strict";
-
-var Cu = Components.utils;
-var Cc = Components.classes;
-var Ci = Components.interfaces;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-SimpleTest.waitForExplicitFinish();
-
-XPCOMUtils.defineLazyServiceGetter(this, "SettingsService",
- "@mozilla.org/settingsService;1",
- "nsISettingsService");
-
-var tests = [
- function () {
- let callback = {
- handle: function() {
- ok(true, "handle called!");
- next();
- },
-
- handleAbort: function(name) {
- ok(false, "error: " + name);
- next();
- }
- }
- let lock = SettingsService.createLock(callback);
- lock.set("xasdf", true, null, null);
- }
-];
-
-function next() {
- let step = tests.shift();
- if (step) {
- try {
- step();
- } catch(e) {
- ok(false, "Test threw: " + e);
- }
- } else {
- SimpleTest.finish();
- }
-}
-
-next();
deleted file mode 100644
--- a/dom/settings/tests/test_settings_service_callback.xul
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
-<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1012214
--->
-<window title="Mozilla Bug 1012214"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-
- <!-- test results are displayed in the html:body -->
- <body xmlns="http://www.w3.org/1999/xhtml">
- <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1012214"
- target="_blank">Mozilla Bug 1012214</a>
- </body>
-
- <script type="application/javascript;version=1.7" src="test_settings_service_callback.js" />
-</window>
deleted file mode 100644
--- a/dom/settings/tests/unit/test_settingsrequestmanager_messages.js
+++ /dev/null
@@ -1,174 +0,0 @@
-"use strict";
-
-var Cu = Components.utils;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
- "@mozilla.org/childprocessmessagemanager;1",
- "nsIMessageSender");
-
-var principal = Services.scriptSecurityManager.getSystemPrincipal();
-var lockID = "{435d2192-4f21-48d4-90b7-285f147a56be}";
-
-// Helper to start the Settings Request Manager
-function startSettingsRequestManager() {
- Cu.import("resource://gre/modules/SettingsRequestManager.jsm");
-}
-
-function handlerHelper(reply, callback, runNext = true) {
- let handler = {
- receiveMessage: function(message) {
- if (message.name === reply) {
- cpmm.removeMessageListener(reply, handler);
- callback(message);
- if (runNext) {
- run_next_test();
- }
- }
- }
- };
- cpmm.addMessageListener(reply, handler);
-}
-
-// Helper function to add a listener, send message and treat the reply
-function addAndSend(msg, reply, callback, payload, runNext = true) {
- handlerHelper(reply, callback, runNext);
- cpmm.sendAsyncMessage(msg, payload, undefined, principal);
-}
-
-function errorHandler(reply, str) {
- let errHandler = function(message) {
- ok(true, str);
- };
-
- handlerHelper(reply, errHandler);
-}
-
-// We need to trigger a Settings:Run message to make the queue progress
-function send_settingsRun() {
- let msg = {lockID: lockID, isServiceLock: true};
- cpmm.sendAsyncMessage("Settings:Run", msg, undefined, principal);
-}
-
-function kill_child() {
- let msg = {lockID: lockID, isServiceLock: true};
- cpmm.sendAsyncMessage("child-process-shutdown", msg, undefined, principal);
-}
-
-function run_test() {
- do_get_profile();
- startSettingsRequestManager();
- run_next_test();
-}
-
-add_test(function test_createLock() {
- let msg = {lockID: lockID, isServiceLock: true};
- cpmm.sendAsyncMessage("Settings:CreateLock", msg, undefined, principal);
- cpmm.sendAsyncMessage(
- "Settings:RegisterForMessages", undefined, undefined, principal);
- ok(true);
- run_next_test();
-});
-
-add_test(function test_get_empty() {
- let requestID = 10;
- let msgReply = "Settings:Get:OK";
- let msgHandler = function(message) {
- equal(requestID, message.data.requestID);
- equal(lockID, message.data.lockID);
- ok(Object.keys(message.data.settings).length >= 0);
- };
-
- errorHandler("Settings:Get:KO", "Settings GET failed");
-
- addAndSend("Settings:Get", msgReply, msgHandler, {
- requestID: requestID,
- lockID: lockID,
- name: "language.current"
- });
-
- send_settingsRun();
-});
-
-add_test(function test_set_get_nonempty() {
- let settings = { "language.current": "fr-FR:XPC" };
- let requestIDSet = 20;
- let msgReplySet = "Settings:Set:OK";
- let msgHandlerSet = function(message) {
- equal(requestIDSet, message.data.requestID);
- equal(lockID, message.data.lockID);
- };
-
- errorHandler("Settings:Set:KO", "Settings SET failed");
-
- addAndSend("Settings:Set", msgReplySet, msgHandlerSet, {
- requestID: requestIDSet,
- lockID: lockID,
- settings: settings
- }, false);
-
- let requestIDGet = 25;
- let msgReplyGet = "Settings:Get:OK";
- let msgHandlerGet = function(message) {
- equal(requestIDGet, message.data.requestID);
- equal(lockID, message.data.lockID);
- for(let p in settings) {
- equal(settings[p], message.data.settings[p]);
- }
- };
-
- addAndSend("Settings:Get", msgReplyGet, msgHandlerGet, {
- requestID: requestIDGet,
- lockID: lockID,
- name: Object.keys(settings)[0]
- });
-
- // Set and Get have been push into the queue, let's run
- send_settingsRun();
-});
-
-// This test exposes bug 1076597 behavior
-add_test(function test_wait_for_finalize() {
- let settings = { "language.current": "en-US:XPC" };
- let requestIDSet = 30;
- let msgReplySet = "Settings:Set:OK";
- let msgHandlerSet = function(message) {
- equal(requestIDSet, message.data.requestID);
- equal(lockID, message.data.lockID);
- };
-
- errorHandler("Settings:Set:KO", "Settings SET failed");
-
- addAndSend("Settings:Set", msgReplySet, msgHandlerSet, {
- requestID: requestIDSet,
- lockID: lockID,
- settings: settings
- }, false);
-
- let requestIDGet = 35;
- let msgReplyGet = "Settings:Get:OK";
- let msgHandlerGet = function(message) {
- equal(requestIDGet, message.data.requestID);
- equal(lockID, message.data.lockID);
- for(let p in settings) {
- equal(settings[p], message.data.settings[p]);
- }
- };
-
- errorHandler("Settings:Get:KO", "Settings GET failed");
-
- addAndSend("Settings:Get", msgReplyGet, msgHandlerGet, {
- requestID: requestIDGet,
- lockID: lockID,
- name: Object.keys(settings)[0]
- });
-
- // We simulate a child death, which will force previous requests to be set
- // into finalize state
- kill_child();
-
- // Then when we issue Settings:Run, those finalized should be triggered
- send_settingsRun();
-});
deleted file mode 100644
--- a/dom/settings/tests/unit/xpcshell.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[DEFAULT]
-head =
-tail =
-
-[test_settingsrequestmanager_messages.js]
-skip-if = (buildapp != 'b2g')
--- a/dom/system/NetworkGeolocationProvider.js
+++ b/dom/system/NetworkGeolocationProvider.js
@@ -7,19 +7,16 @@
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");
const Ci = Components.interfaces;
const Cc = Components.classes;
const Cu = Components.utils;
const POSITION_UNAVAILABLE = Ci.nsIDOMGeoPositionError.POSITION_UNAVAILABLE;
-const SETTINGS_DEBUG_ENABLED = "geolocation.debugging.enabled";
-const SETTINGS_CHANGED_TOPIC = "mozsettings-changed";
-const SETTINGS_WIFI_ENABLED = "wifi.enabled";
var gLoggingEnabled = false;
/*
The gLocationRequestTimeout controls how long we wait on receiving an update
from the Wifi subsystem. If this timer fires, we believe the Wifi scan has
had a problem and we no longer can use Wifi to position the user this time
around (we will continue to be hopeful that Wifi will recover).
@@ -250,34 +247,16 @@ function WifiGeoPositionProvider() {
WifiGeoPositionProvider.prototype = {
classID: Components.ID("{77DA64D3-7458-4920-9491-86CC9914F904}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIGeolocationProvider,
Ci.nsIWifiListener,
Ci.nsITimerCallback,
Ci.nsIObserver]),
listener: null,
- observe: function(aSubject, aTopic, aData) {
- if (aTopic != SETTINGS_CHANGED_TOPIC) {
- return;
- }
-
- try {
- if ("wrappedJSObject" in aSubject) {
- aSubject = aSubject.wrappedJSObject;
- }
- if (aSubject.key == SETTINGS_DEBUG_ENABLED) {
- gLoggingEnabled = aSubject.value;
- } else if (aSubject.key == SETTINGS_WIFI_ENABLED) {
- gWifiScanningEnabled = aSubject.value;
- }
- } catch (e) {
- }
- },
-
resetTimer: function() {
if (this.timer) {
this.timer.cancel();
this.timer = null;
}
// wifi thread triggers WifiGeoPositionProvider to proceed, with no wifi, do manual timeout
this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
this.timer.initWithCallback(this,
@@ -286,47 +265,16 @@ WifiGeoPositionProvider.prototype = {
},
startup: function() {
if (this.started)
return;
this.started = true;
let self = this;
- let settingsCallback = {
- handle: function(name, result) {
- // Stop the B2G UI setting from overriding the js prefs setting, and turning off logging
- // If gLoggingEnabled is already on during startup, that means it was set in js prefs.
- if (name == SETTINGS_DEBUG_ENABLED && !gLoggingEnabled) {
- gLoggingEnabled = result;
- } else if (name == SETTINGS_WIFI_ENABLED) {
- gWifiScanningEnabled = result;
- if (self.wifiService) {
- self.wifiService.stopWatching(self);
- }
- if (gWifiScanningEnabled) {
- self.wifiService = Cc["@mozilla.org/wifi/monitor;1"].getService(Ci.nsIWifiMonitor);
- self.wifiService.startWatching(self);
- }
- }
- },
-
- handleError: function(message) {
- gLoggingEnabled = false;
- LOG("settings callback threw an exception, dropping");
- }
- };
-
- Services.obs.addObserver(this, SETTINGS_CHANGED_TOPIC, false);
- let settingsService = Cc["@mozilla.org/settingsService;1"];
- if (settingsService) {
- let settings = settingsService.getService(Ci.nsISettingsService);
- settings.createLock().get(SETTINGS_WIFI_ENABLED, settingsCallback);
- settings.createLock().get(SETTINGS_DEBUG_ENABLED, settingsCallback);
- }
if (gWifiScanningEnabled && Cc["@mozilla.org/wifi/monitor;1"]) {
if (this.wifiService) {
this.wifiService.stopWatching(this);
}
this.wifiService = Cc["@mozilla.org/wifi/monitor;1"].getService(Ci.nsIWifiMonitor);
this.wifiService.startWatching(this);
}
@@ -354,18 +302,16 @@ WifiGeoPositionProvider.prototype = {
this.timer = null;
}
if(this.wifiService) {
this.wifiService.stopWatching(this);
this.wifiService = null;
}
- Services.obs.removeObserver(this, SETTINGS_CHANGED_TOPIC);
-
this.listener = null;
this.started = false;
},
setHighAccuracy: function(enable) {
},
onChange: function(accessPoints) {
--- a/dom/tests/mochitest/general/test_interfaces.html
+++ b/dom/tests/mochitest/general/test_interfaces.html
@@ -863,18 +863,16 @@ var interfaceNamesInGlobalScope =
"ServiceWorker",
// IMPORTANT: Do not change this list without review from a DOM peer!
"ServiceWorkerContainer",
// IMPORTANT: Do not change this list without review from a DOM peer!
"ServiceWorkerMessageEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
"ServiceWorkerRegistration",
// IMPORTANT: Do not change this list without review from a DOM peer!
- "SettingsLock",
-// IMPORTANT: Do not change this list without review from a DOM peer!
"ShadowRoot", // Bogus, but the test harness forces it on. See bug 1159768.
// IMPORTANT: Do not change this list without review from a DOM peer!
"SharedWorker",
// IMPORTANT: Do not change this list without review from a DOM peer!
"SimpleGestureEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SimpleTest", xbl: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
deleted file mode 100644
--- a/dom/webidl/MozSettingsEvent.webidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/.
- */
-
-[Constructor(DOMString type, optional MozSettingsEventInit eventInitDict),
- ChromeOnly]
-interface MozSettingsEvent : Event
-{
- readonly attribute DOMString? settingName;
- readonly attribute any settingValue;
-};
-
-dictionary MozSettingsEventInit : EventInit
-{
- DOMString settingName = "";
- any settingValue = null;
-};
deleted file mode 100644
--- a/dom/webidl/MozSettingsTransactionEvent.webidl
+++ /dev/null
@@ -1,17 +0,0 @@
-/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/.
- */
-
-[Constructor(DOMString type, optional MozSettingsTransactionEventInit eventInitDict),
- ChromeOnly]
-interface MozSettingsTransactionEvent : Event
-{
- readonly attribute DOMString? error;
-};
-
-dictionary MozSettingsTransactionEventInit : EventInit
-{
- DOMString error = "";
-};
deleted file mode 100644
--- a/dom/webidl/SettingsManager.webidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/.
- */
-
-[JSImplementation="@mozilla.org/settingsLock;1",
- Pref="dom.mozSettings.enabled"]
-interface SettingsLock : EventTarget {
- // Whether this lock is invalid
- readonly attribute boolean closed;
-
- // Contains a JSON object with name/value pairs to be set.
- DOMRequest set(object settings);
-
- // Result contains the value of the setting.
- DOMRequest get(DOMString name);
-
- DOMRequest clear();
- attribute EventHandler onsettingstransactionsuccess;
- attribute EventHandler onsettingstransactionfailure;
-};
-
-dictionary SettingChange {
- DOMString settingName;
- DOMString settingValue;
-};
-
-callback SettingChangeCallback = void (SettingChange setting);
-
-[JSImplementation="@mozilla.org/settingsManager;1",
- NavigatorProperty="mozSettings",
- Pref="dom.mozSettings.enabled",
- ChromeOnly]
-interface SettingsManager : EventTarget {
- SettingsLock createLock();
-
- void addObserver(DOMString name, SettingChangeCallback callback);
- void removeObserver(DOMString name, SettingChangeCallback callback);
-
- attribute EventHandler onsettingchange;
-};
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -393,17 +393,16 @@ WEBIDL_FILES = [
'ScrollAreaEvent.webidl',
'ScrollBoxObject.webidl',
'Selection.webidl',
'ServiceWorker.webidl',
'ServiceWorkerContainer.webidl',
'ServiceWorkerGlobalScope.webidl',
'ServiceWorkerRegistration.webidl',
'SettingChangeNotification.webidl',
- 'SettingsManager.webidl',
'ShadowRoot.webidl',
'SharedWorker.webidl',
'SharedWorkerGlobalScope.webidl',
'SimpleGestureEvent.webidl',
'SocketCommon.webidl',
'SourceBuffer.webidl',
'SourceBufferList.webidl',
'StereoPannerNode.webidl',
@@ -641,17 +640,16 @@ if CONFIG['MOZ_WEBSPEECH']:
]
WEBIDL_FILES += [
'CloseEvent.webidl',
'CustomEvent.webidl',
'DeviceOrientationEvent.webidl',
'DeviceStorageChangeEvent.webidl',
'HashChangeEvent.webidl',
- 'MozSettingsEvent.webidl',
'PageTransitionEvent.webidl',
'PopStateEvent.webidl',
'PopupBlockedEvent.webidl',
'ProgressEvent.webidl',
'RecordErrorEvent.webidl',
'StyleRuleChangeEvent.webidl',
'StyleSheetApplicableStateChangeEvent.webidl',
'StyleSheetChangeEvent.webidl',
@@ -694,18 +692,16 @@ GENERATED_EVENTS_WEBIDL_FILES = [
'GamepadButtonEvent.webidl',
'GamepadEvent.webidl',
'GroupedHistoryEvent.webidl',
'HashChangeEvent.webidl',
'HiddenPluginEvent.webidl',
'ImageCaptureErrorEvent.webidl',
'MediaStreamEvent.webidl',
'MediaStreamTrackEvent.webidl',
- 'MozSettingsEvent.webidl',
- 'MozSettingsTransactionEvent.webidl',
'OfflineAudioCompletionEvent.webidl',
'PageTransitionEvent.webidl',
'PerformanceEntryEvent.webidl',
'PluginCrashedEvent.webidl',
'PopStateEvent.webidl',
'PopupBlockedEvent.webidl',
'PresentationConnectionAvailableEvent.webidl',
'PresentationConnectionCloseEvent.webidl',
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -127,17 +127,16 @@
@BINPATH@/components/dom_json.xpt
@BINPATH@/components/dom_power.xpt
#ifdef MOZ_ANDROID_GCM
@BINPATH@/components/dom_push.xpt
#endif
@BINPATH@/components/dom_quota.xpt
@BINPATH@/components/dom_range.xpt
@BINPATH@/components/dom_security.xpt
-@BINPATH@/components/dom_settings.xpt
@BINPATH@/components/dom_sidebar.xpt
@BINPATH@/components/dom_mobilemessage.xpt
@BINPATH@/components/dom_storage.xpt
@BINPATH@/components/dom_stylesheets.xpt
@BINPATH@/components/dom_system.xpt
@BINPATH@/components/dom_traversal.xpt
@BINPATH@/components/dom_tv.xpt
#ifdef MOZ_WEBSPEECH
@@ -265,18 +264,16 @@
@BINPATH@/components/PhoneNumberService.manifest
@BINPATH@/components/NotificationStorage.js
@BINPATH@/components/NotificationStorage.manifest
#ifdef MOZ_ANDROID_GCM
@BINPATH@/components/Push.js
@BINPATH@/components/Push.manifest
@BINPATH@/components/PushComponents.js
#endif
-@BINPATH@/components/SettingsManager.js
-@BINPATH@/components/SettingsManager.manifest
@BINPATH@/components/BrowserElementParent.manifest
@BINPATH@/components/BrowserElementParent.js
@BINPATH@/components/FeedProcessor.manifest
@BINPATH@/components/FeedProcessor.js
@BINPATH@/components/WellKnownOpportunisticUtils.js
@BINPATH@/components/WellKnownOpportunisticUtils.manifest
@BINPATH@/components/nsDNSServiceDiscovery.manifest
@BINPATH@/components/nsDNSServiceDiscovery.js
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -4849,19 +4849,16 @@ pref("dom.push.pingInterval", 1800000);
// How long before we timeout
pref("dom.push.requestTimeout", 10000);
// WebPush prefs:
pref("dom.push.http2.reset_retry_count_after_ms", 60000);
pref("dom.push.http2.maxRetries", 2);
pref("dom.push.http2.retryInterval", 5000);
-// WebSettings
-pref("dom.mozSettings.enabled", false);
-
// W3C touch events
// 0 - disabled, 1 - enabled, 2 - autodetect
// Autodetection is currently only supported on Windows and GTK3
#if defined(XP_MACOSX)
pref("dom.w3c_touch_events.enabled", 0);
#else
pref("dom.w3c_touch_events.enabled", 2);
#endif
@@ -5290,33 +5287,16 @@ pref("dom.presentation.session_transport
// following pref, when turned on, disables this behavior. See bug 1188425.
pref("intl.allow-insecure-text-input", false);
#endif
#endif // XP_MACOSX
// Enable meta-viewport support in remote APZ-enabled frames.
pref("dom.meta-viewport.enabled", false);
-// MozSettings debugging prefs for each component
-pref("dom.mozSettings.SettingsDB.debug.enabled", false);
-pref("dom.mozSettings.SettingsManager.debug.enabled", false);
-pref("dom.mozSettings.SettingsRequestManager.debug.enabled", false);
-pref("dom.mozSettings.SettingsService.debug.enabled", false);
-
-// MozSettings verbose mode to track everything
-pref("dom.mozSettings.SettingsDB.verbose.enabled", false);
-pref("dom.mozSettings.SettingsManager.verbose.enabled", false);
-pref("dom.mozSettings.SettingsRequestManager.verbose.enabled", false);
-pref("dom.mozSettings.SettingsService.verbose.enabled", false);
-
-// Controlling whether we want to allow forcing some Settings
-// IndexedDB transactions to be opened as readonly or keep everything as
-// readwrite.
-pref("dom.mozSettings.allowForceReadOnly", false);
-
// The interval at which to check for slow running addons
#ifdef NIGHTLY_BUILD
pref("browser.addon-watch.interval", 15000);
#else
pref("browser.addon-watch.interval", -1);
#endif
pref("browser.addon-watch.ignore", "[\"mochikit@mozilla.org\",\"special-powers@mozilla.org\",\"fxdevtools-adapters@mozilla.org\",\"fx-devtools\"]");
--- a/testing/profiles/prefs_general.js
+++ b/testing/profiles/prefs_general.js
@@ -188,22 +188,16 @@ user_pref("layout.css.shape-outside.enab
// Disable spammy layout warnings because they pollute test logs
user_pref("layout.spammy_warnings.enabled", false);
// Enable Media Source Extensions for testing
user_pref("media.mediasource.mp4.enabled", true);
user_pref("media.mediasource.webm.enabled", true);
-// Enable mozContacts
-user_pref("dom.mozContacts.enabled", true);
-
-// Enable mozSettings
-user_pref("dom.mozSettings.enabled", true);
-
// Make sure the disk cache doesn't get auto disabled
user_pref("network.http.bypass-cachelock-threshold", 200000);
// Enable Gamepad
user_pref("dom.gamepad.enabled", true);
user_pref("dom.gamepad.non_standard_events.enabled", true);
// Always use network provider for geolocation tests
--- a/tools/lint/eslint/modules.json
+++ b/tools/lint/eslint/modules.json
@@ -190,17 +190,16 @@
"resource.js": ["AsyncResource", "Resource"],
"responsivedesign.jsm": ["ResponsiveUIManager"],
"rest.js": ["RESTRequest", "RESTResponse", "TokenAuthenticatedRESTRequest", "SyncStorageRequest"],
"rotaryengine.js": ["RotaryEngine", "RotaryRecord", "RotaryStore", "RotaryTracker"],
"RTCStatsReport.jsm": ["convertToRTCStatsReport"],
"scratchpad-manager.jsm": ["ScratchpadManager"],
"server.js": ["MarionetteServer"],
"service.js": ["Service"],
- "SettingsDB.jsm": ["SettingsDB", "SETTINGSDB_NAME", "SETTINGSSTORE_NAME"],
"SharedPromptUtils.jsm": ["PromptUtils", "EnableDelayHelper"],
"ShutdownLeaksCollector.jsm": ["ContentCollector"],
"SignInToWebsite.jsm": ["SignInToWebsiteController"],
"Social.jsm": ["Social", "OpenGraphBuilder", "DynamicResizeWatcher", "sizeSocialPanelToContent"],
"SpecialPowersObserver.jsm": ["SpecialPowersObserver", "SpecialPowersObserverFactory"],
"stack.js": ["findCallerFrame"],
"StateMachineHelper.jsm": ["State", "CommandType"],
"status.js": ["Status"],
@@ -225,17 +224,17 @@
"ToolboxProcess.jsm": ["BrowserToolboxProcess"],
"tps.jsm": ["ACTIONS", "TPS"],
"Translation.jsm": ["Translation", "TranslationTelemetry"],
"Traversal.jsm": ["TraversalRules", "TraversalHelper"],
"UpdateTelemetry.jsm": ["AUSTLMY"],
"userapi.js": ["UserAPI10Client"],
"util.js": ["getChromeWindow", "XPCOMUtils", "Services", "Utils", "Async", "Svc", "Str"],
"utils.js": ["applicationName", "assert", "Copy", "getBrowserObject", "getChromeWindow", "getWindows", "getWindowByTitle", "getWindowByType", "getWindowId", "getMethodInWindows", "getPreference", "saveDataURL", "setPreference", "sleep", "startTimer", "stopTimer", "takeScreenshot", "unwrapNode", "waitFor", "btoa", "encryptPayload", "isConfiguredWithLegacyIdentity", "ensureLegacyIdentityManager", "setBasicCredentials", "makeIdentityConfig", "makeFxAccountsInternalMock", "configureFxAccountIdentity", "configureIdentity", "SyncTestingInfrastructure", "waitForZeroTimer", "Promise", "add_identity_test", "MockFxaStorageManager", "AccountState", "sumHistogram", "CommonUtils", "CryptoUtils", "TestingUtils"],
- "Utils.jsm": ["Utils", "Logger", "PivotContext", "PrefCache", "SettingCache"],
+ "Utils.jsm": ["Utils", "Logger", "PivotContext", "PrefCache"],
"VariablesView.jsm": ["VariablesView", "escapeHTML"],
"VariablesViewController.jsm": ["VariablesViewController", "StackFrameUtils"],
"version.jsm": ["VERSION"],
"vtt.jsm": ["WebVTT"],
"WebChannel.jsm": ["WebChannel", "WebChannelBroker"],
"WindowDraggingUtils.jsm": ["WindowDraggingElement"],
"windows.js": ["init", "map"],
"windows.jsm": ["BrowserWindows"],