Bug 1622514 - Move OSKeyStore.jsm into toolkit/modules. r=jaws
authorSam Foster <sfoster@mozilla.com>
Wed, 25 Mar 2020 08:21:24 +0000
changeset 520413 8171ab607533955aa299ece9437000afc96d90b8
parent 520412 5ab5d42214b1eebab36360184589cfd84749dd60
child 520414 1447f741ffd0cdc0758bed73cfbe24aea7ed1c71
push id37249
push userdvarga@mozilla.com
push dateWed, 25 Mar 2020 21:39:06 +0000
treeherdermozilla-central@b3c3f7d0f044 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjaws
bugs1622514
milestone76.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1622514 - Move OSKeyStore.jsm into toolkit/modules. r=jaws Differential Revision: https://phabricator.services.mozilla.com/D68133
browser/components/aboutlogins/AboutLoginsParent.jsm
browser/components/aboutlogins/tests/browser/browser_masterPassword.js
browser/components/payments/content/paymentDialogWrapper.js
browser/components/preferences/in-content/privacy.js
browser/components/preferences/in-content/tests/browser_masterpassword.js
browser/extensions/formautofill/FormAutofillParent.jsm
browser/extensions/formautofill/FormAutofillStorage.jsm
browser/extensions/formautofill/FormAutofillUtils.jsm
browser/extensions/formautofill/content/manageDialog.js
browser/extensions/formautofill/test/browser/head.js
browser/extensions/formautofill/test/unit/test_autofillFormFields.js
browser/extensions/formautofill/test/unit/test_getRecords.js
browser/extensions/formautofill/test/unit/test_migrateRecords.js
browser/modules/OSKeyStore.jsm
browser/modules/moz.build
browser/modules/test/OSKeyStoreTestUtils.jsm
browser/modules/test/unit/test_osKeyStore.js
browser/modules/test/unit/xpcshell.ini
services/sync/tps/extensions/tps/resource/modules/formautofill.jsm
toolkit/modules/OSKeyStore.jsm
toolkit/modules/moz.build
toolkit/modules/tests/browser/browser_CreditCard.js
toolkit/modules/tests/modules/OSKeyStoreTestUtils.jsm
toolkit/modules/tests/xpcshell/test_osKeyStore.js
toolkit/modules/tests/xpcshell/xpcshell.ini
--- a/browser/components/aboutlogins/AboutLoginsParent.jsm
+++ b/browser/components/aboutlogins/AboutLoginsParent.jsm
@@ -12,17 +12,17 @@ const { XPCOMUtils } = ChromeUtils.impor
 );
 
 XPCOMUtils.defineLazyModuleGetters(this, {
   AppConstants: "resource://gre/modules/AppConstants.jsm",
   E10SUtils: "resource://gre/modules/E10SUtils.jsm",
   LoginBreaches: "resource:///modules/LoginBreaches.jsm",
   LoginHelper: "resource://gre/modules/LoginHelper.jsm",
   MigrationUtils: "resource:///modules/MigrationUtils.jsm",
-  OSKeyStore: "resource:///modules/OSKeyStore.jsm",
+  OSKeyStore: "resource://gre/modules/OSKeyStore.jsm",
   Services: "resource://gre/modules/Services.jsm",
   UIState: "resource://services-sync/UIState.jsm",
   PlacesUtils: "resource://gre/modules/PlacesUtils.jsm",
 });
 
 XPCOMUtils.defineLazyGetter(this, "log", () => {
   return LoginHelper.createLogger("AboutLoginsParent");
 });
