From 19f629190b9b033560bb0746e2d928770315289b Mon Sep 17 00:00:00 2001 From: Justin Dolske Date: Fri, 26 Aug 2016 13:06:14 -0700 Subject: [PATCH 01/24] Bug 1298208 - FX_MIGRATION_HOMEPAGE_IMPORTED probe is (incorrectly) always true. r=mattn MozReview-Commit-ID: 6wZUeRTKExw --- browser/components/migration/content/migration.js | 5 +++-- toolkit/components/telemetry/Histograms.json | 2 +- toolkit/components/telemetry/histogram-whitelists.json | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/browser/components/migration/content/migration.js b/browser/components/migration/content/migration.js index 84856ecdc51b..ceb7d4ddbf57 100644 --- a/browser/components/migration/content/migration.js +++ b/browser/components/migration/content/migration.js @@ -428,8 +428,9 @@ var MigrationWizard = { this.reportDataRecencyTelemetry(); } if (this._autoMigrate) { - Services.telemetry.getKeyedHistogramById("FX_MIGRATION_HOMEPAGE_IMPORTED") - .add(this._source, !!this._newHomePage); + let hasImportedHomepage = this._newHomePage && this._newHomePage != "DEFAULT"; + Services.telemetry.getKeyedHistogramById("FX_MIGRATION_IMPORTED_HOMEPAGE") + .add(this._source, hasImportedHomepage); if (this._newHomePage) { try { // set homepage properly diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index d57c828e6622..e81f58c1c5b2 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -4581,7 +4581,7 @@ "releaseChannelCollection": "opt-out", "description": "Usage of migration for each datatype when migration is run through the post-firstrun flow which allows individual datatypes, keyed by the string description of the browser." }, - "FX_MIGRATION_HOMEPAGE_IMPORTED": { + "FX_MIGRATION_IMPORTED_HOMEPAGE": { "expires_in_version": "53", "kind": "boolean", "keyed": true, diff --git a/toolkit/components/telemetry/histogram-whitelists.json b/toolkit/components/telemetry/histogram-whitelists.json index c82eb999169f..880c57a39615 100644 --- a/toolkit/components/telemetry/histogram-whitelists.json +++ b/toolkit/components/telemetry/histogram-whitelists.json @@ -268,7 +268,7 @@ "FX_GESTURE_INSTALL_SNAPSHOT_OF_PAGE", "FX_MIGRATION_ENTRY_POINT", "FX_MIGRATION_ERRORS", - "FX_MIGRATION_HOMEPAGE_IMPORTED", + "FX_MIGRATION_IMPORTED_HOMEPAGE", "FX_MIGRATION_SOURCE_BROWSER", "FX_MIGRATION_USAGE", "FX_NEW_WINDOW_MS", @@ -1117,7 +1117,7 @@ "FX_GESTURE_INSTALL_SNAPSHOT_OF_PAGE", "FX_MIGRATION_ENTRY_POINT", "FX_MIGRATION_ERRORS", - "FX_MIGRATION_HOMEPAGE_IMPORTED", + "FX_MIGRATION_IMPORTED_HOMEPAGE", "FX_MIGRATION_SOURCE_BROWSER", "FX_MIGRATION_USAGE", "FX_NEW_WINDOW_MS", From ae5fb968b31185361a54715135ed098c105e35a5 Mon Sep 17 00:00:00 2001 From: Justin Dolske Date: Fri, 26 Aug 2016 13:06:14 -0700 Subject: [PATCH 02/24] Bug 1298208 - add bug number and notification emails for migrator probes, removing them from exception whitelist. r=mattn MozReview-Commit-ID: A5kUiutYX0l --- toolkit/components/telemetry/Histograms.json | 10 ++++++++++ toolkit/components/telemetry/histogram-whitelists.json | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index e81f58c1c5b2..4040d22f15e3 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -4552,6 +4552,8 @@ "description": "THUMBNAILS: Thumbnail found" }, "FX_MIGRATION_ENTRY_POINT": { + "bug_numbers": [731025], + "alert_emails": ["gijs@mozilla.com"], "expires_in_version": "53", "kind": "enumerated", "n_values": 10, @@ -4559,6 +4561,8 @@ "description": "Where the migration wizard was entered from. 0=Other/catch-all, 1=first-run, 2=refresh-firefox, 3=Places window, 4=Password manager" }, "FX_MIGRATION_SOURCE_BROWSER": { + "bug_numbers": [731025], + "alert_emails": ["gijs@mozilla.com"], "expires_in_version": "53", "kind": "enumerated", "n_values": 15, @@ -4566,6 +4570,8 @@ "description": "The browser that data is pulled from. The values correspond to the internal browser ID (see MigrationUtils.jsm)" }, "FX_MIGRATION_ERRORS": { + "bug_numbers": [731025], + "alert_emails": ["gijs@mozilla.com"], "expires_in_version": "53", "kind": "enumerated", "keyed": true, @@ -4574,6 +4580,8 @@ "description": "Errors encountered during migration in buckets defined by the datatype, keyed by the string description of the browser." }, "FX_MIGRATION_USAGE": { + "bug_numbers": [731025], + "alert_emails": ["gijs@mozilla.com"], "expires_in_version": "53", "kind": "enumerated", "keyed": true, @@ -4582,6 +4590,8 @@ "description": "Usage of migration for each datatype when migration is run through the post-firstrun flow which allows individual datatypes, keyed by the string description of the browser." }, "FX_MIGRATION_IMPORTED_HOMEPAGE": { + "bug_numbers": [731025, 1298208], + "alert_emails": ["gijs@mozilla.com"], "expires_in_version": "53", "kind": "boolean", "keyed": true, diff --git a/toolkit/components/telemetry/histogram-whitelists.json b/toolkit/components/telemetry/histogram-whitelists.json index 880c57a39615..708d6bd61653 100644 --- a/toolkit/components/telemetry/histogram-whitelists.json +++ b/toolkit/components/telemetry/histogram-whitelists.json @@ -266,11 +266,6 @@ "FX_BROWSER_FULLSCREEN_USED", "FX_GESTURE_COMPRESS_SNAPSHOT_OF_PAGE", "FX_GESTURE_INSTALL_SNAPSHOT_OF_PAGE", - "FX_MIGRATION_ENTRY_POINT", - "FX_MIGRATION_ERRORS", - "FX_MIGRATION_IMPORTED_HOMEPAGE", - "FX_MIGRATION_SOURCE_BROWSER", - "FX_MIGRATION_USAGE", "FX_NEW_WINDOW_MS", "FX_PAGE_LOAD_MS", "FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS", @@ -1115,11 +1110,6 @@ "FX_BROWSER_FULLSCREEN_USED", "FX_GESTURE_COMPRESS_SNAPSHOT_OF_PAGE", "FX_GESTURE_INSTALL_SNAPSHOT_OF_PAGE", - "FX_MIGRATION_ENTRY_POINT", - "FX_MIGRATION_ERRORS", - "FX_MIGRATION_IMPORTED_HOMEPAGE", - "FX_MIGRATION_SOURCE_BROWSER", - "FX_MIGRATION_USAGE", "FX_NEW_WINDOW_MS", "FX_PAGE_LOAD_MS", "FX_SANITIZE_CACHE", From 24db9921ebc834e9aa1395c5e68319d330b47bf0 Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Thu, 25 Aug 2016 15:48:21 -0700 Subject: [PATCH 03/24] Bug 1298193 - Part 1: Move promptAuth proxy tests to their own file. r=Dolske More splitting of test_prompt.html to make these tests easier to maintain/digest. MozReview-Commit-ID: DuakmtkJ41I --HG-- rename : toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html => toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html extra : rebase_source : b0056d757df10befd6d662bdff29e52343835fa9 --- .../passwordmgr/test/mochitest/mochitest.ini | 2 + .../mochitest/test_prompt_promptAuth.html | 218 +---------- .../test_prompt_promptAuth_proxy.html | 345 ++++++++++++++++++ 3 files changed, 353 insertions(+), 212 deletions(-) create mode 100644 toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html diff --git a/toolkit/components/passwordmgr/test/mochitest/mochitest.ini b/toolkit/components/passwordmgr/test/mochitest/mochitest.ini index 88372a07948c..e4a8f4fd6ffe 100644 --- a/toolkit/components/passwordmgr/test/mochitest/mochitest.ini +++ b/toolkit/components/passwordmgr/test/mochitest/mochitest.ini @@ -50,5 +50,7 @@ skip-if = toolkit == 'android' # autocomplete skip-if = os == "linux" || toolkit == 'android' # Tests desktop prompts [test_prompt_promptAuth.html] skip-if = e10s || os == "linux" || toolkit == 'android' # Tests desktop prompts +[test_prompt_promptAuth_proxy.html] +skip-if = e10s || os == "linux" || toolkit == 'android' # Tests desktop prompts [test_recipe_login_fields.html] [test_xhr_2.html] diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html index 8c419648074e..ba68f90db88c 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html @@ -21,14 +21,10 @@ + + + + + + +

+ + + +
+
+
+ + From 277e8620dd20a58aa95962fb1526284c1aa5da62 Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Thu, 25 Aug 2016 23:08:59 -0700 Subject: [PATCH 04/24] Bug 1298193 - Part 2: Switch test_prompt_promptAuth* to add_task. r=Dolske MozReview-Commit-ID: Es4r5JGFzVW --HG-- extra : rebase_source : b82927ff4a5262f0b8aef8feba7139b48e6b3519 --- .../mochitest/test_prompt_promptAuth.html | 28 +++++++++++-------- .../test_prompt_promptAuth_proxy.html | 12 +++++--- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html index ba68f90db88c..d8b14862179d 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html @@ -237,8 +237,7 @@ add_task(function* setup() { ok(popupNotifications, "Got popupNotifications"); }); -add_task(function* test() { - info("===== test 500 ====="); +add_task(function* test_accept() { state = { msg : "http://example.com is requesting your username and password.\n\nThe site says: “some realm”", title : "Authentication Required", @@ -270,8 +269,9 @@ add_task(function* test() { ok(isOk, "Checking dialog return value (accept)"); is(authinfo.username, "outuser", "Checking returned username"); is(authinfo.password, "outpass", "Checking returned password"); +}); - info("===== test 501 ====="); +add_task(function* test_cancel() { state = { msg : "http://example.com is requesting your username and password.\n\nThe site says: “some realm”", title : "Authentication Required", @@ -295,8 +295,9 @@ add_task(function* test() { yield promptDone; ok(!isOk, "Checking dialog return value (cancel)"); +}); - info("===== test 502 ====="); +add_task(function* test_pwonly() { // test filling in password-only login state = { msg : "http://example.com is requesting your username and password.\n\nThe site says: “http://example.com”", @@ -327,8 +328,9 @@ add_task(function* test() { ok(isOk, "Checking dialog return value (accept)"); is(authinfo.username, "", "Checking returned username"); is(authinfo.password, "examplepass", "Checking returned password"); +}); - info("===== test 503 ====="); +add_task(function* test_multipleExisting() { // test filling in existing login (undetermined from multiple selection) // user2name/user2pass would also be valid to fill here. state = { @@ -360,8 +362,9 @@ add_task(function* test() { ok(isOk, "Checking dialog return value (accept)"); ok(authinfo.username == "user1name" || authinfo.username == "user2name", "Checking returned username"); ok(authinfo.password == "user1pass" || authinfo.password == "user2pass", "Checking returned password"); +}); - info("===== test 504 ====="); +add_task(function* test_multipleExisting2() { // test filling in existing login (undetermined --> user1) // user2name/user2pass would also be valid to fill here. state = { @@ -396,8 +399,9 @@ add_task(function* test() { ok(isOk, "Checking dialog return value (accept)"); is(authinfo.username, "user1name", "Checking returned username"); is(authinfo.password, "user1pass", "Checking returned password"); +}); - info("===== test 505 ====="); +add_task(function* test_multipleExisting3() { // test filling in existing login (undetermined --> user2) // user2name/user2pass would also be valid to fill here. state = { @@ -433,8 +437,9 @@ add_task(function* test() { ok(isOk, "Checking dialog return value (accept)"); is(authinfo.username, "user2name", "Checking returned username"); is(authinfo.password, "user2pass", "Checking returned password"); +}); - info("===== test 506 ====="); +add_task(function* test_changingMultiple() { // test changing a password (undetermined --> user2 w/ newpass) // user2name/user2pass would also be valid to fill here. state = { @@ -470,8 +475,9 @@ add_task(function* test() { ok(isOk, "Checking dialog return value (accept)"); is(authinfo.username, "user2name", "Checking returned username"); is(authinfo.password, "NEWuser2pass", "Checking returned password"); +}); - info("===== test 507 ====="); +add_task(function* test_changingMultiple2() { // test changing a password (undetermined --> user2 w/ origpass) // user2name/user2pass would also be valid to fill here. state = { @@ -507,9 +513,9 @@ add_task(function* test() { ok(isOk, "Checking dialog return value (accept)"); is(authinfo.username, "user2name", "Checking returned username"); is(authinfo.password, "user2pass", "Checking returned password"); +}); - - info("===== test 1000 ====="); +add_task(function* test_iframe() { state = { msg : "http://mochi.test:8888 is requesting your username and password.\n\nThe site says: “mochitest”", title : "Authentication Required", diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html index 55616c3c20cd..e21218cfbb5a 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html @@ -214,8 +214,9 @@ startup(); add_task(function* setup() { info("Waiting for startup to complete..."); yield startupComplete; +}) - info("===== test 508 ====="); +add_task(function* test_noAutologin() { // test proxy login (default = no autologin), make sure it prompts. state = { msg : "The proxy moz-proxy://127.0.0.1:8888 is requesting a username and password.\n\nThe site says: “Proxy Realm”", @@ -250,8 +251,9 @@ add_task(function* setup() { isnot(time1, time2, "Checking that timeLastUsed was updated"); is(proxyAuthinfo.username, "proxuser", "Checking returned username"); is(proxyAuthinfo.password, "proxpass", "Checking returned password"); +}); - info("===== test 509 ====="); +add_task(function* test_autologin() { // test proxy login (with autologin) // Enable the autologin pref. @@ -270,8 +272,9 @@ add_task(function* setup() { isnot(time1, time2, "Checking that timeLastUsed was updated"); is(proxyAuthinfo.username, "proxuser", "Checking returned username"); is(proxyAuthinfo.password, "proxpass", "Checking returned password"); +}); - info("===== test 510 ====="); +add_task(function* test_autologin_incorrect() { // test proxy login (with autologin), ensure it prompts after a failed auth. state = { msg : "The proxy moz-proxy://127.0.0.1:8888 is requesting a username and password.\n\nThe site says: “Proxy Realm”", @@ -307,8 +310,9 @@ add_task(function* setup() { isnot(time1, time2, "Checking that timeLastUsed was updated"); is(proxyAuthinfo.username, "proxuser", "Checking returned username"); is(proxyAuthinfo.password, "proxpass", "Checking returned password"); +}); - info("===== test 511 ====="); +add_task(function* test_autologin_private() { // test proxy login (with autologin), ensure it prompts in Private Browsing mode. state = { msg : "the message", From 278a4c4e0b556a054a6798294692ad761526f53c Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Thu, 25 Aug 2016 23:09:41 -0700 Subject: [PATCH 05/24] Bug 1298193 - Part 3: Don't manually remove logins at the end of test_prompt_promptAuth*. r=Dolske Services.logins.removeAllLogins is already done in registerCleanupFunction MozReview-Commit-ID: 8FGF3kJmvj0 --HG-- extra : rebase_source : fa3dc1d635620f0285009685ff7d0a281a8ba49b --- .../mochitest/test_prompt_promptAuth.html | 19 ------------------- .../test_prompt_promptAuth_proxy.html | 3 --- 2 files changed, 22 deletions(-) diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html index d8b14862179d..a5213a6239d0 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html @@ -136,28 +136,9 @@ function initLogins() { function finishTest() { try { - ok(true, "finishTest removing testing logins..."); observerService.removeObserver(storageObserver, "passwordmgr-storage-changed"); dumpLogins(pwmgr); - ok(true, "removing login 1..."); - pwmgr.removeLogin(login1); - ok(true, "removing login 2A..."); - pwmgr.removeLogin(login2A); - ok(true, "removing login 2B..."); - pwmgr.removeLogin(login2B); - ok(true, "removing login 2C..."); - pwmgr.removeLogin(login2C); - ok(true, "removing login 2D..."); - pwmgr.removeLogin(login2D); - ok(true, "removing login 2E..."); - pwmgr.removeLogin(login2E); - ok(true, "removing login 3A..."); - pwmgr.removeLogin(login3A); - ok(true, "removing login 3B..."); - pwmgr.removeLogin(login3B); - ok(true, "removing login 4..."); - pwmgr.removeLogin(login4); } catch (e) { ok(false, "finishTest FAILED: " + e); } diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html index e21218cfbb5a..6a0a29be0d4c 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html @@ -78,12 +78,9 @@ function initLogins(pi) { function finishTest() { try { - ok(true, "finishTest removing testing logins..."); observerService.removeObserver(storageObserver, "passwordmgr-storage-changed"); dumpLogins(pwmgr); - ok(true, "removing proxyLogin..."); - pwmgr.removeLogin(proxyLogin); } catch (e) { ok(false, "finishTest FAILED: " + e); } From 4de5b6b6d8bd15161548dd582f9c144b9d1b7fad Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Thu, 25 Aug 2016 23:06:34 -0700 Subject: [PATCH 06/24] Bug 1298193 - Part 4: Remove storage observer from test_prompt_promptAuth_proxy. r=Dolske MozReview-Commit-ID: 9HDllNPpiVh --HG-- extra : rebase_source : 49f4b4afab6f08e6da6fc0f530306b6db63e4699 --- .../test_prompt_promptAuth_proxy.html | 78 +------------------ 1 file changed, 1 insertion(+), 77 deletions(-) diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html index 6a0a29be0d4c..72f212cce012 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html @@ -19,7 +19,7 @@
 
 
From 694b575fdf9450395aacb60f66d91e9ef90fac24 Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Thu, 25 Aug 2016 23:05:58 -0700 Subject: [PATCH 07/24] Bug 1298193 - Part 5: test_prompt_promptAuth_proxy doesn't need to clear auth sessions on its own. r=Dolske MozReview-Commit-ID: 2L9lYM3oeTm --HG-- extra : rebase_source : 35476379ca28142a20552e1a9912a784c06fa317 --- .../test/mochitest/test_prompt_promptAuth.html | 10 +++++----- .../test/mochitest/test_prompt_promptAuth_proxy.html | 6 ------ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html index a5213a6239d0..4c80959a300d 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html @@ -26,6 +26,11 @@ var isOk; var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); +// popupNotifications (not *popup*) is a constant, per-tab container. So, we +// only need to fetch it once. +var popupNotifications = getPopupNotifications(window.top); +ok(popupNotifications, "Got popupNotifications"); + var level = Ci.nsIAuthPrompt2.LEVEL_NONE; var authinfo = { username : "", @@ -211,11 +216,6 @@ var storageObserver = SpecialPowers.wrapCallbackObject({ add_task(function* setup() { info("Waiting for startup to complete..."); initLogins(); - - // popupNotifications (not *popup*) is a constant, per-tab container. So, we - // only need to fetch it once. - var popupNotifications = getPopupNotifications(window.top); - ok(popupNotifications, "Got popupNotifications"); }); add_task(function* test_accept() { diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html index 72f212cce012..e97c72233b68 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth_proxy.html @@ -257,12 +257,6 @@ add_task(function* test_autologin_private() { // XXX check for and kill popup notification?? // XXX check for checkbox / checkstate on old prompts? // XXX check NTLM domain stuff - - // clear plain HTTP auth sessions before the test, to allow - // running them more than once. - var authMgr = Cc['@mozilla.org/network/http-auth-manager;1']. - getService(Ci.nsIHttpAuthManager); - authMgr.clearAll(); }); From 580d4b0402872f0729e57a9edb2053bf0dc64859 Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Thu, 25 Aug 2016 23:04:23 -0700 Subject: [PATCH 08/24] Bug 1298193 - Part 6: Remove storage observer from test_prompt_promptAuth.html and run setup in the chrome. r=Dolske MozReview-Commit-ID: CPxynswqAru --HG-- extra : rebase_source : ae83f1804d10cc98ddce6474a946a45a1d680cc1 --- .../mochitest/test_prompt_promptAuth.html | 191 ++++++------------ 1 file changed, 58 insertions(+), 133 deletions(-) diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html index 4c80959a300d..e1c8d706e7b9 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html @@ -20,8 +20,6 @@
 
+  
+  
+  
+  
+  
+
+
+

+ + + +
+
+
+ + diff --git a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html index fd213313cd9a..da01d734f019 100644 --- a/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html +++ b/toolkit/components/passwordmgr/test/mochitest/test_prompt_promptAuth.html @@ -7,14 +7,12 @@ -

@@ -33,8 +31,6 @@ var authinfo = {
   realm : ""
 };
 
-var iframe = document.getElementById("iframe");
-
 // Force parent to not look for tab-modal prompts, as they're not used for auth prompts.
 isTabModal = false;
 
@@ -90,7 +86,7 @@ let prompterParent = runInParent(() => {
   let pwmgr = Cc["@mozilla.org/login-manager;1"].
               getService(Ci.nsILoginManager);
 
-  let login1, login2A, login2B, login2C, login2D, login2E, login3A, login3B, login4;
+  let login1, login2A, login2B, login2C, login2D, login2E;
   login1  = Cc["@mozilla.org/login-manager/loginInfo;1"].
             createInstance(Ci.nsILoginInfo);
   login2A = Cc["@mozilla.org/login-manager/loginInfo;1"].
@@ -103,12 +99,6 @@ let prompterParent = runInParent(() => {
             createInstance(Ci.nsILoginInfo);
   login2E = Cc["@mozilla.org/login-manager/loginInfo;1"].
             createInstance(Ci.nsILoginInfo);
-  login3A = Cc["@mozilla.org/login-manager/loginInfo;1"].
-            createInstance(Ci.nsILoginInfo);
-  login3B = Cc["@mozilla.org/login-manager/loginInfo;1"].
-            createInstance(Ci.nsILoginInfo);
-  login4  = Cc["@mozilla.org/login-manager/loginInfo;1"].
-            createInstance(Ci.nsILoginInfo);
 
   login1.init("http://example.com", null, "http://example.com",
               "", "examplepass", "", "");
@@ -122,12 +112,6 @@ let prompterParent = runInParent(() => {
                "100@beef", "user3pass", "", "");
   login2E.init("http://example2.com", null, "http://example2.com",
                "100%beef", "user3pass", "", "");
-  login3A.init("http://mochi.test:8888", null, "mochitest",
-               "mochiuser1", "mochipass1", "", "");
-  login3B.init("http://mochi.test:8888", null, "mochitest2",
-               "mochiuser2", "mochipass2", "", "");
-  login4.init("http://mochi.test:8888", null, "mochitest3",
-               "mochiuser3", "mochipass3-old", "", "");
 
   pwmgr.addLogin(login1);
   pwmgr.addLogin(login2A);
@@ -135,9 +119,6 @@ let prompterParent = runInParent(() => {
   pwmgr.addLogin(login2C);
   pwmgr.addLogin(login2D);
   pwmgr.addLogin(login2E);
-  pwmgr.addLogin(login3A);
-  pwmgr.addLogin(login3B);
-  pwmgr.addLogin(login4);
 });
 
 let prompter2 = new PrompterProxy(prompterParent);
@@ -419,231 +400,6 @@ add_task(function* test_changingMultiple2() {
   is(authinfo.username, "user2name", "Checking returned username");
   is(authinfo.password, "user2pass", "Checking returned password");
 });
-
-add_task(function* test_iframe() {
-  state = {
-    msg         : "http://mochi.test:8888 is requesting your username and password.\n\nThe site says: “mochitest”",
-    title       : "Authentication Required",
-    textValue   : "mochiuser1",
-    passValue   : "mochipass1",
-    iconClass   : "authentication-icon question-icon",
-    titleHidden : true,
-    textHidden  : false,
-    passHidden  : false,
-    checkHidden : true,
-    checkMsg    : "",
-    checked     : false,
-    focused     : "textField",
-    defButton   : "button0",
-  };
-  action = {
-    buttonClick : "ok",
-  };
-  promptDone = handlePrompt(state, action);
-
-  // The following tests are driven by iframe loads
-
-  var iframeLoaded = onloadPromiseFor("iframe");
-  iframe.src = "authenticate.sjs?user=mochiuser1&pass=mochipass1";
-  yield promptDone;
-  yield iframeLoaded;
-  checkEchoedAuthInfo({user: "mochiuser1", pass: "mochipass1"},
-                      iframe.contentDocument);
-
-  state = {
-    msg         : "http://mochi.test:8888 is requesting your username and password.\n\nThe site says: “mochitest2”",
-    title       : "Authentication Required",
-    textValue   : "mochiuser2",
-    passValue   : "mochipass2",
-    iconClass   : "authentication-icon question-icon",
-    titleHidden : true,
-    textHidden  : false,
-    passHidden  : false,
-    checkHidden : true,
-    checkMsg    : "",
-    checked     : false,
-    focused     : "textField",
-    defButton   : "button0",
-  };
-  action = {
-    buttonClick : "ok",
-  };
-  promptDone = handlePrompt(state, action);
-  // We've already authenticated to this host:port. For this next
-  // request, the existing auth should be sent, we'll get a 401 reply,
-  // and we should prompt for new auth.
-  iframeLoaded = onloadPromiseFor("iframe");
-  iframe.src = "authenticate.sjs?user=mochiuser2&pass=mochipass2&realm=mochitest2";
-  yield promptDone;
-  yield iframeLoaded;
-  checkEchoedAuthInfo({user: "mochiuser2", pass: "mochipass2"},
-                      iframe.contentDocument);
-
-  // Now make a load that requests the realm from test 1000. It was
-  // already provided there, so auth will *not* be prompted for -- the
-  // networking layer already knows it!
-  iframeLoaded = onloadPromiseFor("iframe");
-  iframe.src = "authenticate.sjs?user=mochiuser1&pass=mochipass1";
-  yield iframeLoaded;
-  checkEchoedAuthInfo({user: "mochiuser1", pass: "mochipass1"},
-                      iframe.contentDocument);
-
-  // Same realm we've already authenticated to, but with a different
-  // expected password (to trigger an auth prompt, and change-password
-  // popup notification).
-  state = {
-    msg         : "http://mochi.test:8888 is requesting your username and password.\n\nThe site says: “mochitest”",
-    title       : "Authentication Required",
-    textValue   : "mochiuser1",
-    passValue   : "mochipass1",
-    iconClass   : "authentication-icon question-icon",
-    titleHidden : true,
-    textHidden  : false,
-    passHidden  : false,
-    checkHidden : true,
-    checkMsg    : "",
-    checked     : false,
-    focused     : "textField",
-    defButton   : "button0",
-  };
-  action = {
-    buttonClick : "ok",
-    passField   : "mochipass1-new",
-  };
-  promptDone = handlePrompt(state, action);
-  iframeLoaded = onloadPromiseFor("iframe");
-  iframe.src = "authenticate.sjs?user=mochiuser1&pass=mochipass1-new";
-  yield promptDone;
-  yield iframeLoaded;
-  checkEchoedAuthInfo({user: "mochiuser1", pass: "mochipass1-new"},
-                      iframe.contentDocument);
-
-
-  var pwchanged = promiseStorageChanged(["modifyLogin"]);
-
-  // Check for the popup notification, and change the password.
-  var popupNotifications = getPopupNotifications(window.top);
-  popup = getPopup(popupNotifications, "password-change");
-  ok(popup, "got popup notification");
-  clickPopupButton(popup, kChangeButton);
-  popup.remove();
-
-  yield pwchanged;
-
-  // Housekeeping: change it back
-  runInParent(() => {
-    const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
-    Cu.import("resource://gre/modules/Services.jsm");
-
-    var tmpLogin = Cc["@mozilla.org/login-manager/loginInfo;1"].
-                   createInstance(Ci.nsILoginInfo);
-    tmpLogin.init("http://mochi.test:8888", null, "mochitest",
-                  "mochiuser1", "mochipass1-new", "", "");
-    var login3A = Cc["@mozilla.org/login-manager/loginInfo;1"].
-                  createInstance(Ci.nsILoginInfo);
-    login3A.init("http://mochi.test:8888", null, "mochitest",
-                 "mochiuser1", "mochipass1", "", "");
-
-    Services.logins.modifyLogin(tmpLogin, login3A);
-  });
-
-  // Same as last test, but for a realm we haven't already authenticated
-  // to (but have an existing saved login for, so that we'll trigger
-  // a change-password popup notification.
-  state = {
-    msg         : "http://mochi.test:8888 is requesting your username and password.\n\nThe site says: “mochitest3”",
-    title       : "Authentication Required",
-    textValue   : "mochiuser3",
-    passValue   : "mochipass3-old",
-    iconClass   : "authentication-icon question-icon",
-    titleHidden : true,
-    textHidden  : false,
-    passHidden  : false,
-    checkHidden : true,
-    checkMsg    : "",
-    checked     : false,
-    focused     : "textField",
-    defButton   : "button0",
-  };
-  action = {
-    buttonClick : "ok",
-    passField   : "mochipass3-new",
-  };
-  promptDone = handlePrompt(state, action);
-  iframeLoaded = onloadPromiseFor("iframe");
-  iframe.src = "authenticate.sjs?user=mochiuser3&pass=mochipass3-new&realm=mochitest3";
-  yield promptDone;
-  yield iframeLoaded;
-  checkEchoedAuthInfo({user: "mochiuser3", pass: "mochipass3-new"},
-                      iframe.contentDocument);
-
-  pwchanged = promiseStorageChanged(["modifyLogin"]);
-
-  // Check for the popup notification, and change the password.
-  popup = getPopup(popupNotifications, "password-change");
-  ok(popup, "got popup notification");
-  clickPopupButton(popup, kChangeButton);
-  popup.remove();
-
-  yield pwchanged;
-
-  // Housekeeping: change it back to the original login4. Actually,
-  // just delete it and we'll re-add it as the next test.
-  runInParent(() => {
-    const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
-    Cu.import("resource://gre/modules/Services.jsm");
-
-    var tmpLogin = Cc["@mozilla.org/login-manager/loginInfo;1"].
-                   createInstance(Ci.nsILoginInfo);
-    tmpLogin.init("http://mochi.test:8888", null, "mochitest3",
-                  "mochiuser3", "mochipass3-new", "", "");
-    Services.logins.removeLogin(tmpLogin);
-
-    // Clear cached auth from this subtest, and avoid leaking due to bug 459620.
-    var authMgr = Cc['@mozilla.org/network/http-auth-manager;1'].
-                  getService(Ci.nsIHttpAuthManager);
-    authMgr.clearAll();
-  });
-
-  state = {
-    msg         : "http://mochi.test:8888 is requesting your username and password.\n\nThe site says: “mochitest3”",
-    title       : "Authentication Required",
-    textValue   : "",
-    passValue   : "",
-    iconClass   : "authentication-icon question-icon",
-    titleHidden : true,
-    textHidden  : false,
-    passHidden  : false,
-    checkHidden : true,
-    checkMsg    : "",
-    checked     : false,
-    focused     : "textField",
-    defButton   : "button0",
-  };
-  action = {
-    buttonClick : "ok",
-    textField   : "mochiuser3",
-    passField   : "mochipass3-old",
-  };
-  // Trigger a new prompt, so we can test adding a new login.
-  promptDone = handlePrompt(state, action);
-
-  iframeLoaded = onloadPromiseFor("iframe");
-  iframe.src = "authenticate.sjs?user=mochiuser3&pass=mochipass3-old&realm=mochitest3";
-  yield promptDone;
-  yield iframeLoaded;
-  checkEchoedAuthInfo({user: "mochiuser3", pass: "mochipass3-old"},
-                      iframe.contentDocument);
-
-  var pwsaved = promiseStorageChanged(["addLogin"]);
-
-  // Check for the popup notification, and change the password.
-  popup = getPopup(popupNotifications, "password-save");
-  ok(popup, "got popup notification");
-  clickPopupButton(popup, kRememberButton);
-  popup.remove();
-  yield pwsaved;
-});
 
 
From 5547aa8006e444d73d7ff790bb78fb61e5eab00e Mon Sep 17 00:00:00 2001 From: Justin Dolske Date: Fri, 26 Aug 2016 15:20:48 -0700 Subject: [PATCH 11/24] Bug 1298208 - followup fix for correct JS type. CLOSED TREE --- browser/components/migration/content/migration.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/components/migration/content/migration.js b/browser/components/migration/content/migration.js index ceb7d4ddbf57..a0e9c70bf95a 100644 --- a/browser/components/migration/content/migration.js +++ b/browser/components/migration/content/migration.js @@ -428,7 +428,7 @@ var MigrationWizard = { this.reportDataRecencyTelemetry(); } if (this._autoMigrate) { - let hasImportedHomepage = this._newHomePage && this._newHomePage != "DEFAULT"; + let hasImportedHomepage = !!(this._newHomePage && this._newHomePage != "DEFAULT"); Services.telemetry.getKeyedHistogramById("FX_MIGRATION_IMPORTED_HOMEPAGE") .add(this._source, hasImportedHomepage); if (this._newHomePage) { From afb0a9831b1158188394b75508a15d63ac1212ca Mon Sep 17 00:00:00 2001 From: Marco Bonardo Date: Thu, 25 Aug 2016 10:41:36 +1000 Subject: [PATCH 12/24] Bug 1297941 - eraseEverything may send notifications in the wrong order, causing an invalid GuidHelper cache. r=kcambridge MozReview-Commit-ID: EolOzGkLbg9 --HG-- extra : rebase_source : 89fcc1ee1b2b1aec2105b5022087df6d77530b0a extra : amend_source : 3b72c9d90363458ebd4744713230a5f167ea09b2 --- toolkit/components/places/Bookmarks.jsm | 6 +- .../test_bookmarks_eraseEverything.js | 32 ++++++++++- .../bookmarks/test_bookmarks_notifications.js | 55 +++++++++++++++++-- .../tests/bookmarks/test_bookmarks_remove.js | 4 +- 4 files changed, 84 insertions(+), 13 deletions(-) diff --git a/toolkit/components/places/Bookmarks.jsm b/toolkit/components/places/Bookmarks.jsm index 749b6ced0857..c885b6dc20d8 100644 --- a/toolkit/components/places/Bookmarks.jsm +++ b/toolkit/components/places/Bookmarks.jsm @@ -1434,10 +1434,10 @@ Task.async(function* (db, folderGuids, options) { b.type, url, b.guid, p.guid AS parentGuid, b.dateAdded, b.lastModified, b.title, p.parent AS _grandParentId, NULL AS _childCount - FROM moz_bookmarks b + FROM descendants + JOIN moz_bookmarks b ON did = b.id JOIN moz_bookmarks p ON p.id = b.parent - LEFT JOIN moz_places h ON b.fk = h.id - WHERE b.id IN descendants`, { folderGuid }); + LEFT JOIN moz_places h ON b.fk = h.id`, { folderGuid }); itemsRemoved = itemsRemoved.concat(rowsToItemsArray(rows)); diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js index 2998d60fdf13..b2510c8a056e 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js @@ -81,6 +81,32 @@ add_task(function* test_eraseEverything_roots() { Assert.ok(yield PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.rootGuid)); }); -function run_test() { - run_next_test(); -} +add_task(function* test_eraseEverything_reparented() { + // Create a folder with 1 bookmark in it... + let folder1 = yield PlacesUtils.bookmarks.insert({ + parentGuid: PlacesUtils.bookmarks.toolbarGuid, + type: PlacesUtils.bookmarks.TYPE_FOLDER + }); + let bookmark1 = yield PlacesUtils.bookmarks.insert({ + parentGuid: folder1.guid, + url: "http://example.com/" + }); + // ...and a second folder. + let folder2 = yield PlacesUtils.bookmarks.insert({ + parentGuid: PlacesUtils.bookmarks.toolbarGuid, + type: PlacesUtils.bookmarks.TYPE_FOLDER + }); + + // Reparent the bookmark to the 2nd folder. + bookmark1.parentGuid = folder2.guid; + yield PlacesUtils.bookmarks.update(bookmark1); + + // Erase everything. + yield PlacesUtils.bookmarks.eraseEverything(); + + // All the above items should no longer be in the GUIDHelper cache. + for (let guid of [folder1.guid, bookmark1.guid, folder2.guid]) { + yield Assert.rejects(PlacesUtils.promiseItemId(guid), + /no item found for the given GUID/); + } +}); diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js index 5831999e7bdc..3f7a6a06c05b 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js @@ -363,15 +363,16 @@ add_task(function* eraseEverything_notification() { let observer = expectNotifications(); yield PlacesUtils.bookmarks.eraseEverything(); + // Bookmarks should always be notified before their parents. observer.check([ { name: "onItemRemoved", + arguments: [ itemId, parentId, bm.index, bm.type, + bm.url, bm.guid, bm.parentGuid, + Ci.nsINavBookmarksService.SOURCE_DEFAULT ] }, + { name: "onItemRemoved", arguments: [ folder2Id, folder2ParentId, folder2.index, folder2.type, null, folder2.guid, folder2.parentGuid, Ci.nsINavBookmarksService.SOURCE_DEFAULT ] }, - { name: "onItemRemoved", - arguments: [ itemId, parentId, bm.index, bm.type, - bm.url, bm.guid, bm.parentGuid, - Ci.nsINavBookmarksService.SOURCE_DEFAULT ] }, { name: "onItemRemoved", arguments: [ folder1Id, folder1ParentId, folder1.index, folder1.type, null, folder1.guid, @@ -388,7 +389,51 @@ add_task(function* eraseEverything_notification() { toolbarBm.index, toolbarBm.type, toolbarBm.url, toolbarBm.guid, toolbarBm.parentGuid, - Ci.nsINavBookmarksService.SOURCE_DEFAULT ] } + Ci.nsINavBookmarksService.SOURCE_DEFAULT ] }, + ]); +}); + +add_task(function* eraseEverything_reparented_notification() { + // Let's start from a clean situation. + yield PlacesUtils.bookmarks.eraseEverything(); + + let folder1 = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); + let folder1Id = yield PlacesUtils.promiseItemId(folder1.guid); + let folder1ParentId = yield PlacesUtils.promiseItemId(folder1.parentGuid); + + let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, + parentGuid: folder1.guid, + url: new URL("http://example.com/") }); + let itemId = yield PlacesUtils.promiseItemId(bm.guid); + + let folder2 = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); + let folder2Id = yield PlacesUtils.promiseItemId(folder2.guid); + let folder2ParentId = yield PlacesUtils.promiseItemId(folder2.parentGuid); + + bm.parentGuid = folder2.guid; + bm = yield PlacesUtils.bookmarks.update(bm); + let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); + + let observer = expectNotifications(); + yield PlacesUtils.bookmarks.eraseEverything(); + + // Bookmarks should always be notified before their parents. + observer.check([ { name: "onItemRemoved", + arguments: [ itemId, parentId, bm.index, bm.type, + bm.url, bm.guid, bm.parentGuid, + Ci.nsINavBookmarksService.SOURCE_DEFAULT ] }, + { name: "onItemRemoved", + arguments: [ folder2Id, folder2ParentId, folder2.index, + folder2.type, null, folder2.guid, + folder2.parentGuid, + Ci.nsINavBookmarksService.SOURCE_DEFAULT ] }, + { name: "onItemRemoved", + arguments: [ folder1Id, folder1ParentId, folder1.index, + folder1.type, null, folder1.guid, + folder1.parentGuid, + Ci.nsINavBookmarksService.SOURCE_DEFAULT ] }, ]); }); diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js index 09d0e9f23b0e..b180fe48abd5 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js @@ -190,8 +190,8 @@ add_task(function* test_nested_content_fails_when_not_allowed() { let folder2 = yield PlacesUtils.bookmarks.insert({ parentGuid: folder1.guid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: "a folder" }); - Assert.rejects(PlacesUtils.bookmarks.remove(folder1, {preventRemovalOfNonEmptyFolders: true}), - /Cannot remove a non-empty folder./); + yield Assert.rejects(PlacesUtils.bookmarks.remove(folder1, {preventRemovalOfNonEmptyFolders: true}), + /Cannot remove a non-empty folder./); }); function run_test() { From db86a2648fbfdbc19af4e69de6e50797124936c6 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Thu, 25 Aug 2016 17:18:30 +0200 Subject: [PATCH 13/24] Bug 1295608 - Migrate devtools/client/inspector to use l10n.js instead of Services.string;r=pbro MozReview-Commit-ID: KD0AmgDTpbX --HG-- extra : rebase_source : 0579eb5dc7c60084d62908a9b092cbe45eea2673 --- .../animation-controller.js | 4 +- .../components/animation-time-block.js | 4 +- .../components/rate-selector.js | 4 +- devtools/client/animationinspector/utils.js | 4 +- .../client/inspector/computed/computed.js | 11 +- devtools/client/inspector/inspector-panel.js | 136 +++++++++--------- devtools/client/inspector/markup/markup.js | 13 +- .../client/inspector/rules/models/rule.js | 10 +- devtools/client/inspector/rules/rules.js | 8 -- .../inspector/rules/views/rule-editor.js | 12 +- .../inspector/shared/style-inspector-menu.js | 55 ++++--- devtools/client/inspector/toolsidebar.js | 22 --- 12 files changed, 118 insertions(+), 165 deletions(-) diff --git a/devtools/client/animationinspector/animation-controller.js b/devtools/client/animationinspector/animation-controller.js index 2b2117c21a8b..59ac5f84c033 100644 --- a/devtools/client/animationinspector/animation-controller.js +++ b/devtools/client/animationinspector/animation-controller.js @@ -22,9 +22,7 @@ loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter"); loader.lazyRequireGetter(this, "AnimationsFront", "devtools/shared/fronts/animation", true); const { LocalizationHelper } = require("devtools/shared/l10n"); - -const STRINGS_URI = "devtools/locale/animationinspector.properties"; -const L10N = new LocalizationHelper(STRINGS_URI); +const L10N = new LocalizationHelper("devtools/locale/animationinspector.properties"); // Global toolbox/inspector, set when startup is called. var gToolbox, gInspector; diff --git a/devtools/client/animationinspector/components/animation-time-block.js b/devtools/client/animationinspector/components/animation-time-block.js index d0cee841b8cd..2a68a8344b10 100644 --- a/devtools/client/animationinspector/components/animation-time-block.js +++ b/devtools/client/animationinspector/components/animation-time-block.js @@ -10,9 +10,7 @@ const EventEmitter = require("devtools/shared/event-emitter"); const {createNode, TimeScale} = require("devtools/client/animationinspector/utils"); const { LocalizationHelper } = require("devtools/shared/l10n"); - -const STRINGS_URI = "devtools/locale/animationinspector.properties"; -const L10N = new LocalizationHelper(STRINGS_URI); +const L10N = new LocalizationHelper("devtools/locale/animationinspector.properties"); /** * UI component responsible for displaying a single animation timeline, which diff --git a/devtools/client/animationinspector/components/rate-selector.js b/devtools/client/animationinspector/components/rate-selector.js index a4d764135bb7..48cefb4565cb 100644 --- a/devtools/client/animationinspector/components/rate-selector.js +++ b/devtools/client/animationinspector/components/rate-selector.js @@ -9,9 +9,7 @@ const EventEmitter = require("devtools/shared/event-emitter"); const {createNode} = require("devtools/client/animationinspector/utils"); const { LocalizationHelper } = require("devtools/shared/l10n"); - -const STRINGS_URI = "devtools/locale/animationinspector.properties"; -const L10N = new LocalizationHelper(STRINGS_URI); +const L10N = new LocalizationHelper("devtools/locale/animationinspector.properties"); // List of playback rate presets displayed in the timeline toolbar. const PLAYBACK_RATES = [.1, .25, .5, 1, 2, 5, 10]; diff --git a/devtools/client/animationinspector/utils.js b/devtools/client/animationinspector/utils.js index 9a616531f5f3..9619fb59036a 100644 --- a/devtools/client/animationinspector/utils.js +++ b/devtools/client/animationinspector/utils.js @@ -9,9 +9,7 @@ loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter"); const { LocalizationHelper } = require("devtools/shared/l10n"); - -const STRINGS_URI = "devtools/locale/animationinspector.properties"; -const L10N = new LocalizationHelper(STRINGS_URI); +const L10N = new LocalizationHelper("devtools/locale/animationinspector.properties"); // How many times, maximum, can we loop before we find the optimal time // interval in the timeline graph. diff --git a/devtools/client/inspector/computed/computed.js b/devtools/client/inspector/computed/computed.js index 17f86d9911ce..69c71d7747f6 100644 --- a/devtools/client/inspector/computed/computed.js +++ b/devtools/client/inspector/computed/computed.js @@ -32,10 +32,9 @@ const clipboardHelper = require("devtools/shared/platform/clipboard"); XPCOMUtils.defineLazyModuleGetter(this, "PluralForm", "resource://gre/modules/PluralForm.jsm"); -XPCOMUtils.defineLazyGetter(CssComputedView, "_strings", function () { - return Services.strings.createBundle( - "chrome://devtools-shared/locale/styleinspector.properties"); -}); +const STYLE_INSPECTOR_PROPERTIES = "devtools-shared/locale/styleinspector.properties"; +const {LocalizationHelper} = require("devtools/shared/l10n"); +const STYLE_INSPECTOR_L10N = new LocalizationHelper(STYLE_INSPECTOR_PROPERTIES); const FILTER_CHANGED_TIMEOUT = 150; const HTML_NS = "http://www.w3.org/1999/xhtml"; @@ -210,7 +209,7 @@ function CssComputedView(inspector, document, pageStyle) { } /** - * Memoized lookup of a l10n string from a string bundle. + * Lookup a l10n string in the shared styleinspector string bundle. * * @param {String} name * The key to lookup. @@ -218,7 +217,7 @@ function CssComputedView(inspector, document, pageStyle) { */ CssComputedView.l10n = function (name) { try { - return CssComputedView._strings.GetStringFromName(name); + return STYLE_INSPECTOR_L10N.getStr(name); } catch (ex) { console.log("Error reading '" + name + "'"); throw new Error("l10n error with " + name); diff --git a/devtools/client/inspector/inspector-panel.js b/devtools/client/inspector/inspector-panel.js index 450af821ebc0..f2a15c68c5e4 100644 --- a/devtools/client/inspector/inspector-panel.js +++ b/devtools/client/inspector/inspector-panel.js @@ -31,12 +31,9 @@ const {ToolSidebar} = require("devtools/client/inspector/toolsidebar"); const {ViewHelpers} = require("devtools/client/shared/widgets/view-helpers"); const clipboardHelper = require("devtools/shared/platform/clipboard"); -loader.lazyGetter(this, "strings", () => { - return Services.strings.createBundle("chrome://devtools/locale/inspector.properties"); -}); -loader.lazyGetter(this, "toolboxStrings", () => { - return Services.strings.createBundle("chrome://devtools/locale/toolbox.properties"); -}); +const {LocalizationHelper} = require("devtools/shared/l10n"); +const INSPECTOR_L10N = new LocalizationHelper("devtools/locale/inspector.properties"); +const TOOLBOX_L10N = new LocalizationHelper("devtools/locale/toolbox.properties"); /** * Represents an open instance of the Inspector for a tab. @@ -213,7 +210,7 @@ InspectorPanel.prototype = { notificationBox.getNotificationWithValue("inspector-script-paused"); if (!notification && this._toolbox.currentToolId == "inspector" && this._toolbox.threadClient.paused) { - let message = strings.GetStringFromName("debuggerPausedWarning.message"); + let message = INSPECTOR_L10N.getStr("debuggerPausedWarning.message"); notificationBox.appendNotification(message, "inspector-script-paused", "", notificationBox.PRIORITY_WARNING_HIGH); } @@ -361,7 +358,7 @@ InspectorPanel.prototype = { let shortcuts = new KeyShortcuts({ window: this.panelDoc.defaultView, }); - let key = strings.GetStringFromName("inspector.searchHTML.key"); + let key = INSPECTOR_L10N.getStr("inspector.searchHTML.key"); shortcuts.on(key, (name, event) => { // Prevent overriding same shortcut from the computed/rule views if (event.target.closest("#sidebar-panel-ruleview") || @@ -381,11 +378,10 @@ InspectorPanel.prototype = { let str = ""; if (event !== "search-cleared") { if (result) { - str = strings.formatStringFromName( - "inspector.searchResultsCount2", - [result.resultsIndex + 1, result.resultsLength], 2); + str = INSPECTOR_L10N.getFormatStr( + "inspector.searchResultsCount2", result.resultsIndex + 1, result.resultsLength); } else { - str = strings.GetStringFromName("inspector.searchResultsNone"); + str = INSPECTOR_L10N.getStr("inspector.searchResultsNone"); } } @@ -423,12 +419,12 @@ InspectorPanel.prototype = { // Append all side panels this.sidebar.addExistingTab( "ruleview", - strings.GetStringFromName("inspector.sidebar.ruleViewTitle"), + INSPECTOR_L10N.getStr("inspector.sidebar.ruleViewTitle"), defaultTab == "ruleview"); this.sidebar.addExistingTab( "computedview", - strings.GetStringFromName("inspector.sidebar.computedViewTitle"), + INSPECTOR_L10N.getStr("inspector.sidebar.computedViewTitle"), defaultTab == "computedview"); this._setDefaultSidebar = (event, toolId) => { @@ -443,7 +439,7 @@ InspectorPanel.prototype = { if (this.target.form.animationsActor) { this.sidebar.addFrameTab( "animationinspector", - strings.GetStringFromName("inspector.sidebar.animationInspectorTitle"), + INSPECTOR_L10N.getStr("inspector.sidebar.animationInspectorTitle"), "chrome://devtools/content/animationinspector/animation-inspector.xhtml", defaultTab == "animationinspector"); } @@ -452,7 +448,7 @@ InspectorPanel.prototype = { this.canGetUsedFontFaces) { this.sidebar.addExistingTab( "fontinspector", - strings.GetStringFromName("inspector.sidebar.fontInspectorTitle"), + INSPECTOR_L10N.getStr("inspector.sidebar.fontInspectorTitle"), defaultTab == "fontinspector"); this.fontInspector = new FontInspector(this, this.panelWin); @@ -519,8 +515,8 @@ InspectorPanel.prototype = { let sidebarToggle = SidebarToggle({ onClick: this.onPaneToggleButtonClicked, collapsed: false, - expandPaneTitle: strings.GetStringFromName("inspector.expandPane"), - collapsePaneTitle: strings.GetStringFromName("inspector.collapsePane"), + expandPaneTitle: INSPECTOR_L10N.getStr("inspector.expandPane"), + collapsePaneTitle: INSPECTOR_L10N.getStr("inspector.collapsePane"), }); let parentBox = this.panelDoc.getElementById("inspector-sidebar-toggle-box"); @@ -875,37 +871,37 @@ InspectorPanel.prototype = { let menu = new Menu(); menu.append(new MenuItem({ id: "node-menu-edithtml", - label: strings.GetStringFromName("inspectorHTMLEdit.label"), - accesskey: strings.GetStringFromName("inspectorHTMLEdit.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorHTMLEdit.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorHTMLEdit.accesskey"), disabled: !isEditableElement || !this.isOuterHTMLEditable, click: () => this.editHTML(), })); menu.append(new MenuItem({ id: "node-menu-add", - label: strings.GetStringFromName("inspectorAddNode.label"), - accesskey: strings.GetStringFromName("inspectorAddNode.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorAddNode.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorAddNode.accesskey"), disabled: !this.canAddHTMLChild(), click: () => this.addNode(), })); menu.append(new MenuItem({ id: "node-menu-duplicatenode", - label: strings.GetStringFromName("inspectorDuplicateNode.label"), + label: INSPECTOR_L10N.getStr("inspectorDuplicateNode.label"), hidden: !this._supportsDuplicateNode, disabled: !isDuplicatableElement, click: () => this.duplicateNode(), })); menu.append(new MenuItem({ id: "node-menu-delete", - label: strings.GetStringFromName("inspectorHTMLDelete.label"), - accesskey: strings.GetStringFromName("inspectorHTMLDelete.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorHTMLDelete.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorHTMLDelete.accesskey"), disabled: !isEditableElement, click: () => this.deleteNode(), })); menu.append(new MenuItem({ - label: strings.GetStringFromName("inspectorAttributesSubmenu.label"), + label: INSPECTOR_L10N.getStr("inspectorAttributesSubmenu.label"), accesskey: - strings.GetStringFromName("inspectorAttributesSubmenu.accesskey"), + INSPECTOR_L10N.getStr("inspectorAttributesSubmenu.accesskey"), submenu: this._getAttributesSubmenu(isEditableElement), })); @@ -939,42 +935,42 @@ InspectorPanel.prototype = { let copySubmenu = new Menu(); copySubmenu.append(new MenuItem({ id: "node-menu-copyinner", - label: strings.GetStringFromName("inspectorCopyInnerHTML.label"), - accesskey: strings.GetStringFromName("inspectorCopyInnerHTML.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorCopyInnerHTML.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorCopyInnerHTML.accesskey"), disabled: !isSelectionElement, click: () => this.copyInnerHTML(), })); copySubmenu.append(new MenuItem({ id: "node-menu-copyouter", - label: strings.GetStringFromName("inspectorCopyOuterHTML.label"), - accesskey: strings.GetStringFromName("inspectorCopyOuterHTML.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorCopyOuterHTML.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorCopyOuterHTML.accesskey"), disabled: !isSelectionElement, click: () => this.copyOuterHTML(), })); copySubmenu.append(new MenuItem({ id: "node-menu-copyuniqueselector", - label: strings.GetStringFromName("inspectorCopyCSSSelector.label"), + label: INSPECTOR_L10N.getStr("inspectorCopyCSSSelector.label"), accesskey: - strings.GetStringFromName("inspectorCopyCSSSelector.accesskey"), + INSPECTOR_L10N.getStr("inspectorCopyCSSSelector.accesskey"), disabled: !isSelectionElement, hidden: !this.canGetUniqueSelector, click: () => this.copyUniqueSelector(), })); copySubmenu.append(new MenuItem({ id: "node-menu-copyimagedatauri", - label: strings.GetStringFromName("inspectorImageDataUri.label"), + label: INSPECTOR_L10N.getStr("inspectorImageDataUri.label"), disabled: !isSelectionElement || !markupContainer || !markupContainer.isPreviewable(), click: () => this.copyImageDataUri(), })); menu.append(new MenuItem({ - label: strings.GetStringFromName("inspectorCopyHTMLSubmenu.label"), + label: INSPECTOR_L10N.getStr("inspectorCopyHTMLSubmenu.label"), submenu: copySubmenu, })); menu.append(new MenuItem({ - label: strings.GetStringFromName("inspectorPasteHTMLSubmenu.label"), + label: INSPECTOR_L10N.getStr("inspectorPasteHTMLSubmenu.label"), submenu: this._getPasteSubmenu(isEditableElement), })); @@ -986,13 +982,13 @@ InspectorPanel.prototype = { markupContainer.hasChildren; menu.append(new MenuItem({ id: "node-menu-expand", - label: strings.GetStringFromName("inspectorExpandNode.label"), + label: INSPECTOR_L10N.getStr("inspectorExpandNode.label"), disabled: !isNodeWithChildren, click: () => this.expandNode(), })); menu.append(new MenuItem({ id: "node-menu-collapse", - label: strings.GetStringFromName("inspectorCollapseNode.label"), + label: INSPECTOR_L10N.getStr("inspectorCollapseNode.label"), disabled: !isNodeWithChildren || !markupContainer.expanded, click: () => this.collapseNode(), })); @@ -1003,27 +999,27 @@ InspectorPanel.prototype = { menu.append(new MenuItem({ id: "node-menu-scrollnodeintoview", - label: strings.GetStringFromName("inspectorScrollNodeIntoView.label"), + label: INSPECTOR_L10N.getStr("inspectorScrollNodeIntoView.label"), accesskey: - strings.GetStringFromName("inspectorScrollNodeIntoView.accesskey"), + INSPECTOR_L10N.getStr("inspectorScrollNodeIntoView.accesskey"), hidden: !this._supportsScrollIntoView, disabled: !isSelectionElement, click: () => this.scrollNodeIntoView(), })); menu.append(new MenuItem({ id: "node-menu-screenshotnode", - label: strings.GetStringFromName("inspectorScreenshotNode.label"), + label: INSPECTOR_L10N.getStr("inspectorScreenshotNode.label"), disabled: !isScreenshotable, click: () => this.screenshotNode(), })); menu.append(new MenuItem({ id: "node-menu-useinconsole", - label: strings.GetStringFromName("inspectorUseInConsole.label"), + label: INSPECTOR_L10N.getStr("inspectorUseInConsole.label"), click: () => this.useInConsole(), })); menu.append(new MenuItem({ id: "node-menu-showdomproperties", - label: strings.GetStringFromName("inspectorShowDOMProperties.label"), + label: INSPECTOR_L10N.getStr("inspectorShowDOMProperties.label"), click: () => this.showDOMProperties(), })); @@ -1055,47 +1051,47 @@ InspectorPanel.prototype = { let pasteSubmenu = new Menu(); pasteSubmenu.append(new MenuItem({ id: "node-menu-pasteinnerhtml", - label: strings.GetStringFromName("inspectorPasteInnerHTML.label"), - accesskey: strings.GetStringFromName("inspectorPasteInnerHTML.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorPasteInnerHTML.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorPasteInnerHTML.accesskey"), disabled: !isPasteable || !this.canPasteInnerOrAdjacentHTML, click: () => this.pasteInnerHTML(), })); pasteSubmenu.append(new MenuItem({ id: "node-menu-pasteouterhtml", - label: strings.GetStringFromName("inspectorPasteOuterHTML.label"), - accesskey: strings.GetStringFromName("inspectorPasteOuterHTML.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorPasteOuterHTML.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorPasteOuterHTML.accesskey"), disabled: !isPasteable || !this.isOuterHTMLEditable, click: () => this.pasteOuterHTML(), })); pasteSubmenu.append(new MenuItem({ id: "node-menu-pastebefore", - label: strings.GetStringFromName("inspectorHTMLPasteBefore.label"), + label: INSPECTOR_L10N.getStr("inspectorHTMLPasteBefore.label"), accesskey: - strings.GetStringFromName("inspectorHTMLPasteBefore.accesskey"), + INSPECTOR_L10N.getStr("inspectorHTMLPasteBefore.accesskey"), disabled: disableAdjacentPaste, click: () => this.pasteAdjacentHTML("beforeBegin"), })); pasteSubmenu.append(new MenuItem({ id: "node-menu-pasteafter", - label: strings.GetStringFromName("inspectorHTMLPasteAfter.label"), + label: INSPECTOR_L10N.getStr("inspectorHTMLPasteAfter.label"), accesskey: - strings.GetStringFromName("inspectorHTMLPasteAfter.accesskey"), + INSPECTOR_L10N.getStr("inspectorHTMLPasteAfter.accesskey"), disabled: disableAdjacentPaste, click: () => this.pasteAdjacentHTML("afterEnd"), })); pasteSubmenu.append(new MenuItem({ id: "node-menu-pastefirstchild", - label: strings.GetStringFromName("inspectorHTMLPasteFirstChild.label"), + label: INSPECTOR_L10N.getStr("inspectorHTMLPasteFirstChild.label"), accesskey: - strings.GetStringFromName("inspectorHTMLPasteFirstChild.accesskey"), + INSPECTOR_L10N.getStr("inspectorHTMLPasteFirstChild.accesskey"), disabled: disableFirstLastPaste, click: () => this.pasteAdjacentHTML("afterBegin"), })); pasteSubmenu.append(new MenuItem({ id: "node-menu-pastelastchild", - label: strings.GetStringFromName("inspectorHTMLPasteLastChild.label"), + label: INSPECTOR_L10N.getStr("inspectorHTMLPasteLastChild.label"), accesskey: - strings.GetStringFromName("inspectorHTMLPasteLastChild.accesskey"), + INSPECTOR_L10N.getStr("inspectorHTMLPasteLastChild.accesskey"), disabled: disableFirstLastPaste, click: () => this.pasteAdjacentHTML("beforeEnd"), })); @@ -1111,26 +1107,26 @@ InspectorPanel.prototype = { attributesSubmenu.append(new MenuItem({ id: "node-menu-add-attribute", - label: strings.GetStringFromName("inspectorAddAttribute.label"), - accesskey: strings.GetStringFromName("inspectorAddAttribute.accesskey"), + label: INSPECTOR_L10N.getStr("inspectorAddAttribute.label"), + accesskey: INSPECTOR_L10N.getStr("inspectorAddAttribute.accesskey"), disabled: !isEditableElement, click: () => this.onAddAttribute(), })); attributesSubmenu.append(new MenuItem({ id: "node-menu-edit-attribute", - label: strings.formatStringFromName("inspectorEditAttribute.label", - [isAttributeClicked ? `"${nodeInfo.name}"` : ""], 1), - accesskey: strings.GetStringFromName("inspectorEditAttribute.accesskey"), + label: INSPECTOR_L10N.getFormatStr("inspectorEditAttribute.label", + isAttributeClicked ? `"${nodeInfo.name}"` : ""), + accesskey: INSPECTOR_L10N.getStr("inspectorEditAttribute.accesskey"), disabled: !isAttributeClicked, click: () => this.onEditAttribute(), })); attributesSubmenu.append(new MenuItem({ id: "node-menu-remove-attribute", - label: strings.formatStringFromName("inspectorRemoveAttribute.label", - [isAttributeClicked ? `"${nodeInfo.name}"` : ""], 1), + label: INSPECTOR_L10N.getFormatStr("inspectorRemoveAttribute.label", + isAttributeClicked ? `"${nodeInfo.name}"` : ""), accesskey: - strings.GetStringFromName("inspectorRemoveAttribute.accesskey"), + INSPECTOR_L10N.getStr("inspectorRemoveAttribute.accesskey"), disabled: !isAttributeClicked, click: () => this.onRemoveAttribute(), })); @@ -1168,25 +1164,25 @@ InspectorPanel.prototype = { // Links can't be opened in new tabs in the browser toolbox. if (type === "uri" && !this.target.chrome) { linkFollow.visible = true; - linkFollow.label = strings.GetStringFromName( + linkFollow.label = INSPECTOR_L10N.getStr( "inspector.menu.openUrlInNewTab.label"); } else if (type === "cssresource") { linkFollow.visible = true; - linkFollow.label = toolboxStrings.GetStringFromName( + linkFollow.label = TOOLBOX_L10N.getStr( "toolbox.viewCssSourceInStyleEditor.label"); } else if (type === "jsresource") { linkFollow.visible = true; - linkFollow.label = toolboxStrings.GetStringFromName( + linkFollow.label = TOOLBOX_L10N.getStr( "toolbox.viewJsSourceInDebugger.label"); } linkCopy.visible = true; - linkCopy.label = strings.GetStringFromName( + linkCopy.label = INSPECTOR_L10N.getStr( "inspector.menu.copyUrlToClipboard.label"); } else if (type === "idref") { linkFollow.visible = true; - linkFollow.label = strings.formatStringFromName( - "inspector.menu.selectElement.label", [popupNode.dataset.link], 1); + linkFollow.label = INSPECTOR_L10N.getFormatStr( + "inspector.menu.selectElement.label", popupNode.dataset.link); } return [linkFollow, linkCopy]; @@ -1210,7 +1206,7 @@ InspectorPanel.prototype = { this._markupBox.appendChild(this._markupFrame); this._markupFrame.setAttribute("src", "chrome://devtools/content/inspector/markup/markup.xhtml"); this._markupFrame.setAttribute("aria-label", - strings.GetStringFromName("inspector.panelLabel.markupView")); + INSPECTOR_L10N.getStr("inspector.panelLabel.markupView")); }, _onMarkupFrameLoad: function () { diff --git a/devtools/client/inspector/markup/markup.js b/devtools/client/inspector/markup/markup.js index 4b8310dd7f86..4e4bc36820c4 100644 --- a/devtools/client/inspector/markup/markup.js +++ b/devtools/client/inspector/markup/markup.js @@ -61,6 +61,9 @@ const {KeyCodes} = require("devtools/client/shared/keycodes"); const {AutocompletePopup} = require("devtools/client/shared/autocomplete-popup"); const clipboardHelper = require("devtools/shared/platform/clipboard"); +const {LocalizationHelper} = require("devtools/shared/l10n"); +const INSPECTOR_L10N = new LocalizationHelper("devtools/locale/inspector.properties"); + XPCOMUtils.defineLazyModuleGetter(this, "PluralForm", "resource://gre/modules/PluralForm.jsm"); @@ -686,7 +689,7 @@ MarkupView.prototype = { ["markupView.hide.key", "markupView.edit.key", "markupView.scrollInto.key"].forEach(name => { - let key = this.strings.GetStringFromName(name); + let key = INSPECTOR_L10N.getStr(name); shortcuts.on(key, (_, event) => this._onShortcut(name, event)); }); @@ -1666,9 +1669,9 @@ MarkupView.prototype = { if (!(children.hasFirst && children.hasLast)) { let nodesCount = container.node.numChildren; let showAllString = PluralForm.get(nodesCount, - this.strings.GetStringFromName("markupView.more.showAll2")); + INSPECTOR_L10N.getStr("markupView.more.showAll2")); let data = { - showing: this.strings.GetStringFromName("markupView.more.showing"), + showing: INSPECTOR_L10N.getStr("markupView.more.showing"), showAll: showAllString.replace("#1", nodesCount), allButtonClick: () => { container.maxChildren = -1; @@ -3616,8 +3619,4 @@ function getAutocompleteMaxWidth(element, container) { return containerRect.right - elementRect.left - 2; } -loader.lazyGetter(MarkupView.prototype, "strings", () => Services.strings.createBundle( - "chrome://devtools/locale/inspector.properties" -)); - exports.MarkupView = MarkupView; diff --git a/devtools/client/inspector/rules/models/rule.js b/devtools/client/inspector/rules/models/rule.js index 39a552b25e91..98b08010c5f1 100644 --- a/devtools/client/inspector/rules/models/rule.js +++ b/devtools/client/inspector/rules/models/rule.js @@ -15,6 +15,10 @@ const {promiseWarn} = require("devtools/client/inspector/shared/utils"); const {parseDeclarations} = require("devtools/shared/css-parsing-utils"); const Services = require("Services"); +const STYLE_INSPECTOR_PROPERTIES = "devtools-shared/locale/styleinspector.properties"; +const {LocalizationHelper} = require("devtools/shared/l10n"); +const STYLE_INSPECTOR_L10N = new LocalizationHelper(STYLE_INSPECTOR_PROPERTIES); + /** * Rule is responsible for the following: * Manages a single style declaration or rule. @@ -80,8 +84,7 @@ Rule.prototype = { eltText += "#" + this.inherited.id; } this._inheritedSource = - CssLogic._strings.formatStringFromName("rule.inheritedFrom", - [eltText], 1); + STYLE_INSPECTOR_L10N.getFormatStr("rule.inheritedFrom", eltText); } return this._inheritedSource; }, @@ -93,8 +96,7 @@ Rule.prototype = { this._keyframesName = ""; if (this.keyframes) { this._keyframesName = - CssLogic._strings.formatStringFromName("rule.keyframe", - [this.keyframes.name], 1); + STYLE_INSPECTOR_L10N.getFormatStr("rule.keyframe", this.keyframes.name); } return this._keyframesName; }, diff --git a/devtools/client/inspector/rules/rules.js b/devtools/client/inspector/rules/rules.js index c22a98057815..0bb9049f62e0 100644 --- a/devtools/client/inspector/rules/rules.js +++ b/devtools/client/inspector/rules/rules.js @@ -10,9 +10,6 @@ const promise = require("promise"); const defer = require("devtools/shared/defer"); const Services = require("Services"); -/* eslint-disable mozilla/reject-some-requires */ -const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm"); -/* eslint-enable mozilla/reject-some-requires */ const {Task} = require("devtools/shared/task"); const {Tools} = require("devtools/client/definitions"); const {l10n} = require("devtools/shared/inspector/css-logic"); @@ -32,11 +29,6 @@ const StyleInspectorMenu = require("devtools/client/inspector/shared/style-inspe const {KeyShortcuts} = require("devtools/client/shared/key-shortcuts"); const clipboardHelper = require("devtools/shared/platform/clipboard"); -XPCOMUtils.defineLazyGetter(this, "_strings", function () { - return Services.strings.createBundle( - "chrome://devtools-shared/locale/styleinspector.properties"); -}); - const {AutocompletePopup} = require("devtools/client/shared/autocomplete-popup"); const HTML_NS = "http://www.w3.org/1999/xhtml"; diff --git a/devtools/client/inspector/rules/views/rule-editor.js b/devtools/client/inspector/rules/views/rule-editor.js index b558657b0a76..611b54c8ef71 100644 --- a/devtools/client/inspector/rules/views/rule-editor.js +++ b/devtools/client/inspector/rules/views/rule-editor.js @@ -4,9 +4,6 @@ "use strict"; -/* eslint-disable mozilla/reject-some-requires */ -const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm"); -/* eslint-enable mozilla/reject-some-requires */ const {l10n} = require("devtools/shared/inspector/css-logic"); const {ELEMENT_STYLE} = require("devtools/shared/specs/styles"); const {PREF_ORIG_SOURCES} = require("devtools/client/styleeditor/utils"); @@ -31,10 +28,9 @@ const promise = require("promise"); const Services = require("Services"); const EventEmitter = require("devtools/shared/event-emitter"); -XPCOMUtils.defineLazyGetter(this, "_strings", function () { - return Services.strings.createBundle( - "chrome://devtools-shared/locale/styleinspector.properties"); -}); +const STYLE_INSPECTOR_PROPERTIES = "devtools-shared/locale/styleinspector.properties"; +const {LocalizationHelper} = require("devtools/shared/l10n"); +const STYLE_INSPECTOR_L10N = new LocalizationHelper(STYLE_INSPECTOR_PROPERTIES); const HTML_NS = "http://www.w3.org/1999/xhtml"; const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; @@ -239,7 +235,7 @@ RuleEditor.prototype = { } if (this.rule.isSystem) { - let uaLabel = _strings.GetStringFromName("rule.userAgentStyles"); + let uaLabel = STYLE_INSPECTOR_L10N.getStr("rule.userAgentStyles"); sourceLabel.setAttribute("value", uaLabel + " " + title); // Special case about:PreferenceStyleSheet, as it is generated on the diff --git a/devtools/client/inspector/shared/style-inspector-menu.js b/devtools/client/inspector/shared/style-inspector-menu.js index 10da841b648b..1a6a6f36bed1 100644 --- a/devtools/client/inspector/shared/style-inspector-menu.js +++ b/devtools/client/inspector/shared/style-inspector-menu.js @@ -3,7 +3,6 @@ /* 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 _strings */ "use strict"; @@ -16,10 +15,10 @@ const MenuItem = require("devtools/client/framework/menu-item"); const overlays = require("devtools/client/inspector/shared/style-inspector-overlays"); const clipboardHelper = require("devtools/shared/platform/clipboard"); -loader.lazyGetter(this, "_strings", () => { - return Services.strings - .createBundle("chrome://devtools-shared/locale/styleinspector.properties"); -}); + +const STYLE_INSPECTOR_PROPERTIES = "devtools-shared/locale/styleinspector.properties"; +const {LocalizationHelper} = require("devtools/shared/l10n"); +const STYLE_INSPECTOR_L10N = new LocalizationHelper(STYLE_INSPECTOR_PROPERTIES); const PREF_ENABLE_MDN_DOCS_TOOLTIP = "devtools.inspector.mdnDocsTooltip.enabled"; @@ -83,22 +82,22 @@ StyleInspectorMenu.prototype = { let menu = new Menu(); let menuitemCopy = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copy"), - accesskey: _strings.GetStringFromName("styleinspector.contextmenu.copy.accessKey"), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copy"), + accesskey: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copy.accessKey"), click: () => { this._onCopy(); }, disabled: !this._hasTextSelected(), }); let menuitemCopyLocation = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copyLocation"), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyLocation"), click: () => { this._onCopyLocation(); }, visible: false, }); let menuitemCopyRule = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copyRule"), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyRule"), click: () => { this._onCopyRule(); }, @@ -106,8 +105,8 @@ StyleInspectorMenu.prototype = { }); let copyColorAccessKey = "styleinspector.contextmenu.copyColor.accessKey"; let menuitemCopyColor = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copyColor"), - accesskey: _strings.GetStringFromName(copyColorAccessKey), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyColor"), + accesskey: STYLE_INSPECTOR_L10N.getStr(copyColorAccessKey), click: () => { this._onCopyColor(); }, @@ -115,8 +114,8 @@ StyleInspectorMenu.prototype = { }); let copyUrlAccessKey = "styleinspector.contextmenu.copyUrl.accessKey"; let menuitemCopyUrl = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copyUrl"), - accesskey: _strings.GetStringFromName(copyUrlAccessKey), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyUrl"), + accesskey: STYLE_INSPECTOR_L10N.getStr(copyUrlAccessKey), click: () => { this._onCopyUrl(); }, @@ -124,8 +123,8 @@ StyleInspectorMenu.prototype = { }); let copyImageAccessKey = "styleinspector.contextmenu.copyImageDataUrl.accessKey"; let menuitemCopyImageDataUrl = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copyImageDataUrl"), - accesskey: _strings.GetStringFromName(copyImageAccessKey), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyImageDataUrl"), + accesskey: STYLE_INSPECTOR_L10N.getStr(copyImageAccessKey), click: () => { this._onCopyImageDataUrl(); }, @@ -133,28 +132,28 @@ StyleInspectorMenu.prototype = { }); let copyPropDeclarationLabel = "styleinspector.contextmenu.copyPropertyDeclaration"; let menuitemCopyPropertyDeclaration = new MenuItem({ - label: _strings.GetStringFromName(copyPropDeclarationLabel), + label: STYLE_INSPECTOR_L10N.getStr(copyPropDeclarationLabel), click: () => { this._onCopyPropertyDeclaration(); }, visible: false, }); let menuitemCopyPropertyName = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copyPropertyName"), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyPropertyName"), click: () => { this._onCopyPropertyName(); }, visible: false, }); let menuitemCopyPropertyValue = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copyPropertyValue"), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyPropertyValue"), click: () => { this._onCopyPropertyValue(); }, visible: false, }); let menuitemCopySelector = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.copySelector"), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copySelector"), click: () => { this._onCopySelector(); }, @@ -199,8 +198,8 @@ StyleInspectorMenu.prototype = { // Select All let selectAllAccessKey = "styleinspector.contextmenu.selectAll.accessKey"; let menuitemSelectAll = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.selectAll"), - accesskey: _strings.GetStringFromName(selectAllAccessKey), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.selectAll"), + accesskey: STYLE_INSPECTOR_L10N.getStr(selectAllAccessKey), click: () => { this._onSelectAll(); }, @@ -214,8 +213,8 @@ StyleInspectorMenu.prototype = { // Add new rule let addRuleAccessKey = "styleinspector.contextmenu.addNewRule.accessKey"; let menuitemAddRule = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.addNewRule"), - accesskey: _strings.GetStringFromName(addRuleAccessKey), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.addNewRule"), + accesskey: STYLE_INSPECTOR_L10N.getStr(addRuleAccessKey), click: () => { this._onAddNewRule(); }, @@ -228,8 +227,8 @@ StyleInspectorMenu.prototype = { // Show MDN Docs let mdnDocsAccessKey = "styleinspector.contextmenu.showMdnDocs.accessKey"; let menuitemShowMdnDocs = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.showMdnDocs"), - accesskey: _strings.GetStringFromName(mdnDocsAccessKey), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.showMdnDocs"), + accesskey: STYLE_INSPECTOR_L10N.getStr(mdnDocsAccessKey), click: () => { this._onShowMdnDocs(); }, @@ -241,8 +240,8 @@ StyleInspectorMenu.prototype = { // Show Original Sources let sourcesAccessKey = "styleinspector.contextmenu.toggleOrigSources.accessKey"; let menuitemSources = new MenuItem({ - label: _strings.GetStringFromName("styleinspector.contextmenu.toggleOrigSources"), - accesskey: _strings.GetStringFromName(sourcesAccessKey), + label: STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.toggleOrigSources"), + accesskey: STYLE_INSPECTOR_L10N.getStr(sourcesAccessKey), click: () => { this._onToggleOrigSources(); }, @@ -397,7 +396,7 @@ StyleInspectorMenu.prototype = { message = yield data.data.string(); } catch (e) { message = - _strings.GetStringFromName("styleinspector.copyImageDataUrlError"); + STYLE_INSPECTOR_L10N.getStr("styleinspector.copyImageDataUrlError"); } clipboardHelper.copyString(message); diff --git a/devtools/client/inspector/toolsidebar.js b/devtools/client/inspector/toolsidebar.js index 84f3ab2fe835..ec3acbd12b13 100644 --- a/devtools/client/inspector/toolsidebar.js +++ b/devtools/client/inspector/toolsidebar.js @@ -6,13 +6,9 @@ "use strict"; -var Services = require("Services"); var EventEmitter = require("devtools/shared/event-emitter"); var Telemetry = require("devtools/client/shared/telemetry"); var { Task } = require("devtools/shared/task"); -/* eslint-disable mozilla/reject-some-requires */ -var { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm"); -/* eslint-enable mozilla/reject-some-requires */ /** * This object represents replacement for ToolSidebar @@ -302,21 +298,3 @@ ToolSidebar.prototype = { this._toolPanel = null; }) }; - -XPCOMUtils.defineLazyGetter(this, "l10n", function () { - let bundle = Services.strings.createBundle( - "chrome://devtools/locale/toolbox.properties"); - - let l10n = function (name, ...args) { - try { - if (args.length == 0) { - return bundle.GetStringFromName(name); - } - return bundle.formatStringFromName(name, args, args.length); - } catch (err) { - console.error(err); - } - return null; - }; - return l10n; -}); From 12e3f9098291f2f3d4e0ba51f0948beb290c5208 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Thu, 25 Aug 2016 17:17:06 +0200 Subject: [PATCH 14/24] Bug 1295608 - Migrate devtools/client/inspector/test to use l10n.js;r=pbro MozReview-Commit-ID: Hgu4BJ6B1Ct --HG-- extra : rebase_source : 63c33d601e15892d03c647ea9bd82a6d02746cd1 --- ...animation_animated_properties_displayed.js | 7 +++--- ...rowser_animation_empty_on_invalid_nodes.js | 9 ++------ ...browser_animation_running_on_compositor.js | 13 ++++------- .../client/animationinspector/test/head.js | 2 ++ .../markup/test/browser_markup_links_04.js | 22 +++++++++---------- .../test/browser_rules_add-rule-with-menu.js | 2 +- .../rules/test/browser_rules_content_02.js | 18 +++++---------- ...ser_rules_context-menu-show-mdn-docs-01.js | 2 +- ...ser_rules_context-menu-show-mdn-docs-02.js | 2 +- ...ser_rules_context-menu-show-mdn-docs-03.js | 2 +- .../rules/test/browser_rules_copy_styles.js | 16 +++++++------- .../rules/test/browser_rules_media-queries.js | 5 +---- .../browser_rules_select-and-copy-styles.js | 6 ++--- devtools/client/inspector/rules/test/head.js | 4 ++-- ...yleinspector_context-menu-copy-color_02.js | 2 +- ...r_styleinspector_context-menu-copy-urls.js | 10 +++------ devtools/client/inspector/shared/test/head.js | 3 +-- devtools/client/inspector/test/head.js | 8 ++++--- 18 files changed, 55 insertions(+), 78 deletions(-) diff --git a/devtools/client/animationinspector/test/browser_animation_animated_properties_displayed.js b/devtools/client/animationinspector/test/browser_animation_animated_properties_displayed.js index 9e3e32d69652..7da3a96d69ff 100644 --- a/devtools/client/animationinspector/test/browser_animation_animated_properties_displayed.js +++ b/devtools/client/animationinspector/test/browser_animation_animated_properties_displayed.js @@ -4,9 +4,8 @@ "use strict"; -const { LocalizationHelper } = require("devtools/shared/l10n"); -const STRINGS_URI = "global/locale/layout_errors.properties"; -const L10N = new LocalizationHelper(STRINGS_URI); +const LAYOUT_ERRORS_L10N = + new LocalizationHelper("global/locale/layout_errors.properties"); // Test that when an animation is selected, its list of animated properties is // displayed below it. @@ -79,7 +78,7 @@ function hasExpectedWarnings(containerEl) { for (let warning of warnings) { let warningID = "CompositorAnimationWarningTransformWithGeometricProperties"; - if (warning.getAttribute("title") == L10N.getStr(warningID)) { + if (warning.getAttribute("title") == LAYOUT_ERRORS_L10N.getStr(warningID)) { return true; } } diff --git a/devtools/client/animationinspector/test/browser_animation_empty_on_invalid_nodes.js b/devtools/client/animationinspector/test/browser_animation_empty_on_invalid_nodes.js index da42bfec2579..9fda89a9a411 100644 --- a/devtools/client/animationinspector/test/browser_animation_empty_on_invalid_nodes.js +++ b/devtools/client/animationinspector/test/browser_animation_empty_on_invalid_nodes.js @@ -7,11 +7,6 @@ requestLongerTimeout(2); // Test that the panel shows no animation data for invalid or not animated nodes -const { LocalizationHelper } = require("devtools/shared/l10n"); - -const STRINGS_URI = "devtools/locale/animationinspector.properties"; -const L10N = new LocalizationHelper(STRINGS_URI); - add_task(function* () { yield addTab(URL_ROOT + "doc_simple_animation.html"); let {inspector, panel, window} = yield openAnimationInspector(); @@ -28,7 +23,7 @@ add_task(function* () { is(panel.animationsTimelineComponent.animationsEl.childNodes.length, 0, "No animation displayed in the timeline component for a still node"); is(document.querySelector("#error-type").textContent, - L10N.getStr("panel.invalidElementSelected"), + ANIMATION_L10N.getStr("panel.invalidElementSelected"), "The correct error message is displayed"); info("Select the comment text node and check that the panel is empty"); @@ -42,6 +37,6 @@ add_task(function* () { is(panel.animationsTimelineComponent.animationsEl.childNodes.length, 0, "No animation displayed in the timeline component for a text node"); is(document.querySelector("#error-type").textContent, - L10N.getStr("panel.invalidElementSelected"), + ANIMATION_L10N.getStr("panel.invalidElementSelected"), "The correct error message is displayed"); }); diff --git a/devtools/client/animationinspector/test/browser_animation_running_on_compositor.js b/devtools/client/animationinspector/test/browser_animation_running_on_compositor.js index ba0623683268..775b2f5aba2b 100644 --- a/devtools/client/animationinspector/test/browser_animation_running_on_compositor.js +++ b/devtools/client/animationinspector/test/browser_animation_running_on_compositor.js @@ -9,11 +9,6 @@ requestLongerTimeout(2); // Test that when animations displayed in the timeline are running on the // compositor, they get a special icon and information in the tooltip. -const { LocalizationHelper } = require("devtools/shared/l10n"); - -const STRINGS_URI = "devtools/locale/animationinspector.properties"; -const L10N = new LocalizationHelper(STRINGS_URI); - add_task(function* () { yield addTab(URL_ROOT + "doc_simple_animation.html"); let {inspector, panel} = yield openAnimationInspector(); @@ -26,7 +21,7 @@ add_task(function* () { ok(animationEl.classList.contains("fast-track"), "The animation element has the fast-track css class"); ok(hasTooltip(animationEl, - L10N.getStr("player.allPropertiesOnCompositorTooltip")), + ANIMATION_L10N.getStr("player.allPropertiesOnCompositorTooltip")), "The animation element has the right tooltip content"); info("Select a node we know doesn't have an animation on the compositor"); @@ -36,10 +31,10 @@ add_task(function* () { ok(!animationEl.classList.contains("fast-track"), "The animation element does not have the fast-track css class"); ok(!hasTooltip(animationEl, - L10N.getStr("player.allPropertiesOnCompositorTooltip")), + ANIMATION_L10N.getStr("player.allPropertiesOnCompositorTooltip")), "The animation element does not have oncompositor tooltip content"); ok(!hasTooltip(animationEl, - L10N.getStr("player.somePropertiesOnCompositorTooltip")), + ANIMATION_L10N.getStr("player.somePropertiesOnCompositorTooltip")), "The animation element does not have oncompositor tooltip content"); info("Select a node we know has animation on the compositor and not on the" + @@ -50,7 +45,7 @@ add_task(function* () { ok(animationEl.classList.contains("fast-track"), "The animation element has the fast-track css class"); ok(hasTooltip(animationEl, - L10N.getStr("player.somePropertiesOnCompositorTooltip")), + ANIMATION_L10N.getStr("player.somePropertiesOnCompositorTooltip")), "The animation element has the right tooltip content"); }); diff --git a/devtools/client/animationinspector/test/head.js b/devtools/client/animationinspector/test/head.js index 18b21c725226..485e50e76d00 100644 --- a/devtools/client/animationinspector/test/head.js +++ b/devtools/client/animationinspector/test/head.js @@ -14,6 +14,8 @@ Services.scriptloader.loadSubScript( const FRAME_SCRIPT_URL = CHROME_URL_ROOT + "doc_frame_script.js"; const COMMON_FRAME_SCRIPT_URL = "chrome://devtools/content/shared/frame-script-utils.js"; const TAB_NAME = "animationinspector"; +const ANIMATION_L10N = + new LocalizationHelper("devtools/locale/animationinspector.properties"); // Auto clean-up when a test ends registerCleanupFunction(function* () { diff --git a/devtools/client/inspector/markup/test/browser_markup_links_04.js b/devtools/client/inspector/markup/test/browser_markup_links_04.js index ec4faf9031dc..bf3e145527ca 100644 --- a/devtools/client/inspector/markup/test/browser_markup_links_04.js +++ b/devtools/client/inspector/markup/test/browser_markup_links_04.js @@ -8,10 +8,8 @@ // in an attribute. const TEST_URL = URL_ROOT + "doc_markup_links.html"; -const STRINGS = Services.strings - .createBundle("chrome://devtools/locale/inspector.properties"); -const TOOLBOX_STRINGS = Services.strings - .createBundle("chrome://devtools/locale/toolbox.properties"); + +const TOOLBOX_L10N = new LocalizationHelper("devtools/locale/toolbox.properties"); // The test case array contains objects with the following properties: // - selector: css selector for the node to select in the inspector @@ -28,9 +26,9 @@ const TEST_DATA = [{ popupNodeSelector: ".link", isLinkFollowItemVisible: true, isLinkCopyItemVisible: true, - linkFollowItemLabel: TOOLBOX_STRINGS.GetStringFromName( + linkFollowItemLabel: TOOLBOX_L10N.getStr( "toolbox.viewCssSourceInStyleEditor.label"), - linkCopyItemLabel: STRINGS.GetStringFromName( + linkCopyItemLabel: INSPECTOR_L10N.getStr( "inspector.menu.copyUrlToClipboard.label") }, { selector: "link[rel=icon]", @@ -38,9 +36,9 @@ const TEST_DATA = [{ popupNodeSelector: ".link", isLinkFollowItemVisible: true, isLinkCopyItemVisible: true, - linkFollowItemLabel: STRINGS.GetStringFromName( + linkFollowItemLabel: INSPECTOR_L10N.getStr( "inspector.menu.openUrlInNewTab.label"), - linkCopyItemLabel: STRINGS.GetStringFromName( + linkCopyItemLabel: INSPECTOR_L10N.getStr( "inspector.menu.copyUrlToClipboard.label") }, { selector: "link", @@ -54,17 +52,17 @@ const TEST_DATA = [{ popupNodeSelector: ".link", isLinkFollowItemVisible: true, isLinkCopyItemVisible: false, - linkFollowItemLabel: STRINGS.formatStringFromName( - "inspector.menu.selectElement.label", ["name"], 1) + linkFollowItemLabel: INSPECTOR_L10N.getFormatStr( + "inspector.menu.selectElement.label", "name") }, { selector: "script", attributeName: "src", popupNodeSelector: ".link", isLinkFollowItemVisible: true, isLinkCopyItemVisible: true, - linkFollowItemLabel: TOOLBOX_STRINGS.GetStringFromName( + linkFollowItemLabel: TOOLBOX_L10N.getStr( "toolbox.viewJsSourceInDebugger.label"), - linkCopyItemLabel: STRINGS.GetStringFromName( + linkCopyItemLabel: INSPECTOR_L10N.getStr( "inspector.menu.copyUrlToClipboard.label") }, { selector: "p[for]", diff --git a/devtools/client/inspector/rules/test/browser_rules_add-rule-with-menu.js b/devtools/client/inspector/rules/test/browser_rules_add-rule-with-menu.js index 8f533e2bd21f..c45fdf9d469f 100644 --- a/devtools/client/inspector/rules/test/browser_rules_add-rule-with-menu.js +++ b/devtools/client/inspector/rules/test/browser_rules_add-rule-with-menu.js @@ -22,7 +22,7 @@ function* addNewRuleFromContextMenu(inspector, view) { let allMenuItems = openStyleContextMenuAndGetAllItems(view, view.element); let menuitemAddRule = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.addNewRule")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.addNewRule")); ok(menuitemAddRule.visible, "Add rule is visible"); diff --git a/devtools/client/inspector/rules/test/browser_rules_content_02.js b/devtools/client/inspector/rules/test/browser_rules_content_02.js index 920c7709c1f1..253f374b4305 100644 --- a/devtools/client/inspector/rules/test/browser_rules_content_02.js +++ b/devtools/client/inspector/rules/test/browser_rules_content_02.js @@ -17,9 +17,6 @@ const CONTENT = ` `; -const STRINGS = Services.strings - .createBundle("chrome://devtools-shared/locale/styleinspector.properties"); - add_task(function* () { let tab = yield addTab("data:text/html;charset=utf-8," + CONTENT); @@ -36,13 +33,13 @@ function checkRuleViewContent({styleDocument}) { is(headers.length, 3, "There are 3 headers for inherited rules"); is(headers[0].textContent, - STRINGS.formatStringFromName("rule.inheritedFrom", ["p"], 1), + STYLE_INSPECTOR_L10N.getFormatStr("rule.inheritedFrom", "p"), "The first header is correct"); is(headers[1].textContent, - STRINGS.formatStringFromName("rule.inheritedFrom", ["div"], 1), + STYLE_INSPECTOR_L10N.getFormatStr("rule.inheritedFrom", "div"), "The second header is correct"); is(headers[2].textContent, - STRINGS.formatStringFromName("rule.inheritedFrom", ["body"], 1), + STYLE_INSPECTOR_L10N.getFormatStr("rule.inheritedFrom", "body"), "The third header is correct"); let rules = styleDocument.querySelectorAll(".ruleview-rule"); @@ -50,17 +47,14 @@ function checkRuleViewContent({styleDocument}) { for (let rule of rules) { let selector = rule.querySelector(".ruleview-selectorcontainer"); - is(selector.textContent, - STRINGS.GetStringFromName("rule.sourceElement"), + is(selector.textContent, STYLE_INSPECTOR_L10N.getStr("rule.sourceElement"), "The rule's selector is correct"); let propertyNames = [...rule.querySelectorAll(".ruleview-propertyname")]; - is(propertyNames.length, 1, - "There's only one property name, as expected"); + is(propertyNames.length, 1, "There's only one property name, as expected"); let propertyValues = [...rule.querySelectorAll(".ruleview-propertyvalue")]; - is(propertyValues.length, 1, - "There's only one property value, as expected"); + is(propertyValues.length, 1, "There's only one property value, as expected"); } } diff --git a/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-01.js b/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-01.js index e7fefdcc833a..b81bb8013874 100644 --- a/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-01.js +++ b/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-01.js @@ -61,7 +61,7 @@ function* testMdnContextMenuItemVisibility(view) { info("Creating context menu with " + node + " as popupNode"); let allMenuItems = openStyleContextMenuAndGetAllItems(view, node); let menuitemShowMdnDocs = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.showMdnDocs")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.showMdnDocs")); let isVisible = menuitemShowMdnDocs.visible; let shouldBeVisible = isPropertyNameNode(node); diff --git a/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-02.js b/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-02.js index a53a01a4d955..e0d08d28a300 100644 --- a/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-02.js +++ b/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-02.js @@ -45,7 +45,7 @@ add_task(function* () { let allMenuItems = openStyleContextMenuAndGetAllItems(view, nameSpan.firstChild); let menuitemShowMdnDocs = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.showMdnDocs")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.showMdnDocs")); let cssDocs = view.tooltips.cssDocs; diff --git a/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-03.js b/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-03.js index a7b24f0c0720..d1089fcf61c3 100644 --- a/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-03.js +++ b/devtools/client/inspector/rules/test/browser_rules_context-menu-show-mdn-docs-03.js @@ -105,7 +105,7 @@ function* testMdnContextMenuItemVisibility(view, shouldBeVisible) { let node = root.querySelector("." + PROPERTY_NAME_CLASS).firstChild; let allMenuItems = openStyleContextMenuAndGetAllItems(view, node); let menuitemShowMdnDocs = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.showMdnDocs")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.showMdnDocs")); let isVisible = menuitemShowMdnDocs.visible; is(isVisible, shouldBeVisible, diff --git a/devtools/client/inspector/rules/test/browser_rules_copy_styles.js b/devtools/client/inspector/rules/test/browser_rules_copy_styles.js index cf189f6b733e..e5e6f1ec92d9 100644 --- a/devtools/client/inspector/rules/test/browser_rules_copy_styles.js +++ b/devtools/client/inspector/rules/test/browser_rules_copy_styles.js @@ -215,21 +215,21 @@ add_task(function* () { function* checkCopyStyle(view, node, menuItemLabel, expectedPattern, visible) { let allMenuItems = openStyleContextMenuAndGetAllItems(view, node); let menuItem = allMenuItems.find(item => - item.label === _STRINGS.GetStringFromName(menuItemLabel)); + item.label === STYLE_INSPECTOR_L10N.getStr(menuItemLabel)); let menuitemCopy = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copy")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copy")); let menuitemCopyLocation = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copyLocation")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyLocation")); let menuitemCopyPropertyDeclaration = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copyPropertyDeclaration")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyPropertyDeclaration")); let menuitemCopyPropertyName = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copyPropertyName")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyPropertyName")); let menuitemCopyPropertyValue = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copyPropertyValue")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyPropertyValue")); let menuitemCopySelector = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copySelector")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copySelector")); let menuitemCopyRule = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copyRule")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyRule")); ok(menuitemCopy.disabled, "Copy disabled is as expected: true"); diff --git a/devtools/client/inspector/rules/test/browser_rules_media-queries.js b/devtools/client/inspector/rules/test/browser_rules_media-queries.js index a016deca024e..57ab1916361c 100644 --- a/devtools/client/inspector/rules/test/browser_rules_media-queries.js +++ b/devtools/client/inspector/rules/test/browser_rules_media-queries.js @@ -16,10 +16,7 @@ add_task(function* () { let elementStyle = view._elementStyle; - let _strings = Services.strings - .createBundle("chrome://devtools-shared/locale/styleinspector.properties"); - - let inline = _strings.GetStringFromName("rule.sourceInline"); + let inline = STYLE_INSPECTOR_L10N.getStr("rule.sourceInline"); is(elementStyle.rules.length, 3, "Should have 3 rules."); is(elementStyle.rules[0].title, inline, "check rule 0 title"); diff --git a/devtools/client/inspector/rules/test/browser_rules_select-and-copy-styles.js b/devtools/client/inspector/rules/test/browser_rules_select-and-copy-styles.js index 6d4b5e261725..6a6946a84f50 100644 --- a/devtools/client/inspector/rules/test/browser_rules_select-and-copy-styles.js +++ b/devtools/client/inspector/rules/test/browser_rules_select-and-copy-styles.js @@ -69,7 +69,7 @@ function* checkCopySelection(view) { let allMenuItems = openStyleContextMenuAndGetAllItems(view, prop); let menuitemCopy = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copy")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copy")); ok(menuitemCopy.visible, "Copy menu item is displayed as expected"); @@ -103,7 +103,7 @@ function* checkSelectAll(view) { let allMenuItems = openStyleContextMenuAndGetAllItems(view, prop); let menuitemCopy = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copy")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copy")); ok(menuitemCopy.visible, "Copy menu item is displayed as expected"); @@ -131,7 +131,7 @@ function* checkCopyEditorValue(view) { let allMenuItems = openStyleContextMenuAndGetAllItems(view, editor.input); let menuitemCopy = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copy")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copy")); ok(menuitemCopy.visible, "Copy menu item is displayed as expected"); diff --git a/devtools/client/inspector/rules/test/head.js b/devtools/client/inspector/rules/test/head.js index 212912cb22e4..47699cfb863e 100644 --- a/devtools/client/inspector/rules/test/head.js +++ b/devtools/client/inspector/rules/test/head.js @@ -19,8 +19,8 @@ var {getInplaceEditorForSpan: inplaceEditor} = const ROOT_TEST_DIR = getRootDirectory(gTestPath); const FRAME_SCRIPT_URL = ROOT_TEST_DIR + "doc_frame_script.js"; -const _STRINGS = Services.strings.createBundle( - "chrome://devtools-shared/locale/styleinspector.properties"); + +const STYLE_INSPECTOR_L10N = new LocalizationHelper("chrome://devtools-shared/locale/styleinspector.properties"); registerCleanupFunction(() => { Services.prefs.clearUserPref("devtools.defaultColorUnit"); diff --git a/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-color_02.js b/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-color_02.js index b275442d86c8..5dee0e1ee954 100644 --- a/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-color_02.js +++ b/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-color_02.js @@ -35,7 +35,7 @@ function* testCopyToClipboard(inspector, view) { let allMenuItems = openStyleContextMenuAndGetAllItems(view, element); let menuitemCopyColor = allMenuItems.find(item => item.label === - _STRINGS.GetStringFromName("styleinspector.contextmenu.copyColor")); + STYLE_INSPECTOR_L10N.getStr("styleinspector.contextmenu.copyColor")); ok(menuitemCopyColor.visible, "Copy color is visible"); diff --git a/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-urls.js b/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-urls.js index c7c44cd6f726..45d0a94fa628 100644 --- a/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-urls.js +++ b/devtools/client/inspector/shared/test/browser_styleinspector_context-menu-copy-urls.js @@ -5,17 +5,13 @@ /* Tests both Copy URL and Copy Data URL context menu items */ -const PROPERTIES_URL = "chrome://devtools-shared/locale/styleinspector.properties"; const TEST_DATA_URI = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs="; // Invalid URL still needs to be reachable otherwise getImageDataUrl will // timeout. DevTools chrome:// URLs aren't content accessible, so use some // random resource:// URL here. const INVALID_IMAGE_URI = "resource://devtools/client/definitions.js"; - -const ERROR_MESSAGE = Services.strings - .createBundle(PROPERTIES_URL) - .GetStringFromName("styleinspector.copyImageDataUrlError"); +const ERROR_MESSAGE = STYLE_INSPECTOR_L10N.getStr("styleinspector.copyImageDataUrlError"); add_task(function* () { const TEST_URI = `