Bug 1463750 - Move RemoteSettings to services/settings/ r=mgoodwin draft
authorMathieu Leplatre <mathieu@mozilla.com>
Thu, 24 May 2018 15:32:40 +0200
changeset 803508 1940db50b675c935ff3a01b4e6ec99b0fc98df00
parent 802102 763f30c3421233a45ef9e67a695c5c241a2c8a3a
push id112123
push usermleplatre@mozilla.com
push dateMon, 04 Jun 2018 10:05:26 +0000
reviewersmgoodwin
bugs1463750
milestone62.0a1
Bug 1463750 - Move RemoteSettings to services/settings/ r=mgoodwin MozReview-Commit-ID: 7IwUysPBHZu
browser/installer/package-manifest.in
mobile/android/installer/package-manifest.in
services/common/blocklist-clients.js
services/common/docs/RemoteSettings.rst
services/common/moz.build
services/common/remote-settings.js
services/common/tests/unit/head_global.js
services/common/tests/unit/test_blocklist_targetapp_filter.js
services/common/tests/unit/test_remote_settings.js
services/common/tests/unit/test_remote_settings_jexl_filters.js
services/common/tests/unit/test_remote_settings_poll.js
services/common/tests/unit/xpcshell.ini
services/settings/moz.build
services/settings/remote-settings.js
services/settings/servicesSettings.manifest
services/settings/test/unit/.eslintrc.js
services/settings/test/unit/test_remote_settings.js
services/settings/test/unit/test_remote_settings_jexl_filters.js
services/settings/test/unit/test_remote_settings_poll.js
services/settings/test/unit/xpcshell.ini
toolkit/mozapps/extensions/Blocklist.jsm
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -294,16 +294,17 @@
 @RESPATH@/components/nsPrompter.js
 @RESPATH@/components/SyncComponents.manifest
 @RESPATH@/components/Weave.js
 @RESPATH@/components/FxAccountsComponents.manifest
 @RESPATH@/components/FxAccountsPush.js
 @RESPATH@/components/CaptivePortalDetectComponents.manifest
 @RESPATH@/components/captivedetect.js
 @RESPATH@/components/servicesComponents.manifest
+@RESPATH@/components/servicesSettings.manifest
 @RESPATH@/components/cryptoComponents.manifest
 @RESPATH@/components/TelemetryStartup.js
 @RESPATH@/components/TelemetryStartup.manifest
 @RESPATH@/components/XULStore.js
 @RESPATH@/components/XULStore.manifest
 @RESPATH@/components/recording-cmdline.js
 @RESPATH@/components/recording-cmdline.manifest
 @RESPATH@/components/htmlMenuBuilder.js
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -179,16 +179,17 @@
 @BINPATH@/components/nsFormAutoComplete.js
 @BINPATH@/components/FormHistoryStartup.js
 @BINPATH@/components/nsInputListAutoComplete.js
 @BINPATH@/components/contentAreaDropListener.manifest
 @BINPATH@/components/contentAreaDropListener.js
 @BINPATH@/components/nsINIProcessor.manifest
 @BINPATH@/components/nsINIProcessor.js
 @BINPATH@/components/servicesComponents.manifest
+@BINPATH@/components/servicesSettings.manifest
 
 #ifndef MOZ_GECKOVIEW_JAR
 @BINPATH@/components/TelemetryStartup.js
 @BINPATH@/components/TelemetryStartup.manifest
 #endif
 
 @BINPATH@/components/XULStore.js
 @BINPATH@/components/XULStore.manifest
--- a/services/common/blocklist-clients.js
+++ b/services/common/blocklist-clients.js
@@ -6,18 +6,18 @@
 
 var EXPORTED_SYMBOLS = [
   "initialize",
 ];
 
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm", {});
 