--- a/browser/components/aboutlogins/tests/browser/browser_masterPassword.js
+++ b/browser/components/aboutlogins/tests/browser/browser_masterPassword.js
@@ -20,17 +20,17 @@ function waitForLoginCountToReach(browse
 }
 
 add_task(async function test() {
   // Confirm that the mocking of the OS auth dialog isn't enabled so the
   // test will timeout if a real OS auth dialog is shown. We don't show
   // the OS auth dialog when Master Password is enabled.
   is(
     Services.prefs.getStringPref(
-      "browser.osKeyStore.unofficialBuildOnlyLogin",
+      "toolkit.osKeyStore.unofficialBuildOnlyLogin",
       ""
     ),
     "",
     "Pref should be set to default value of empty string to start the test"
   );
 
   TEST_LOGIN1 = await addLogin(TEST_LOGIN1);
   LoginTestUtils.masterPassword.enable();
--- a/browser/components/payments/content/paymentDialogWrapper.js
+++ b/browser/components/payments/content/paymentDialogWrapper.js
@@ -35,17 +35,17 @@ ChromeUtils.defineModuleGetter(
 ChromeUtils.defineModuleGetter(
   this,
   "FormAutofillUtils",
   "resource://formautofill/FormAutofillUtils.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "OSKeyStore",
-  "resource:///modules/OSKeyStore.jsm"
+  "resource://gre/modules/OSKeyStore.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "PrivateBrowsingUtils",
   "resource://gre/modules/PrivateBrowsingUtils.jsm"
 );
 
 XPCOMUtils.defineLazyGetter(this, "formAutofillStorage", () => {
--- a/browser/components/preferences/in-content/privacy.js
+++ b/browser/components/preferences/in-content/privacy.js
@@ -17,17 +17,17 @@ ChromeUtils.defineModuleGetter(
 ChromeUtils.defineModuleGetter(
   this,
   "LoginHelper",
   "resource://gre/modules/LoginHelper.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "OSKeyStore",
-  "resource:///modules/OSKeyStore.jsm"
+  "resource://gre/modules/OSKeyStore.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "SiteDataManager",
   "resource:///modules/SiteDataManager.jsm"
 );
 XPCOMUtils.defineLazyGetter(this, "L10n", () => {
   return new Localization([
--- a/browser/components/preferences/in-content/tests/browser_masterpassword.js
+++ b/browser/components/preferences/in-content/tests/browser_masterpassword.js
@@ -97,17 +97,17 @@ add_task(async function() {
   );
   ok(!button.disabled, "master password button should still be enabled");
   ok(checkbox.checked, "master password checkbox should be checked still");
 
   // Confirm that we won't automatically respond to the dialog,
   // since we don't expect a dialog here, we want the test to fail if one appears.
   is(
     Services.prefs.getStringPref(
-      "browser.osKeyStore.unofficialBuildOnlyLogin",
+      "toolkit.osKeyStore.unofficialBuildOnlyLogin",
       ""
     ),
     "",
     "Pref should be set to an empty string"
   );
 
   masterPasswordNextState = false;
   dialogURL = "";
--- a/browser/extensions/formautofill/FormAutofillParent.jsm
+++ b/browser/extensions/formautofill/FormAutofillParent.jsm
@@ -42,17 +42,17 @@ const { FormAutofill } = ChromeUtils.imp
 
 XPCOMUtils.defineLazyModuleGetters(this, {
   BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.jsm",
   CreditCard: "resource://gre/modules/CreditCard.jsm",
   FormAutofillPreferences:
     "resource://formautofill/FormAutofillPreferences.jsm",
   FormAutofillDoorhanger: "resource://formautofill/FormAutofillDoorhanger.jsm",
   FormAutofillUtils: "resource://formautofill/FormAutofillUtils.jsm",
-  OSKeyStore: "resource:///modules/OSKeyStore.jsm",
+  OSKeyStore: "resource://gre/modules/OSKeyStore.jsm",
 });
 
 this.log = null;
 FormAutofill.defineLazyLogGetter(this, EXPORTED_SYMBOLS[0]);
 
 const {
   ENABLED_AUTOFILL_ADDRESSES_PREF,
   ENABLED_AUTOFILL_CREDITCARDS_PREF,
--- a/browser/extensions/formautofill/FormAutofillStorage.jsm
+++ b/browser/extensions/formautofill/FormAutofillStorage.jsm
@@ -156,17 +156,17 @@ ChromeUtils.defineModuleGetter(
 ChromeUtils.defineModuleGetter(
   this,
   "FormAutofillUtils",
   "resource://formautofill/FormAutofillUtils.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "OSKeyStore",
-  "resource:///modules/OSKeyStore.jsm"
+  "resource://gre/modules/OSKeyStore.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "PhoneNumber",
   "resource://formautofill/phonenumberutils/PhoneNumber.jsm"
 );
 
 XPCOMUtils.defineLazyServiceGetter(
--- a/browser/extensions/formautofill/FormAutofillUtils.jsm
+++ b/browser/extensions/formautofill/FormAutofillUtils.jsm
@@ -60,17 +60,17 @@ const { XPCOMUtils } = ChromeUtils.impor
   "resource://gre/modules/XPCOMUtils.jsm"
 );
 const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 const { FormAutofill } = ChromeUtils.import(
   "resource://formautofill/FormAutofill.jsm"
 );
 XPCOMUtils.defineLazyModuleGetters(this, {
   CreditCard: "resource://gre/modules/CreditCard.jsm",
-  OSKeyStore: "resource:///modules/OSKeyStore.jsm",
+  OSKeyStore: "resource://gre/modules/OSKeyStore.jsm",
 });
 
 let AddressDataLoader = {
   // Status of address data loading. We'll load all the countries with basic level 1
   // information while requesting conutry information, and set country to true.
   // Level 1 Set is for recording which country's level 1/level 2 data is loaded,
   // since we only load this when getCountryAddressData called with level 1 parameter.
   _dataLoaded: {
--- a/browser/extensions/formautofill/content/manageDialog.js
+++ b/browser/extensions/formautofill/content/manageDialog.js
@@ -34,17 +34,17 @@ ChromeUtils.defineModuleGetter(
 ChromeUtils.defineModuleGetter(
   this,
   "FormAutofillUtils",
   "resource://formautofill/FormAutofillUtils.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "OSKeyStore",
-  "resource:///modules/OSKeyStore.jsm"
+  "resource://gre/modules/OSKeyStore.jsm"
 );
 
 XPCOMUtils.defineLazyGetter(this, "reauthPasswordPromptMessage", () => {
   const brandShortName = FormAutofillUtils.brandBundle.GetStringFromName(
     "brandShortName"
   );
   return FormAutofillUtils.stringBundle.formatStringFromName(
     `editCreditCardPasswordPrompt.${AppConstants.platform}`,
--- a/browser/extensions/formautofill/test/browser/head.js
+++ b/browser/extensions/formautofill/test/browser/head.js
@@ -8,17 +8,17 @@
             DEFAULT_REGION_PREF,
             sleep, expectPopupOpen, openPopupOn, openPopupForSubframe, expectPopupClose, closePopup, closePopupForSubframe,
             clickDoorhangerButton, getAddresses, saveAddress, removeAddresses, saveCreditCard,
             getDisplayedPopupItems, getDoorhangerCheckbox,
             getNotification, getDoorhangerButton, removeAllRecords, expectWarningText, testDialog */
 
 "use strict";
 
-ChromeUtils.import("resource:///modules/OSKeyStore.jsm", this);
+ChromeUtils.import("resource://gre/modules/OSKeyStore.jsm", this);
 ChromeUtils.import("resource://testing-common/OSKeyStoreTestUtils.jsm", this);
 
 const MANAGE_ADDRESSES_DIALOG_URL =
   "chrome://formautofill/content/manageAddresses.xhtml";
 const MANAGE_CREDIT_CARDS_DIALOG_URL =
   "chrome://formautofill/content/manageCreditCards.xhtml";
 const EDIT_ADDRESS_DIALOG_URL =
   "chrome://formautofill/content/editAddress.xhtml";
--- a/browser/extensions/formautofill/test/unit/test_autofillFormFields.js
+++ b/browser/extensions/formautofill/test/unit/test_autofillFormFields.js
@@ -10,17 +10,19 @@ const { setTimeout, clearTimeout } = Chr
   {}
 );
 
 var FormAutofillHandler, OSKeyStore;
 add_task(async function setup() {
   ({ FormAutofillHandler } = ChromeUtils.import(
     "resource://formautofill/FormAutofillHandler.jsm"
   ));
-  ({ OSKeyStore } = ChromeUtils.import("resource:///modules/OSKeyStore.jsm"));
+  ({ OSKeyStore } = ChromeUtils.import(
+    "resource://gre/modules/OSKeyStore.jsm"
+  ));
 });
 
 const TESTCASES = [
   {
     description: "Form without autocomplete property",
     document: `<form><input id="given-name"><input id="family-name">
                <input id="street-addr"><input id="city"><select id="country"></select>
                <input id='email'><input id="tel"></form>`,
--- a/browser/extensions/formautofill/test/unit/test_getRecords.js
+++ b/browser/extensions/formautofill/test/unit/test_getRecords.js
@@ -9,17 +9,19 @@ const { CreditCard } = ChromeUtils.impor
 );
 
 let FormAutofillParent, FormAutofillStatus;
 let OSKeyStore;
 add_task(async function setup() {
   ({ FormAutofillParent, FormAutofillStatus } = ChromeUtils.import(
     "resource://formautofill/FormAutofillParent.jsm"
   ));
-  ({ OSKeyStore } = ChromeUtils.import("resource:///modules/OSKeyStore.jsm"));
+  ({ OSKeyStore } = ChromeUtils.import(
+    "resource://gre/modules/OSKeyStore.jsm"
+  ));
 });
 
 const TEST_ADDRESS_1 = {
   "given-name": "Timothy",
   "additional-name": "John",
   "family-name": "Berners-Lee",
   organization: "World Wide Web Consortium",
   "street-address": "32 Vassar Street\nMIT Room 32-G524",
--- a/browser/extensions/formautofill/test/unit/test_migrateRecords.js
+++ b/browser/extensions/formautofill/test/unit/test_migrateRecords.js
@@ -8,17 +8,19 @@ ChromeUtils.import("resource://testing-c
 
 let FormAutofillStorage;
 let OSKeyStore;
 add_task(async function setup() {
   ({ FormAutofillStorage } = ChromeUtils.import(
     "resource://formautofill/FormAutofillStorage.jsm",
     null
   ));
-  ({ OSKeyStore } = ChromeUtils.import("resource:///modules/OSKeyStore.jsm"));
+  ({ OSKeyStore } = ChromeUtils.import(
+    "resource://gre/modules/OSKeyStore.jsm"
+  ));
 });
 
 const TEST_STORE_FILE_NAME = "test-profile.json";
 
 const ADDRESS_SCHEMA_VERSION = 1;
 const CREDIT_CARD_SCHEMA_VERSION = 2;
 
 const ADDRESS_TESTCASES = [
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -116,18 +116,16 @@ with Files("WindowsPreviewPerTab.jsm"):
     BUG_COMPONENT = ("Core", "Widget: Win32")
 
 with Files("webrtcUI.jsm"):
     BUG_COMPONENT = ("Firefox", "Site Permissions")
 
 with Files("ZoomUI.jsm"):
     BUG_COMPONENT = ("Firefox", "Toolbars and Customization")
 
-TESTING_JS_MODULES += ['test/OSKeyStoreTestUtils.jsm']
-
 BROWSER_CHROME_MANIFESTS += [
     'test/browser/browser.ini',
     'test/browser/formValidation/browser.ini',
 ]
 XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
 
 EXTRA_JS_MODULES += [
     'AboutNewTab.jsm',
@@ -142,17 +140,16 @@ EXTRA_JS_MODULES += [
     'EveryWindow.jsm',
     'ExtensionsUI.jsm',
     'FaviconLoader.jsm',
     'HomePage.jsm',
     'LaterRun.jsm',
     'LiveBookmarkMigrator.jsm',
     'NewTabPagePreloading.jsm',
     'OpenInTabsUtils.jsm',
-    'OSKeyStore.jsm',
     'PageActions.jsm',
     'PermissionUI.jsm',
     'PingCentre.jsm',
     'ProcessHangMonitor.jsm',
     'ReaderParent.jsm',
     'Sanitizer.jsm',
     'SelectionChangedMenulist.jsm',
     'SiteDataManager.jsm',
--- a/browser/modules/test/unit/xpcshell.ini
+++ b/browser/modules/test/unit/xpcshell.ini
@@ -2,14 +2,13 @@
 head =
 firefox-appdir = browser
 skip-if = toolkit == 'android'
 
 [test_E10SUtils_nested_URIs.js]
 [test_HomePage.js]
 [test_HomePage_ignore.js]
 [test_LiveBookmarkMigrator.js]
-[test_osKeyStore.js]
 [test_Sanitizer_interrupted.js]
 [test_SitePermissions.js]
 [test_SiteDataManager.js]
 [test_LaterRun.js]
 [test_discovery.js]
--- a/services/sync/tps/extensions/tps/resource/modules/formautofill.jsm
+++ b/services/sync/tps/extensions/tps/resource/modules/formautofill.jsm
@@ -20,17 +20,17 @@ ChromeUtils.defineModuleGetter(
   this,
   "formAutofillStorage",
   "resource://formautofill/FormAutofillStorage.jsm"
 );
 
 ChromeUtils.defineModuleGetter(
   this,
   "OSKeyStore",
-  "resource:///modules/OSKeyStore.jsm"
+  "resource://gre/modules/OSKeyStore.jsm"
 );
 
 class FormAutofillBase {
   constructor(props, subStorageName, fields) {
     this._subStorageName = subStorageName;
     this._fields = fields;
 
     this.props = {};
rename from browser/modules/OSKeyStore.jsm
rename to toolkit/modules/OSKeyStore.jsm
--- a/browser/modules/OSKeyStore.jsm
+++ b/toolkit/modules/OSKeyStore.jsm
@@ -34,17 +34,17 @@ XPCOMUtils.defineLazyServiceGetter(
 XPCOMUtils.defineLazyServiceGetter(
   this,
   "osReauthenticator",
   "@mozilla.org/security/osreauthenticator;1",
   Ci.nsIOSReauthenticator
 );
 
 // Skip reauth during tests, only works in non-official builds.
-const TEST_ONLY_REAUTH = "browser.osKeyStore.unofficialBuildOnlyLogin";
+const TEST_ONLY_REAUTH = "toolkit.osKeyStore.unofficialBuildOnlyLogin";
 
 var OSKeyStore = {
   /**
    * On macOS this becomes part of the name label visible on Keychain Acesss as
    * "org.mozilla.nss.keystore.firefox" (where "firefox" is the MOZ_APP_NAME).
    */
   STORE_LABEL: AppConstants.MOZ_APP_NAME,
 
--- a/toolkit/modules/moz.build
+++ b/toolkit/modules/moz.build
@@ -137,16 +137,17 @@ with Files('WindowsRegistry.jsm'):
 
 
 XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
 BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
 MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']
 
 TESTING_JS_MODULES += [
     'tests/modules/MockDocument.jsm',
+    'tests/modules/OSKeyStoreTestUtils.jsm',
     'tests/modules/PromiseTestUtils.jsm',
     'tests/modules/Task.jsm',
     'tests/xpcshell/TestIntegration.jsm',
 ]
 
 SPHINX_TREES['toolkit_modules'] = 'docs'
 
 with Files('docs/**'):
@@ -190,16 +191,17 @@ EXTRA_JS_MODULES += [
     'InlineSpellCheckerContent.jsm',
     'Integration.jsm',
     'JSONFile.jsm',
     'Log.jsm',
     'NewTabUtils.jsm',
     'NLP.jsm',
     'ObjectUtils.jsm',
     'offlineAppCache.jsm',
+    'OSKeyStore.jsm',
     'PageMenu.jsm',
     'PermissionsUtils.jsm',
     'PopupNotifications.jsm',
     'Preferences.jsm',
     'PrivateBrowsingUtils.jsm',
     'ProfileAge.jsm',
     'Promise-backend.js',
     'Promise.jsm',
--- a/toolkit/modules/tests/browser/browser_CreditCard.js
+++ b/toolkit/modules/tests/browser/browser_CreditCard.js
@@ -1,17 +1,19 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const { CreditCard } = ChromeUtils.import(
   "resource://gre/modules/CreditCard.jsm"
 );
-const { OSKeyStore } = ChromeUtils.import("resource:///modules/OSKeyStore.jsm");
+const { OSKeyStore } = ChromeUtils.import(
+  "resource://gre/modules/OSKeyStore.jsm"
+);
 const { OSKeyStoreTestUtils } = ChromeUtils.import(
   "resource://testing-common/OSKeyStoreTestUtils.jsm"
 );
 
 let oldGetters = {};
 let gFakeLoggedIn = true;
 
 add_task(function setup() {
rename from browser/modules/test/OSKeyStoreTestUtils.jsm
rename to toolkit/modules/tests/modules/OSKeyStoreTestUtils.jsm
--- a/browser/modules/test/OSKeyStoreTestUtils.jsm
+++ b/toolkit/modules/tests/modules/OSKeyStoreTestUtils.jsm
@@ -1,31 +1,31 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 var EXPORTED_SYMBOLS = ["OSKeyStoreTestUtils"];
 
-ChromeUtils.import("resource:///modules/OSKeyStore.jsm", this);
+ChromeUtils.import("resource://gre/modules/OSKeyStore.jsm", this);
 const { AppConstants } = ChromeUtils.import(
   "resource://gre/modules/AppConstants.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "UpdateUtils",
   "resource://gre/modules/UpdateUtils.jsm"
 );
 const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 const { TestUtils } = ChromeUtils.import(
   "resource://testing-common/TestUtils.jsm"
 );
 
 var OSKeyStoreTestUtils = {
-  TEST_ONLY_REAUTH: "browser.osKeyStore.unofficialBuildOnlyLogin",
+  TEST_ONLY_REAUTH: "toolkit.osKeyStore.unofficialBuildOnlyLogin",
 
   setup() {
     this.ORIGINAL_STORE_LABEL = OSKeyStore.STORE_LABEL;
     OSKeyStore.STORE_LABEL =
       "test-" +
       Math.random()
         .toString(36)
         .substr(2);
rename from browser/modules/test/unit/test_osKeyStore.js
rename to toolkit/modules/tests/xpcshell/test_osKeyStore.js
--- a/browser/modules/test/unit/test_osKeyStore.js
+++ b/toolkit/modules/tests/xpcshell/test_osKeyStore.js
@@ -17,17 +17,19 @@ add_task(async function os_key_store_set
   OSKeyStoreTestUtils.setup();
   registerCleanupFunction(async function cleanup() {
     await OSKeyStoreTestUtils.cleanup();
   });
 });
 
 let OSKeyStore;
 add_task(async function setup() {
-  ({ OSKeyStore } = ChromeUtils.import("resource:///modules/OSKeyStore.jsm"));
+  ({ OSKeyStore } = ChromeUtils.import(
+    "resource://gre/modules/OSKeyStore.jsm"
+  ));
 });
 
 // Ensure that the appropriate initialization has happened.
 do_get_profile();
 
 const testText = "test string";
 let cipherText;
 
--- a/toolkit/modules/tests/xpcshell/xpcshell.ini
+++ b/toolkit/modules/tests/xpcshell/xpcshell.ini
@@ -26,16 +26,17 @@ tags = remote-settings
 [test_jsesc.js]
 [test_JSONFile.js]
 [test_Log.js]
 [test_MatchURLFilters.js]
 [test_NewTabUtils.js]
 skip-if = toolkit == 'android'
 [test_ObjectUtils.js]
 [test_ObjectUtils_strict.js]
+[test_osKeyStore.js]
 [test_PermissionsUtils.js]
 [test_Preferences.js]
 [test_Promise.js]
 [test_PromiseUtils.js]
 [test_propertyListsUtils.js]
 skip-if = os != 'mac'
 [test_readCertPrefs.js]
 [test_Services.js]