-ChromeUtils.defineModuleGetter(this, "RemoteSettings", "resource://services-common/remote-settings.js");
-ChromeUtils.defineModuleGetter(this, "jexlFilterFunc", "resource://services-common/remote-settings.js");
+ChromeUtils.defineModuleGetter(this, "RemoteSettings", "resource://services-settings/remote-settings.js");
+ChromeUtils.defineModuleGetter(this, "jexlFilterFunc", "resource://services-settings/remote-settings.js");
 
 const PREF_BLOCKLIST_BUCKET                  = "services.blocklist.bucket";
 const PREF_BLOCKLIST_ONECRL_COLLECTION       = "services.blocklist.onecrl.collection";
 const PREF_BLOCKLIST_ONECRL_CHECKED_SECONDS  = "services.blocklist.onecrl.checked";
 const PREF_BLOCKLIST_ONECRL_SIGNER           = "services.blocklist.onecrl.signer";
 const PREF_BLOCKLIST_ADDONS_COLLECTION       = "services.blocklist.addons.collection";
 const PREF_BLOCKLIST_ADDONS_CHECKED_SECONDS  = "services.blocklist.addons.checked";
 const PREF_BLOCKLIST_ADDONS_SIGNER           = "services.blocklist.addons.signer";
--- a/services/common/docs/RemoteSettings.rst
+++ b/services/common/docs/RemoteSettings.rst
@@ -1,25 +1,25 @@
 .. _services/remotesettings:
 
 ===============
 Remote Settings
 ===============
 
-The `remote-settings.js <https://dxr.mozilla.org/mozilla-central/source/services/common/remote-settings.js>`_ module offers the ability to fetch remote settings that are kept in sync with Mozilla servers.
+The `remote-settings.js <https://dxr.mozilla.org/mozilla-central/source/services/settings/remote-settings.js>`_ module offers the ability to fetch remote settings that are kept in sync with Mozilla servers.
 
 
 Usage
 =====
 
 The ``get()`` method returns the list of entries for a specific key. Each entry can have arbitrary attributes, and can only be modified on the server.
 
 .. code-block:: js
 
-    const { RemoteSettings } = ChromeUtils.import("resource://services-common/remote-settings.js", {});
+    const { RemoteSettings } = ChromeUtils.import("resource://services-settings/remote-settings.js", {});
 
     const data = await RemoteSettings("a-key").get();
 
     /*
       data == [
         {label: "Yahoo",  enabled: true,  weight: 10, id: "d0782d8d", last_modified: 1522764475905},
         {label: "Google", enabled: true,  weight: 20, id: "8883955f", last_modified: 1521539068414},
         {label: "Ecosia", enabled: false, weight: 5,  id: "337c865d", last_modified: 1520527480321},
--- a/services/common/moz.build
+++ b/services/common/moz.build
@@ -16,17 +16,16 @@ EXTRA_COMPONENTS += [
 EXTRA_JS_MODULES['services-common'] += [
     'async.js',
     'blocklist-clients.js',
     'kinto-http-client.js',
     'kinto-offline-client.js',
     'kinto-storage-adapter.js',
     'logmanager.js',
     'observers.js',
-    'remote-settings.js',
     'rest.js',
     'uptake-telemetry.js',
     'utils.js',
 ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'android':
     EXTRA_JS_MODULES['services-common'] += [
         'hawkclient.js',
--- a/services/common/tests/unit/head_global.js
+++ b/services/common/tests/unit/head_global.js
@@ -15,15 +15,15 @@ updateAppInfo({
   platformVersion: "",
 });
 
 function addResourceAlias() {
   ChromeUtils.import("resource://gre/modules/Services.jsm");
   const handler = Services.io.getProtocolHandler("resource")
                   .QueryInterface(Ci.nsIResProtocolHandler);
 
-  let modules = ["common", "crypto"];
+  let modules = ["common", "crypto", "settings"];
   for (let module of modules) {
     let uri = Services.io.newURI("resource://gre/modules/services-" + module + "/");
     handler.setSubstitution("services-" + module, uri);
   }
 }
 addResourceAlias();
--- a/services/common/tests/unit/test_blocklist_targetapp_filter.js
+++ b/services/common/tests/unit/test_blocklist_targetapp_filter.js
@@ -1,10 +1,10 @@
 const BlocklistClients = ChromeUtils.import("resource://services-common/blocklist-clients.js", {});
-const { RemoteSettings } = ChromeUtils.import("resource://services-common/remote-settings.js", {});
+const { RemoteSettings } = ChromeUtils.import("resource://services-settings/remote-settings.js", {});
 
 const APP_ID = "xpcshell@tests.mozilla.org";
 const TOOLKIT_ID = "toolkit@mozilla.org";
 
 let client;
 
 async function clear_state() {
   // Clear local DB.
--- a/services/common/tests/unit/xpcshell.ini
+++ b/services/common/tests/unit/xpcshell.ini
@@ -13,22 +13,16 @@ support-files =
 skip-if = appname == "thunderbird"
 tags = blocklist
 [test_blocklist_clients.js]
 tags = blocklist
 [test_blocklist_targetapp_filter.js]
 tags = blocklist
 [test_blocklist_pinning.js]
 tags = blocklist
-[test_remote_settings.js]
-tags = remote-settings blocklist
-[test_remote_settings_poll.js]
-tags = remote-settings blocklist
-[test_remote_settings_jexl_filters.js]
-tags = remote-settings
 
 [test_kinto.js]
 tags = blocklist
 [test_blocklist_signatures.js]
 tags = remote-settings blocklist
 [test_storage_adapter.js]
 tags = remote-settingsblocklist
 [test_storage_adapter_shutdown.js]
--- a/services/settings/moz.build
+++ b/services/settings/moz.build
@@ -3,8 +3,18 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 with Files('**'):
     BUG_COMPONENT = ('Firefox', 'Remote Settings Client')
 
 DIRS += [
     'dumps',
 ]
+
+EXTRA_COMPONENTS += [
+    'servicesSettings.manifest',
+]
+
+EXTRA_JS_MODULES['services-settings'] += [
+    'remote-settings.js',
+]
+
+XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
rename from services/common/remote-settings.js
rename to services/settings/remote-settings.js
--- a/services/common/remote-settings.js
+++ b/services/settings/remote-settings.js
@@ -270,18 +270,18 @@ class RemoteSettingsClient {
     const { filters = {}, order } = options;
     const c = await this.openCollection();
 
     const timestamp = await c.db.getLastModified();
     // If the local database was never synchronized, then we attempt to load
     // a packaged JSON dump.
     if (timestamp == null) {
       try {
-        const { data } = await this._loadDumpFile();
-        await c.loadDump(data);
+         const { data } = await this._loadDumpFile();
+         await c.loadDump(data);
       } catch (e) {
         // Report but return an empty list since there will be no data anyway.
         Cu.reportError(e);
         return [];
       }
     }
 
     const { data } = await c.list({ filters, order });
new file mode 100644
--- /dev/null
+++ b/services/settings/servicesSettings.manifest
@@ -0,0 +1,2 @@
+# Register resource aliases
+resource services-settings resource://gre/modules/services-settings/
new file mode 100644
--- /dev/null
+++ b/services/settings/test/unit/.eslintrc.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = {
+  "extends": [
+    "plugin:mozilla/xpcshell-test"
+  ]
+};
rename from services/common/tests/unit/test_remote_settings.js
rename to services/settings/test/unit/test_remote_settings.js
--- a/services/common/tests/unit/test_remote_settings.js
+++ b/services/settings/test/unit/test_remote_settings.js
@@ -1,14 +1,16 @@
+/* import-globals-from ../../../common/tests/unit/head_helpers.js */
+
 const { Constructor: CC } = Components;
 
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://testing-common/httpd.js");
 
-const { RemoteSettings } = ChromeUtils.import("resource://services-common/remote-settings.js", {});
+const { RemoteSettings } = ChromeUtils.import("resource://services-settings/remote-settings.js", {});
 const { UptakeTelemetry } = ChromeUtils.import("resource://services-common/uptake-telemetry.js", {});
 
 const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1",
   "nsIBinaryInputStream", "setInputStream");
 
 let server;
 let client;
 
rename from services/common/tests/unit/test_remote_settings_jexl_filters.js
rename to services/settings/test/unit/test_remote_settings_jexl_filters.js
--- a/services/common/tests/unit/test_remote_settings_jexl_filters.js
+++ b/services/settings/test/unit/test_remote_settings_jexl_filters.js
@@ -1,9 +1,10 @@
-const { RemoteSettings } = ChromeUtils.import("resource://services-common/remote-settings.js", {});
+ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { RemoteSettings } = ChromeUtils.import("resource://services-settings/remote-settings.js", {});
 
 let client;
 
 async function createRecords(records) {
   const collection = await client.openCollection();
   await collection.clear();
   for (const record of records) {
     await collection.create(record);
rename from services/common/tests/unit/test_remote_settings_poll.js
rename to services/settings/test/unit/test_remote_settings_poll.js
--- a/services/common/tests/unit/test_remote_settings_poll.js
+++ b/services/settings/test/unit/test_remote_settings_poll.js
@@ -1,11 +1,15 @@
+/* import-globals-from ../../../common/tests/unit/head_helpers.js */
+
+ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://testing-common/httpd.js");
+
 const { UptakeTelemetry } = ChromeUtils.import("resource://services-common/uptake-telemetry.js", {});
-const { RemoteSettings } = ChromeUtils.import("resource://services-common/remote-settings.js", {});
+const { RemoteSettings } = ChromeUtils.import("resource://services-settings/remote-settings.js", {});
 
 var server;
 
 const PREF_SETTINGS_SERVER = "services.settings.server";
 const PREF_SETTINGS_SERVER_BACKOFF = "services.settings.server.backoff";
 const PREF_LAST_UPDATE = "services.settings.last_update_seconds";
 const PREF_LAST_ETAG = "services.settings.last_etag";
 const PREF_CLOCK_SKEW_SECONDS = "services.settings.clock_skew_seconds";
new file mode 100644
--- /dev/null
+++ b/services/settings/test/unit/xpcshell.ini
@@ -0,0 +1,8 @@
+[DEFAULT]
+head = ../../../common/tests/unit/head_global.js ../../../common/tests/unit/head_helpers.js
+firefox-appdir = browser
+tags = remote-settings
+
+[test_remote_settings.js]
+[test_remote_settings_poll.js]
+[test_remote_settings_jexl_filters.js]
--- a/toolkit/mozapps/extensions/Blocklist.jsm
+++ b/toolkit/mozapps/extensions/Blocklist.jsm
@@ -35,17 +35,17 @@ ChromeUtils.defineModuleGetter(this, "Se
 // See Bug 1257565 and Bug 1252456.
 const BlocklistClients = {};
 ChromeUtils.defineModuleGetter(BlocklistClients, "initialize",
                                "resource://services-common/blocklist-clients.js");
 XPCOMUtils.defineLazyGetter(this, "RemoteSettings", function() {
   // Instantiate blocklist clients.
   BlocklistClients.initialize();
   // Import RemoteSettings for ``pollChanges()``
-  const { RemoteSettings } = ChromeUtils.import("resource://services-common/remote-settings.js", {});
+  const { RemoteSettings } = ChromeUtils.import("resource://services-settings/remote-settings.js", {});
   return RemoteSettings;
 });
 
 const TOOLKIT_ID                      = "toolkit@mozilla.org";
 const KEY_PROFILEDIR                  = "ProfD";
 const KEY_APPDIR                      = "XCurProcD";
 const FILE_BLOCKLIST                  = "blocklist.xml";
 const PREF_BLOCKLIST_LASTUPDATETIME   = "app.update.lastUpdateTime.blocklist-background-update-timer";