diff --git a/accessible/tests/mochitest/name/test_general.xul b/accessible/tests/mochitest/name/test_general.xul
index 97c422492110..3aac6e5328db 100644
--- a/accessible/tests/mochitest/name/test_general.xul
+++ b/accessible/tests/mochitest/name/test_general.xul
@@ -238,7 +238,7 @@
-
diff --git a/browser/components/preferences/connection.xul b/browser/components/preferences/connection.xul
index ccfa7f7d9d2c..26b86283294a 100644
--- a/browser/components/preferences/connection.xul
+++ b/browser/components/preferences/connection.xul
@@ -68,8 +68,8 @@
-
+
@@ -88,8 +88,8 @@
-
+
@@ -100,8 +100,8 @@
-
+
@@ -112,8 +112,8 @@
-
+
diff --git a/browser/installer/allowed-dupes.mn b/browser/installer/allowed-dupes.mn
index 097616ac3cc5..31767bc637e4 100644
--- a/browser/installer/allowed-dupes.mn
+++ b/browser/installer/allowed-dupes.mn
@@ -95,7 +95,7 @@ chrome/toolkit/skin/classic/global/global.css
chrome/toolkit/skin/classic/global/icons/close-win7.png
chrome/toolkit/skin/classic/global/menu.css
chrome/toolkit/skin/classic/global/menulist.css
-chrome/toolkit/skin/classic/global/numberbox.css
+chrome/toolkit/skin/classic/global/numberinput.css
chrome/toolkit/skin/classic/global/popup.css
chrome/toolkit/skin/classic/global/preferences.css
chrome/toolkit/skin/classic/global/radio.css
diff --git a/browser/modules/test/browser/browser_UsageTelemetry.js b/browser/modules/test/browser/browser_UsageTelemetry.js
index 27fa9c4b0807..3838759c5950 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry.js
@@ -20,23 +20,24 @@ Services.obs.notifyObservers(null, TELEMETRY_SUBSESSION_TOPIC);
* Get a snapshot of the scalars and check them against the provided values.
*/
let checkScalars = (countsObject) => {
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
// Check the expected values. Scalars that are never set must not be reported.
- checkScalar(scalars, MAX_CONCURRENT_TABS, countsObject.maxTabs,
- "The maximum tab count must match the expected value.");
- checkScalar(scalars, TAB_EVENT_COUNT, countsObject.tabOpenCount,
- "The number of open tab event count must match the expected value.");
- checkScalar(scalars, MAX_CONCURRENT_WINDOWS, countsObject.maxWindows,
- "The maximum window count must match the expected value.");
- checkScalar(scalars, WINDOW_OPEN_COUNT, countsObject.windowsOpenCount,
- "The number of window open event count must match the expected value.");
- checkScalar(scalars, TOTAL_URI_COUNT, countsObject.totalURIs,
- "The total URI count must match the expected value.");
- checkScalar(scalars, UNIQUE_DOMAINS_COUNT, countsObject.domainCount,
- "The unique domains count must match the expected value.");
- checkScalar(scalars, UNFILTERED_URI_COUNT, countsObject.totalUnfilteredURIs,
- "The unfiltered URI count must match the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, MAX_CONCURRENT_TABS, countsObject.maxTabs,
+ "The maximum tab count must match the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, TAB_EVENT_COUNT, countsObject.tabOpenCount,
+ "The number of open tab event count must match the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, MAX_CONCURRENT_WINDOWS, countsObject.maxWindows,
+ "The maximum window count must match the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, WINDOW_OPEN_COUNT, countsObject.windowsOpenCount,
+ "The number of window open event count must match the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, TOTAL_URI_COUNT, countsObject.totalURIs,
+ "The total URI count must match the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, UNIQUE_DOMAINS_COUNT, countsObject.domainCount,
+ "The unique domains count must match the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, UNFILTERED_URI_COUNT, countsObject.totalUnfilteredURIs,
+ "The unfiltered URI count must match the expected value.");
};
add_task(async function test_tabsAndWindows() {
@@ -141,7 +142,7 @@ function checkTabCountHistogram(result, expected, message) {
add_task(async function test_tabsHistogram() {
let openedTabs = [];
- let tabCountHist = getAndClearHistogram("TAB_COUNT");
+ let tabCountHist = TelemetryTestUtils.getAndClearHistogram("TAB_COUNT");
checkTabCountHistogram(tabCountHist.snapshot(), {}, "TAB_COUNT telemetry - initial tab counts");
diff --git a/browser/modules/test/browser/browser_UsageTelemetry_content.js b/browser/modules/test/browser/browser_UsageTelemetry_content.js
index bae2d1fcaa63..415f915cd32b 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry_content.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry_content.js
@@ -49,7 +49,7 @@ add_task(async function test_context_menu() {
// Let's reset the Telemetry data.
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
// Open a new tab with a page containing some text.
let tab =
@@ -75,18 +75,21 @@ add_task(async function test_context_menu() {
searchItem.click();
info("Validate the search metrics.");
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_CONTEXT_MENU, "search", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_CONTEXT_MENU, "search", 1);
Assert.equal(Object.keys(scalars[SCALAR_CONTEXT_MENU]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch.contextmenu", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.contextmenu", 1);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "contextmenu", null, {engine: "other-MozSearch"}]]);
+ TelemetryTestUtils.assertEvents(events, [
+ ["navigation", "search", "contextmenu", null, {engine: "other-MozSearch"}],
+ ]);
contextMenu.hidePopup();
BrowserTestUtils.removeTab(gBrowser.selectedTab);
@@ -97,7 +100,7 @@ add_task(async function test_about_newtab() {
// Let's reset the counts.
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:newtab", false);
await ContentTask.spawn(tab.linkedBrowser, null, async function() {
@@ -111,18 +114,21 @@ add_task(async function test_about_newtab() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_ABOUT_NEWTAB, "search_enter", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_ABOUT_NEWTAB, "search_enter", 1);
Assert.equal(Object.keys(scalars[SCALAR_ABOUT_NEWTAB]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch.newtab", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.newtab", 1);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "about_newtab", "enter", {engine: "other-MozSearch"}]]);
+ TelemetryTestUtils.assertEvents(events, [
+ ["navigation", "search", "about_newtab", "enter", {engine: "other-MozSearch"}],
+ ]);
BrowserTestUtils.removeTab(tab);
});
diff --git a/browser/modules/test/browser/browser_UsageTelemetry_content_aboutHome.js b/browser/modules/test/browser/browser_UsageTelemetry_content_aboutHome.js
index 39c0b537db96..0389efcbcdb9 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry_content_aboutHome.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry_content_aboutHome.js
@@ -49,7 +49,7 @@ add_task(async function test_abouthome_activitystream_simpleQuery() {
// Let's reset the counts.
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
@@ -69,18 +69,21 @@ add_task(async function test_abouthome_activitystream_simpleQuery() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_ABOUT_HOME, "search_enter", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_ABOUT_HOME, "search_enter", 1);
Assert.equal(Object.keys(scalars[SCALAR_ABOUT_HOME]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch.abouthome", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.abouthome", 1);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "about_home", "enter", {engine: "other-MozSearch"}]]);
+ TelemetryTestUtils.assertEvents(events, [
+ ["navigation", "search", "about_home", "enter", {engine: "other-MozSearch"}],
+ ]);
BrowserTestUtils.removeTab(tab);
});
diff --git a/browser/modules/test/browser/browser_UsageTelemetry_content_aboutRestartRequired.js b/browser/modules/test/browser/browser_UsageTelemetry_content_aboutRestartRequired.js
index cf94215a78fa..f5352b07f262 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry_content_aboutRestartRequired.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry_content_aboutRestartRequired.js
@@ -11,7 +11,7 @@ add_task(async function test_aboutRestartRequired() {
Services.telemetry.clearScalars();
let scalars =
- getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTOUT);
+ TelemetryTestUtils.getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTOUT);
// Check preconditions
is(scalars[SCALAR_BUILDID_MISMATCH], undefined,
@@ -23,7 +23,7 @@ add_task(async function test_aboutRestartRequired() {
gBrowser.selectedTab.linkedBrowser);
scalars =
- getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTOUT);
+ TelemetryTestUtils.getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTOUT);
is(scalars[SCALAR_BUILDID_MISMATCH], 1,
"Build ID mismatch count should be 1.");
diff --git a/browser/modules/test/browser/browser_UsageTelemetry_domains.js b/browser/modules/test/browser/browser_UsageTelemetry_domains.js
index 1939edfa2b39..5f5bd538be5d 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry_domains.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry_domains.js
@@ -49,13 +49,14 @@ add_task(async function test_URIAndDomainCounts() {
let checkCounts = (countsObject) => {
// Get a snapshot of the scalars and then clear them.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
- checkScalar(scalars, TOTAL_URI_COUNT, countsObject.totalURIs,
- "The URI scalar must contain the expected value.");
- checkScalar(scalars, UNIQUE_DOMAINS_COUNT, countsObject.domainCount,
- "The unique domains scalar must contain the expected value.");
- checkScalar(scalars, UNFILTERED_URI_COUNT, countsObject.totalUnfilteredURIs,
- "The unfiltered URI scalar must contain the expected value.");
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
+ TelemetryTestUtils.assertScalar(scalars, TOTAL_URI_COUNT, countsObject.totalURIs,
+ "The URI scalar must contain the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, UNIQUE_DOMAINS_COUNT, countsObject.domainCount,
+ "The unique domains scalar must contain the expected value.");
+ TelemetryTestUtils.assertScalar(scalars, UNFILTERED_URI_COUNT, countsObject.totalUnfilteredURIs,
+ "The unfiltered URI scalar must contain the expected value.");
};
// Check that about:blank doesn't get counted in the URI total.
diff --git a/browser/modules/test/browser/browser_UsageTelemetry_private_and_restore.js b/browser/modules/test/browser/browser_UsageTelemetry_private_and_restore.js
index eedcfc5757c0..2a39cb4d647d 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry_private_and_restore.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry_private_and_restore.js
@@ -30,7 +30,8 @@ add_task(async function test_privateMode() {
await BrowserTestUtils.browserLoaded(privateWin.gBrowser.selectedBrowser);
// Check that tab and window count is recorded.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
ok(!(TOTAL_URI_COUNT in scalars), "We should not track URIs in private mode.");
ok(!(UNFILTERED_URI_COUNT in scalars), "We should not track URIs in private mode.");
@@ -79,7 +80,8 @@ add_task(async function test_sessionRestore() {
await tabRestored;
// Check that the URI is not recorded.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN);
ok(!(TOTAL_URI_COUNT in scalars), "We should not track URIs from restored sessions.");
ok(!(UNFILTERED_URI_COUNT in scalars), "We should not track URIs from restored sessions.");
diff --git a/browser/modules/test/browser/browser_UsageTelemetry_searchbar.js b/browser/modules/test/browser/browser_UsageTelemetry_searchbar.js
index d9c9d93a37bb..02d620f10853 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry_searchbar.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry_searchbar.js
@@ -97,8 +97,10 @@ add_task(async function test_plainQuery() {
// Let's reset the counts.
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let resultMethodHist = getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let resultMethodHist =
+ TelemetryTestUtils.getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
+ let search_hist =
+ TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -109,18 +111,21 @@ add_task(async function test_plainQuery() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_SEARCHBAR, "search_enter", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_SEARCHBAR, "search_enter", 1);
Assert.equal(Object.keys(scalars[SCALAR_SEARCHBAR]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch.searchbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.searchbar", 1);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "searchbar", "enter", {engine: "other-MozSearch"}]]);
+ TelemetryTestUtils.assertEvents(events, [
+ ["navigation", "search", "searchbar", "enter", {engine: "other-MozSearch"}],
+ ]);
// Check the histograms as well.
let resultMethods = resultMethodHist.snapshot();
@@ -137,8 +142,10 @@ add_task(async function test_oneOff_enter() {
// Let's reset the counts.
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let resultMethodHist = getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let resultMethodHist =
+ TelemetryTestUtils.getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
+ let search_hist =
+ TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -152,18 +159,21 @@ add_task(async function test_oneOff_enter() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_SEARCHBAR, "search_oneoff", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_SEARCHBAR, "search_oneoff", 1);
Assert.equal(Object.keys(scalars[SCALAR_SEARCHBAR]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch2.searchbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch2.searchbar", 1);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "searchbar", "oneoff", {engine: "other-MozSearch2"}]]);
+ TelemetryTestUtils.assertEvents(events, [
+ ["navigation", "search", "searchbar", "oneoff", {engine: "other-MozSearch2"}],
+ ]);
// Check the histograms as well.
let resultMethods = resultMethodHist.snapshot();
@@ -180,7 +190,8 @@ add_task(async function test_oneOff_enter() {
add_task(async function test_oneOff_enterSelection() {
// Let's reset the counts.
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist =
+ TelemetryTestUtils.getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
// Create an engine to generate search suggestions and add it as default
// for this test.
@@ -223,7 +234,8 @@ add_task(async function test_oneOff_enterSelection() {
add_task(async function test_oneOff_click() {
// Let's reset the counts.
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist =
+ TelemetryTestUtils.getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -247,8 +259,10 @@ add_task(async function test_suggestion_click() {
// Let's reset the counts.
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let resultMethodHist = getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let resultMethodHist =
+ TelemetryTestUtils.getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
+ let search_hist =
+ TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
// Create an engine to generate search suggestions and add it as default
// for this test.
@@ -273,19 +287,22 @@ add_task(async function test_suggestion_click() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_SEARCHBAR, "search_suggestion", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(
+ Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_SEARCHBAR, "search_suggestion", 1);
Assert.equal(Object.keys(scalars[SCALAR_SEARCHBAR]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
let searchEngineId = "other-" + suggestionEngine.name;
- checkKeyedHistogram(search_hist, searchEngineId + ".searchbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, searchEngineId + ".searchbar", 1);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "searchbar", "suggestion", {engine: searchEngineId}]]);
+ TelemetryTestUtils.assertEvents(events, [
+ ["navigation", "search", "searchbar", "suggestion", {engine: searchEngineId}],
+ ]);
// Check the histograms as well.
let resultMethods = resultMethodHist.snapshot();
@@ -305,7 +322,8 @@ add_task(async function test_suggestion_click() {
add_task(async function test_suggestion_enterSelection() {
// Let's reset the counts.
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist =
+ TelemetryTestUtils.getAndClearHistogram("FX_SEARCHBAR_SELECTED_RESULT_METHOD");
// Create an engine to generate search suggestions and add it as default
// for this test.
diff --git a/browser/modules/test/browser/browser_UsageTelemetry_urlbar.js b/browser/modules/test/browser/browser_UsageTelemetry_urlbar.js
index 011682e2087d..568e3d6f96ca 100644
--- a/browser/modules/test/browser/browser_UsageTelemetry_urlbar.js
+++ b/browser/modules/test/browser/browser_UsageTelemetry_urlbar.js
@@ -17,18 +17,6 @@ ChromeUtils.defineModuleGetter(this, "URLBAR_SELECTED_RESULT_METHODS",
ChromeUtils.defineModuleGetter(this, "SearchTelemetry",
"resource:///modules/SearchTelemetry.jsm");
-function checkHistogramResults(resultIndexes, expected, histogram) {
- for (let [i, val] of Object.entries(resultIndexes.values)) {
- if (i == expected) {
- Assert.equal(val, 1,
- `expected counts should match for ${histogram} index ${i}`);
- } else {
- Assert.equal(!!val, false,
- `unexpected counts should be zero for ${histogram} index ${i}`);
- }
- }
-}
-
let searchInAwesomebar = async function(inputText, win = window) {
await new Promise(r => waitForFocus(r, win));
// Write the search query in the urlbar.
@@ -159,11 +147,11 @@ add_task(async function test_simpleQuery() {
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let resultIndexHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
- let resultTypeHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
- let resultIndexByTypeHist = getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let resultIndexHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
+ let resultTypeHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
+ let resultIndexByTypeHist = TelemetryTestUtils.getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -174,38 +162,31 @@ add_task(async function test_simpleQuery() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_URLBAR, "search_enter", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_URLBAR, "search_enter", 1);
Assert.equal(Object.keys(scalars[SCALAR_URLBAR]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 1);
- checkKeyedHistogram(search_hist, "other-MozSearch.alias", undefined);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.alias", undefined);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "urlbar", "enter", {engine: "other-MozSearch"}]]);
+ TelemetryTestUtils.assertEvents(events, [["navigation", "search", "urlbar", "enter", {engine: "other-MozSearch"}]]);
// Check the histograms as well.
- let resultIndexes = resultIndexHist.snapshot();
- checkHistogramResults(resultIndexes, 0, "FX_URLBAR_SELECTED_RESULT_INDEX");
+ TelemetryTestUtils.assertHistogram(resultIndexHist, 0, 1);
- let resultTypes = resultTypeHist.snapshot();
- checkHistogramResults(resultTypes,
- URLBAR_SELECTED_RESULT_TYPES.searchengine,
- "FX_URLBAR_SELECTED_RESULT_TYPE");
+ TelemetryTestUtils.assertHistogram(resultTypeHist,
+ URLBAR_SELECTED_RESULT_TYPES.searchengine, 1);
- let resultIndexByType = resultIndexByTypeHist.snapshot().searchengine;
- checkHistogramResults(resultIndexByType,
- 0,
- "FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ TelemetryTestUtils.assertKeyedHistogramValue(resultIndexByTypeHist,
+ "searchengine", 0, 1);
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.enter,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.enter, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -214,11 +195,11 @@ add_task(async function test_searchAlias() {
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let resultIndexHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
- let resultTypeHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
- let resultIndexByTypeHist = getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let resultIndexHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
+ let resultTypeHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
+ let resultIndexByTypeHist = TelemetryTestUtils.getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -229,44 +210,37 @@ add_task(async function test_searchAlias() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_URLBAR, "search_alias", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_URLBAR, "search_alias", 1);
Assert.equal(Object.keys(scalars[SCALAR_URLBAR]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 1);
- checkKeyedHistogram(search_hist, "other-MozSearch.alias", undefined);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.alias", undefined);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "urlbar", "alias", {engine: "other-MozSearch"}]]);
+ TelemetryTestUtils.assertEvents(events, [["navigation", "search", "urlbar", "alias", {engine: "other-MozSearch"}]]);
// Check the histograms as well.
- let resultIndexes = resultIndexHist.snapshot();
- checkHistogramResults(resultIndexes, 0, "FX_URLBAR_SELECTED_RESULT_INDEX");
+ TelemetryTestUtils.assertHistogram(resultIndexHist, 0, 1);
- let resultTypes = resultTypeHist.snapshot();
- checkHistogramResults(resultTypes,
- URLBAR_SELECTED_RESULT_TYPES.searchengine,
- "FX_URLBAR_SELECTED_RESULT_TYPE");
+ TelemetryTestUtils.assertHistogram(resultTypeHist,
+ URLBAR_SELECTED_RESULT_TYPES.searchengine, 1);
- let resultIndexByType = resultIndexByTypeHist.snapshot().searchengine;
- checkHistogramResults(resultIndexByType,
- 0,
- "FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ TelemetryTestUtils.assertKeyedHistogramValue(resultIndexByTypeHist,
+ "searchengine", 0, 1);
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.enter,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.enter, 1);
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_internalSearchAlias() {
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -276,8 +250,8 @@ add_task(async function test_internalSearchAlias() {
EventUtils.synthesizeKey("KEY_Enter");
await p;
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 1);
- checkKeyedHistogram(search_hist, "other-MozSearch.alias", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.alias", 1);
info("Search using the other internal search alias.");
p = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
@@ -285,8 +259,8 @@ add_task(async function test_internalSearchAlias() {
EventUtils.synthesizeKey("KEY_Enter");
await p;
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 2);
- checkKeyedHistogram(search_hist, "other-MozSearch.alias", 2);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 2);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.alias", 2);
BrowserTestUtils.removeTab(tab);
});
@@ -297,11 +271,11 @@ add_task(async function test_oneOff_enter() {
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let resultIndexHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
- let resultTypeHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
- let resultIndexByTypeHist = getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let resultIndexHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
+ let resultTypeHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
+ let resultIndexByTypeHist = TelemetryTestUtils.getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -315,38 +289,31 @@ add_task(async function test_oneOff_enter() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_URLBAR, "search_oneoff", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_URLBAR, "search_oneoff", 1);
Assert.equal(Object.keys(scalars[SCALAR_URLBAR]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 1);
- checkKeyedHistogram(search_hist, "other-MozSearch.alias", undefined);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.alias", undefined);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "urlbar", "oneoff", {engine: "other-MozSearch"}]]);
+ TelemetryTestUtils.assertEvents(events, [["navigation", "search", "urlbar", "oneoff", {engine: "other-MozSearch"}]]);
// Check the histograms as well.
- let resultIndexes = resultIndexHist.snapshot();
- checkHistogramResults(resultIndexes, 0, "FX_URLBAR_SELECTED_RESULT_INDEX");
+ TelemetryTestUtils.assertHistogram(resultIndexHist, 0, 1);
- let resultTypes = resultTypeHist.snapshot();
- checkHistogramResults(resultTypes,
- URLBAR_SELECTED_RESULT_TYPES.searchengine,
- "FX_URLBAR_SELECTED_RESULT_TYPE");
+ TelemetryTestUtils.assertHistogram(resultTypeHist,
+ URLBAR_SELECTED_RESULT_TYPES.searchengine, 1);
- let resultIndexByType = resultIndexByTypeHist.snapshot().searchengine;
- checkHistogramResults(resultIndexByType,
- 0,
- "FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ TelemetryTestUtils.assertKeyedHistogramValue(resultIndexByTypeHist,
+ "searchengine", 0, 1);
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.enter,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.enter, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -356,7 +323,7 @@ add_task(async function test_oneOff_enter() {
// since test_oneOff_enter covers everything else.
add_task(async function test_oneOff_enterSelection() {
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
await withNewSearchEngine(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -371,10 +338,8 @@ add_task(async function test_oneOff_enterSelection() {
EventUtils.synthesizeKey("KEY_Enter");
await p;
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.arrowEnterSelection,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.arrowEnterSelection, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -386,7 +351,7 @@ add_task(async function test_oneOff_enterSelection() {
add_task(async function test_oneOff_click() {
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -397,10 +362,8 @@ add_task(async function test_oneOff_click() {
gURLBar.popup.oneOffSearchButtons.getSelectableButtons(false)[0].click();
await p;
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.click,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.click, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -410,11 +373,11 @@ add_task(async function test_suggestion_click() {
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
- let resultIndexHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
- let resultTypeHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
- let resultIndexByTypeHist = getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let resultIndexHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_INDEX");
+ let resultTypeHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_TYPE");
+ let resultIndexByTypeHist = TelemetryTestUtils.getAndClearKeyedHistogram("FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
await withNewSearchEngine(async function(engine) {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -427,38 +390,31 @@ add_task(async function test_suggestion_click() {
await p;
// Check if the scalars contain the expected values.
- const scalars = getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
- checkKeyedScalar(scalars, SCALAR_URLBAR, "search_suggestion", 1);
+ const scalars = TelemetryTestUtils.getParentProcessScalars(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, true, false);
+ TelemetryTestUtils.assertKeyedScalar(scalars, SCALAR_URLBAR, "search_suggestion", 1);
Assert.equal(Object.keys(scalars[SCALAR_URLBAR]).length, 1,
"This search must only increment one entry in the scalar.");
// Make sure SEARCH_COUNTS contains identical values.
let searchEngineId = "other-" + engine.name;
- checkKeyedHistogram(search_hist, searchEngineId + ".urlbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, searchEngineId + ".urlbar", 1);
// Also check events.
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN, false);
events = (events.parent || []).filter(e => e[1] == "navigation" && e[2] == "search");
- checkEvents(events, [["navigation", "search", "urlbar", "suggestion", {engine: searchEngineId}]]);
+ TelemetryTestUtils.assertEvents(events, [["navigation", "search", "urlbar", "suggestion", {engine: searchEngineId}]]);
// Check the histograms as well.
- let resultIndexes = resultIndexHist.snapshot();
- checkHistogramResults(resultIndexes, 3, "FX_URLBAR_SELECTED_RESULT_INDEX");
+ TelemetryTestUtils.assertHistogram(resultIndexHist, 3, 1);
- let resultTypes = resultTypeHist.snapshot();
- checkHistogramResults(resultTypes,
- URLBAR_SELECTED_RESULT_TYPES.searchsuggestion,
- "FX_URLBAR_SELECTED_RESULT_TYPE");
+ TelemetryTestUtils.assertHistogram(resultTypeHist,
+ URLBAR_SELECTED_RESULT_TYPES.searchsuggestion, 1);
- let resultIndexByType = resultIndexByTypeHist.snapshot().searchsuggestion;
- checkHistogramResults(resultIndexByType,
- 3,
- "FX_URLBAR_SELECTED_RESULT_INDEX_BY_TYPE");
+ TelemetryTestUtils.assertKeyedHistogramValue(resultIndexByTypeHist,
+ "searchsuggestion", 3, 1);
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.click,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.click, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -469,7 +425,7 @@ add_task(async function test_suggestion_click() {
// histogram since test_suggestion_click covers everything else.
add_task(async function test_suggestion_arrowEnterSelection() {
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
await withNewSearchEngine(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -482,10 +438,8 @@ add_task(async function test_suggestion_arrowEnterSelection() {
EventUtils.synthesizeKey("KEY_Enter");
await p;
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.arrowEnterSelection,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.arrowEnterSelection, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -495,7 +449,7 @@ add_task(async function test_suggestion_arrowEnterSelection() {
// suggestion offered by the test search engine.
add_task(async function test_suggestion_tabEnterSelection() {
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
await withNewSearchEngine(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -508,10 +462,8 @@ add_task(async function test_suggestion_tabEnterSelection() {
EventUtils.synthesizeKey("KEY_Enter");
await p;
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.tabEnterSelection,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.tabEnterSelection, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -521,7 +473,7 @@ add_task(async function test_suggestion_tabEnterSelection() {
// suggestion offered by the test search engine.
add_task(async function test_suggestion_enterSelection() {
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
await withNewSearchEngine(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -534,10 +486,8 @@ add_task(async function test_suggestion_enterSelection() {
EventUtils.synthesizeKey("KEY_Enter");
await p;
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.enterSelection,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.enterSelection, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -546,7 +496,7 @@ add_task(async function test_suggestion_enterSelection() {
// Selects through mouse right button and press the Return (Enter) key.
add_task(async function test_suggestion_rightclick() {
Services.telemetry.clearScalars();
- let resultMethodHist = getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
+ let resultMethodHist = TelemetryTestUtils.getAndClearHistogram("FX_URLBAR_SELECTED_RESULT_METHOD");
await withNewSearchEngine(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
@@ -559,10 +509,8 @@ add_task(async function test_suggestion_rightclick() {
EventUtils.synthesizeKey("KEY_Enter");
await p;
- let resultMethods = resultMethodHist.snapshot();
- checkHistogramResults(resultMethods,
- URLBAR_SELECTED_RESULT_METHODS.rightClickEnter,
- "FX_URLBAR_SELECTED_RESULT_METHOD");
+ TelemetryTestUtils.assertHistogram(resultMethodHist,
+ URLBAR_SELECTED_RESULT_METHODS.rightClickEnter, 1);
BrowserTestUtils.removeTab(tab);
});
@@ -579,7 +527,7 @@ add_task(async function test_privateWindow() {
},
});
- let search_hist = getAndClearKeyedHistogram("SEARCH_COUNTS");
+ let search_hist = TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS");
// First, do a bunch of searches in a private window.
let win = await BrowserTestUtils.openNewBrowserWindow({ private: true });
@@ -591,8 +539,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 1);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 1);
info("Search again in a private window after setting the pref to true");
Services.prefs.setBoolPref("browser.engagement.search_counts.pbm", true);
@@ -602,8 +550,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should *not* be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 1);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 1);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 1);
info("Search again in a private window after setting the pref to false");
Services.prefs.setBoolPref("browser.engagement.search_counts.pbm", false);
@@ -613,8 +561,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 2);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 2);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 2);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 2);
info("Search again in a private window after clearing the pref");
Services.prefs.clearUserPref("browser.engagement.search_counts.pbm");
@@ -624,8 +572,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 3);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 3);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 3);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 3);
await BrowserTestUtils.closeWindow(win);
@@ -640,8 +588,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 4);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 4);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 4);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 4);
info("Search again in a non-private window after setting the pref to true");
Services.prefs.setBoolPref("browser.engagement.search_counts.pbm", true);
@@ -651,8 +599,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 5);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 5);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 5);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 5);
info("Search again in a non-private window after setting the pref to false");
Services.prefs.setBoolPref("browser.engagement.search_counts.pbm", false);
@@ -662,8 +610,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 6);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 6);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 6);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 6);
info("Search again in a non-private window after clearing the pref");
Services.prefs.clearUserPref("browser.engagement.search_counts.pbm");
@@ -673,8 +621,8 @@ add_task(async function test_privateWindow() {
await p;
// SEARCH_COUNTS should be incremented.
- checkKeyedHistogram(search_hist, "other-MozSearch.urlbar", 7);
- checkKeyedHistogram(search_hist, "example.in-content:organic:none", 7);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "other-MozSearch.urlbar", 7);
+ TelemetryTestUtils.assertKeyedHistogramSum(search_hist, "example.in-content:organic:none", 7);
await BrowserTestUtils.closeWindow(win);
diff --git a/browser/modules/test/browser/head.js b/browser/modules/test/browser/head.js
index 31b34d047462..5fb0e5a4bf89 100644
--- a/browser/modules/test/browser/head.js
+++ b/browser/modules/test/browser/head.js
@@ -1,6 +1,8 @@
ChromeUtils.defineModuleGetter(this, "PlacesTestUtils",
"resource://testing-common/PlacesTestUtils.jsm");
+ChromeUtils.defineModuleGetter(this, "TelemetryTestUtils",
+ "resource://testing-common/TelemetryTestUtils.jsm");
const SINGLE_TRY_TIMEOUT = 100;
const NUMBER_OF_TRIES = 30;
@@ -35,49 +37,6 @@ function waitForCondition(condition, nextTest, errorMsg) {
});
}
-/**
- * Checks if the snapshotted keyed scalars contain the expected
- * data.
- *
- * @param {Object} scalars
- * The snapshot of the keyed scalars.
- * @param {String} scalarName
- * The name of the keyed scalar to check.
- * @param {String} key
- * The key that must be within the keyed scalar.
- * @param {String|Boolean|Number} expectedValue
- * The expected value for the provided key in the scalar.
- */
-function checkKeyedScalar(scalars, scalarName, key, expectedValue) {
- Assert.ok(scalarName in scalars,
- scalarName + " must be recorded.");
- Assert.ok(key in scalars[scalarName],
- scalarName + " must contain the '" + key + "' key.");
- Assert.equal(scalars[scalarName][key], expectedValue,
- scalarName + "['" + key + "'] must contain the expected value");
-}
-
-/**
- * An helper that checks the value of a scalar if it's expected to be > 0,
- * otherwise makes sure that the scalar it's not reported.
- *
- * @param {Object} scalars
- * The snapshot of the scalars.
- * @param {String} scalarName
- * The name of the scalar to check.
- * @param {Number} value
- * The expected value for the provided scalar.
- * @param {String} msg
- * The message to print when checking the value.
- */
-let checkScalar = (scalars, scalarName, value, msg) => {
- if (value > 0) {
- is(scalars[scalarName], value, msg);
- return;
- }
- ok(!(scalarName in scalars), scalarName + " must not be reported.");
-};
-
/**
* An utility function to write some text in the search input box
* in a content page.
@@ -97,74 +56,6 @@ let typeInSearchField = async function(browser, text, fieldName) {
});
};
-
-/**
- * Clear and get the named histogram
- * @param {String} name
- * The name of the histogram
- */
-function getAndClearHistogram(name) {
- let histogram = Services.telemetry.getHistogramById(name);
- histogram.clear();
- return histogram;
-}
-
-
-/**
- * Clear and get the named keyed histogram
- * @param {String} name
- * The name of the keyed histogram
- */
-function getAndClearKeyedHistogram(name) {
- let histogram = Services.telemetry.getKeyedHistogramById(name);
- histogram.clear();
- return histogram;
-}
-
-
-/**
- * Check that the keyed histogram contains the right value.
- */
-function checkKeyedHistogram(h, key, expectedValue) {
- const snapshot = h.snapshot();
- if (expectedValue === undefined) {
- Assert.ok(!(key in snapshot), `The histogram must not contain ${key}.`);
- return;
- }
- Assert.ok(key in snapshot, `The histogram must contain ${key}.`);
- Assert.equal(snapshot[key].sum, expectedValue, `The key ${key} must contain ${expectedValue}.`);
-}
-
-/**
- * Return the scalars from the parent-process.
- */
-function getParentProcessScalars(aChannel, aKeyed = false, aClear = false) {
- const extended = aChannel == Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN;
- const currentExtended = Services.telemetry.canRecordExtended;
- Services.telemetry.canRecordExtended = extended;
- const scalars = aKeyed ?
- Services.telemetry.getSnapshotForKeyedScalars("main", aClear).parent :
- Services.telemetry.getSnapshotForScalars("main", aClear).parent;
- Services.telemetry.canRecordExtended = currentExtended;
- return scalars || {};
-}
-
-function checkEvents(events, expectedEvents) {
- if (!Services.telemetry.canRecordExtended) {
- // Currently we only collect the tested events when extended Telemetry is enabled.
- return;
- }
-
- Assert.equal(events.length, expectedEvents.length, "Should have matching amount of events.");
-
- // Strip timestamps from the events for easier comparison.
- events = events.map(e => e.slice(1));
-
- for (let i = 0; i < events.length; ++i) {
- Assert.deepEqual(events[i], expectedEvents[i], "Events should match.");
- }
-}
-
/**
* Given a at some non-internal web page,
* return something that resembles an nsIContentPermissionRequest,
diff --git a/browser/themes/shared/downloads/downloads.inc.css b/browser/themes/shared/downloads/downloads.inc.css
index 525fad856c32..3c6e231f12fa 100644
--- a/browser/themes/shared/downloads/downloads.inc.css
+++ b/browser/themes/shared/downloads/downloads.inc.css
@@ -47,10 +47,6 @@
outline: 1px solid var(--arrowpanel-dimmed-further);
}
-.downloadsPanelFooterButton > .button-box {
- padding: 0;
-}
-
@notKeyfocus@ .downloadsPanelFooterButton:-moz-focusring {
outline: none;
}
diff --git a/browser/themes/shared/incontentprefs/preferences.inc.css b/browser/themes/shared/incontentprefs/preferences.inc.css
index e26573b94fce..e121ac7c7c47 100644
--- a/browser/themes/shared/incontentprefs/preferences.inc.css
+++ b/browser/themes/shared/incontentprefs/preferences.inc.css
@@ -849,7 +849,8 @@ menulist[indicator=true] > menupopup menuitem[indicator=true]:not([image]) > .me
/* Proxy port input */
.proxy-port-input {
- width: calc(5ch + 22px); /* 5 chars + 11px padding on both sides */
+ width: calc(5ch + 18px); /* 5 chars + (8px padding + 1px border) on both sides */
+ margin-inline-start: 4px;
}
#defaultBrowserLanguage {
diff --git a/build/build-clang/clang-7-android.json b/build/build-clang/clang-7-android.json
index a75290bbb1b8..65932e6ca5f5 100644
--- a/build/build-clang/clang-7-android.json
+++ b/build/build-clang/clang-7-android.json
@@ -1,15 +1,15 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "2",
"build_libcxx": true,
"build_type": "Release",
"assertions": false,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
- "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_700/final",
- "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_700/final",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
- "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_700/final",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final",
+ "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_701/final",
+ "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_701/final",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final",
+ "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_701/final",
"python_path": "/usr/bin/python2.7",
"gcc_dir": "/builds/worker/workspace/build/src/gcc",
"cc": "/builds/worker/workspace/build/src/gcc/bin/gcc",
diff --git a/build/build-clang/clang-7-linux64.json b/build/build-clang/clang-7-linux64.json
index 25eb9ce24d27..a0d4bc2c394b 100644
--- a/build/build-clang/clang-7-linux64.json
+++ b/build/build-clang/clang-7-linux64.json
@@ -1,15 +1,15 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "3",
"build_libcxx": true,
"build_type": "Release",
"assertions": false,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
- "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_700/final",
- "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_700/final",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
- "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_700/final",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final",
+ "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_701/final",
+ "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_701/final",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final",
+ "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_701/final",
"python_path": "/usr/bin/python2.7",
"gcc_dir": "/builds/worker/workspace/build/src/gcc",
"cc": "/builds/worker/workspace/build/src/gcc/bin/gcc",
diff --git a/build/build-clang/clang-7-macosx64.json b/build/build-clang/clang-7-macosx64.json
index b98f66ce6510..ac98b27e6f9a 100644
--- a/build/build-clang/clang-7-macosx64.json
+++ b/build/build-clang/clang-7-macosx64.json
@@ -1,16 +1,16 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "1",
"build_libcxx": true,
"build_type": "Release",
"assertions": false,
"osx_cross_compile": true,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
- "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_700/final",
- "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_700/final",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
- "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_700/final",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final",
+ "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_701/final",
+ "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_701/final",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final",
+ "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_701/final",
"python_path": "/usr/bin/python2.7",
"gcc_dir": "/builds/worker/workspace/build/src/gcc",
"cc": "/builds/worker/workspace/build/src/clang/bin/clang",
diff --git a/build/build-clang/clang-tidy-linux64.json b/build/build-clang/clang-tidy-linux64.json
index 22125442d577..5c18fc5b5d5b 100644
--- a/build/build-clang/clang-tidy-linux64.json
+++ b/build/build-clang/clang-tidy-linux64.json
@@ -1,15 +1,15 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "1",
"build_libcxx": true,
"build_type": "Release",
"assertions": false,
"build_clang_tidy": true,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final/",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final/",
- "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_700/final/",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final/",
- "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_700/final/",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final/",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final/",
+ "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_701/final/",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final/",
+ "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_701/final/",
"python_path": "/usr/bin/python2.7",
"gcc_dir": "/builds/worker/workspace/build/src/gcc",
"cc": "/builds/worker/workspace/build/src/gcc/bin/gcc",
diff --git a/build/build-clang/clang-tidy-macosx64.json b/build/build-clang/clang-tidy-macosx64.json
index 80f108f3e8bc..dcbb12c793b2 100644
--- a/build/build-clang/clang-tidy-macosx64.json
+++ b/build/build-clang/clang-tidy-macosx64.json
@@ -1,16 +1,16 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "1",
"build_libcxx": true,
"build_type": "Release",
"assertions": false,
"build_clang_tidy": true,
"osx_cross_compile": true,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
- "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_700/final",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
- "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_700/final",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final",
+ "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_701/final",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final",
+ "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_701/final",
"python_path": "/usr/bin/python2.7",
"gcc_dir": "/builds/worker/workspace/build/src/gcc",
"cc": "/builds/worker/workspace/build/src/clang/bin/clang",
diff --git a/build/build-clang/clang-tidy-win32.json b/build/build-clang/clang-tidy-win32.json
index 097b4274fd34..877b525f1df3 100644
--- a/build/build-clang/clang-tidy-win32.json
+++ b/build/build-clang/clang-tidy-win32.json
@@ -1,15 +1,15 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "1",
"build_libcxx": false,
"build_type": "Release",
"assertions": false,
"build_clang_tidy": true,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
- "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_700/final",
- "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_700/final",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final",
+ "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_701/final",
+ "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_701/final",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final",
"python_path": "c:/mozilla-build/python/python.exe",
"cc": "cl.exe",
"cxx": "cl.exe",
diff --git a/build/build-clang/clang-tidy-win64.json b/build/build-clang/clang-tidy-win64.json
index 3f0ac14f258a..539f594fd807 100644
--- a/build/build-clang/clang-tidy-win64.json
+++ b/build/build-clang/clang-tidy-win64.json
@@ -1,15 +1,15 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "1",
"build_libcxx": false,
"build_type": "Release",
"assertions": false,
"build_clang_tidy": true,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
- "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_700/final",
- "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_700/final",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final",
+ "extra_repo": "https://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_701/final",
+ "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_701/final",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final",
"python_path": "c:/mozilla-build/python/python.exe",
"cc": "cl.exe",
"cxx": "cl.exe",
diff --git a/build/build-clang/clang-win64.json b/build/build-clang/clang-win64.json
index f31cdb0c2331..34eb98350b53 100644
--- a/build/build-clang/clang-win64.json
+++ b/build/build-clang/clang-win64.json
@@ -1,14 +1,14 @@
{
- "llvm_revision": "342383",
+ "llvm_revision": "349247",
"stages": "3",
"build_libcxx": false,
"build_type": "Release",
"assertions": false,
- "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
- "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
- "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_700/final",
- "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_700/final",
- "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
+ "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_701/final",
+ "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_701/final",
+ "lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_701/final",
+ "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_701/final",
+ "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_701/final",
"python_path": "c:/mozilla-build/python/python.exe",
"cc": "cl.exe",
"cxx": "cl.exe",
diff --git a/devtools/client/aboutdebugging-new/aboutdebugging.js b/devtools/client/aboutdebugging-new/aboutdebugging.js
index a1376f0fc3da..4e189d72cdfe 100644
--- a/devtools/client/aboutdebugging-new/aboutdebugging.js
+++ b/devtools/client/aboutdebugging-new/aboutdebugging.js
@@ -32,12 +32,6 @@ const {
removeUSBRuntimesObserver,
} = require("./src/modules/usb-runtimes");
-const {
- addMultiE10sListener,
- isMultiE10s,
- removeMultiE10sListener,
-} = require("devtools/client/shared/multi-e10s-helper");
-
loader.lazyRequireGetter(this, "adbAddon", "devtools/shared/adb/adb-addon", true);
const Router = createFactory(require("devtools/client/shared/vendor/react-router-dom").HashRouter);
@@ -54,7 +48,6 @@ const AboutDebugging = {
this.onAdbAddonUpdated = this.onAdbAddonUpdated.bind(this);
this.onNetworkLocationsUpdated = this.onNetworkLocationsUpdated.bind(this);
this.onUSBRuntimesUpdated = this.onUSBRuntimesUpdated.bind(this);
- this.onMultiE10sUpdated = this.onMultiE10sUpdated.bind(this);
this.store = configureStore();
this.actions = bindActionCreators(actions, this.store.dispatch);
@@ -90,12 +83,6 @@ const AboutDebugging = {
// Remove deprecated remote debugging extensions.
await adbAddon.uninstallUnsupportedExtensions();
-
- addMultiE10sListener(this.onMultiE10sUpdated);
- },
-
- onMultiE10sUpdated() {
- this.actions.updateMultiE10sStatus(isMultiE10s());
},
onAdbAddonUpdated() {
@@ -123,7 +110,6 @@ const AboutDebugging = {
// Remove all client listeners.
this.actions.removeRuntimeListeners();
- removeMultiE10sListener(this.onMultiE10sUpdated);
removeNetworkLocationsObserver(this.onNetworkLocationsUpdated);
removeUSBRuntimesObserver(this.onUSBRuntimesUpdated);
adbAddon.off("update", this.onAdbAddonUpdated);
diff --git a/devtools/client/aboutdebugging-new/src/actions/runtimes.js b/devtools/client/aboutdebugging-new/src/actions/runtimes.js
index 2cbbf8dedb36..5d076fa99e5b 100644
--- a/devtools/client/aboutdebugging-new/src/actions/runtimes.js
+++ b/devtools/client/aboutdebugging-new/src/actions/runtimes.js
@@ -35,6 +35,9 @@ const {
UPDATE_CONNECTION_PROMPT_SETTING_FAILURE,
UPDATE_CONNECTION_PROMPT_SETTING_START,
UPDATE_CONNECTION_PROMPT_SETTING_SUCCESS,
+ UPDATE_RUNTIME_MULTIE10S_FAILURE,
+ UPDATE_RUNTIME_MULTIE10S_START,
+ UPDATE_RUNTIME_MULTIE10S_SUCCESS,
WATCH_RUNTIME_FAILURE,
WATCH_RUNTIME_START,
WATCH_RUNTIME_SUCCESS,
@@ -42,7 +45,7 @@ const {
async function getRuntimeInfo(runtime, clientWrapper) {
const { type } = runtime;
- const { name, channel, deviceName, version } =
+ const { name, channel, deviceName, isMultiE10s, version } =
await clientWrapper.getDeviceDescription();
const icon =
(channel === "release" || channel === "beta" || channel === "aurora")
@@ -50,8 +53,9 @@ async function getRuntimeInfo(runtime, clientWrapper) {
: "chrome://devtools/skin/images/aboutdebugging-firefox-nightly.svg";
return {
- icon,
deviceName,
+ icon,
+ isMultiE10s,
name,
type,
version,
@@ -65,6 +69,10 @@ function onUSBDebuggerClientClosed() {
window.AboutDebugging.store.dispatch(Actions.scanUSBRuntimes());
}
+function onMultiE10sUpdated() {
+ window.AboutDebugging.store.dispatch(updateMultiE10s());
+}
+
function connectRuntime(id) {
return async (dispatch, getState) => {
dispatch({ type: CONNECT_RUNTIME_START });
@@ -72,6 +80,8 @@ function connectRuntime(id) {
const runtime = findRuntimeById(id, getState().runtimes);
const clientWrapper = await createClientForRuntime(runtime);
const info = await getRuntimeInfo(runtime, clientWrapper);
+ const { isMultiE10s } = info;
+ delete info.isMultiE10s;
const promptPrefName = RUNTIME_PREFERENCE.CONNECTION_PROMPT;
const connectionPromptEnabled = await clientWrapper.getPreference(promptPrefName);
@@ -79,8 +89,16 @@ function connectRuntime(id) {
clientWrapper,
connectionPromptEnabled,
info,
+ isMultiE10s,
};
+ clientWrapper.addListener("closed", onUSBDebuggerClientClosed);
+
+ const deviceFront = await clientWrapper.getFront("device");
+ if (deviceFront) {
+ deviceFront.on("multi-e10s-updated", onMultiE10sUpdated);
+ }
+
if (runtime.type === RUNTIMES.USB) {
// `closed` event will be emitted when disabling remote debugging
// on the connected USB runtime.
@@ -108,6 +126,11 @@ function disconnectRuntime(id) {
const runtime = findRuntimeById(id, getState().runtimes);
const { clientWrapper } = runtime.runtimeDetails;
+ const deviceFront = await clientWrapper.getFront("device");
+ if (deviceFront) {
+ deviceFront.off("multi-e10s-updated", onMultiE10sUpdated);
+ }
+
if (runtime.type === RUNTIMES.USB) {
clientWrapper.removeListener("closed", onUSBDebuggerClientClosed);
}
@@ -146,6 +169,22 @@ function updateConnectionPromptSetting(connectionPromptEnabled) {
};
}
+function updateMultiE10s() {
+ return async (dispatch, getState) => {
+ dispatch({ type: UPDATE_RUNTIME_MULTIE10S_START });
+ try {
+ const runtime = getCurrentRuntime(getState().runtimes);
+ const { clientWrapper } = runtime.runtimeDetails;
+ // Re-get actual value from the runtime.
+ const { isMultiE10s } = await clientWrapper.getDeviceDescription();
+
+ dispatch({ type: UPDATE_RUNTIME_MULTIE10S_SUCCESS, runtime, isMultiE10s });
+ } catch (e) {
+ dispatch({ type: UPDATE_RUNTIME_MULTIE10S_FAILURE, error: e });
+ }
+ };
+}
+
function watchRuntime(id) {
return async (dispatch, getState) => {
dispatch({ type: WATCH_RUNTIME_START });
diff --git a/devtools/client/aboutdebugging-new/src/actions/ui.js b/devtools/client/aboutdebugging-new/src/actions/ui.js
index 55680c0a4e66..a57925e9b5f6 100644
--- a/devtools/client/aboutdebugging-new/src/actions/ui.js
+++ b/devtools/client/aboutdebugging-new/src/actions/ui.js
@@ -13,7 +13,6 @@ const {
ADB_ADDON_UNINSTALL_FAILURE,
ADB_ADDON_STATUS_UPDATED,
DEBUG_TARGET_COLLAPSIBILITY_UPDATED,
- MULTI_E10S_UPDATED,
NETWORK_LOCATIONS_UPDATED,
PAGE_SELECTED,
PAGE_TYPES,
@@ -127,12 +126,6 @@ function scanUSBRuntimes() {
};
}
-function updateMultiE10sStatus(isMultiE10s) {
- return (dispatch, getState) => {
- dispatch({ type: MULTI_E10S_UPDATED, isMultiE10s});
- };
-}
-
module.exports = {
addNetworkLocation,
installAdbAddon,
@@ -142,6 +135,5 @@ module.exports = {
uninstallAdbAddon,
updateAdbAddonStatus,
updateDebugTargetCollapsibility,
- updateMultiE10sStatus,
updateNetworkLocations,
};
diff --git a/devtools/client/aboutdebugging-new/src/components/debugtarget/ServiceWorkerAction.js b/devtools/client/aboutdebugging-new/src/components/debugtarget/ServiceWorkerAction.js
index ca233edade50..0d8d722cf12c 100644
--- a/devtools/client/aboutdebugging-new/src/components/debugtarget/ServiceWorkerAction.js
+++ b/devtools/client/aboutdebugging-new/src/components/debugtarget/ServiceWorkerAction.js
@@ -11,6 +11,8 @@ const { connect } = require("devtools/client/shared/vendor/react-redux");
const FluentReact = require("devtools/client/shared/vendor/fluent-react");
+const { getCurrentRuntimeDetails } = require("../../modules/runtimes-state-helper");
+
const InspectAction = createFactory(require("./InspectAction"));
const Actions = require("../../actions/index");
@@ -26,7 +28,7 @@ class ServiceWorkerAction extends PureComponent {
// Provided by wrapping the component with FluentReact.withLocalization.
getString: PropTypes.func.isRequired,
// Provided by redux state
- isMultiE10s: PropTypes.bool.isRequired,
+ runtimeDetails: Types.runtimeDetails.isRequired,
target: Types.debugTarget.isRequired,
};
}
@@ -42,8 +44,9 @@ class ServiceWorkerAction extends PureComponent {
}
_renderAction() {
- const { dispatch, isMultiE10s, target } = this.props;
+ const { dispatch, runtimeDetails, target } = this.props;
const { isActive, isRunning } = target.details;
+ const { isMultiE10s } = runtimeDetails;
if (!isRunning) {
const startLabel = this.props.getString("about-debugging-worker-action-start");
@@ -95,7 +98,7 @@ class ServiceWorkerAction extends PureComponent {
const mapStateToProps = state => {
return {
- isMultiE10s: state.ui.isMultiE10s,
+ runtimeDetails: getCurrentRuntimeDetails(state.runtimes),
};
};
diff --git a/devtools/client/aboutdebugging-new/src/constants.js b/devtools/client/aboutdebugging-new/src/constants.js
index 2dbb60ad7a43..dc45ee74aecb 100644
--- a/devtools/client/aboutdebugging-new/src/constants.js
+++ b/devtools/client/aboutdebugging-new/src/constants.js
@@ -19,7 +19,6 @@ const actionTypes = {
DISCONNECT_RUNTIME_FAILURE: "DISCONNECT_RUNTIME_FAILURE",
DISCONNECT_RUNTIME_START: "DISCONNECT_RUNTIME_START",
DISCONNECT_RUNTIME_SUCCESS: "DISCONNECT_RUNTIME_SUCCESS",
- MULTI_E10S_UPDATED: "MULTI_E10S_UPDATED",
NETWORK_LOCATIONS_UPDATED: "NETWORK_LOCATIONS_UPDATED",
PAGE_SELECTED: "PAGE_SELECTED",
REMOTE_RUNTIMES_UPDATED: "REMOTE_RUNTIMES_UPDATED",
@@ -41,6 +40,9 @@ const actionTypes = {
UPDATE_CONNECTION_PROMPT_SETTING_FAILURE: "UPDATE_CONNECTION_PROMPT_SETTING_FAILURE",
UPDATE_CONNECTION_PROMPT_SETTING_START: "UPDATE_CONNECTION_PROMPT_SETTING_START",
UPDATE_CONNECTION_PROMPT_SETTING_SUCCESS: "UPDATE_CONNECTION_PROMPT_SETTING_SUCCESS",
+ UPDATE_RUNTIME_MULTIE10S_FAILURE: "UPDATE_RUNTIME_MULTIE10S_FAILURE",
+ UPDATE_RUNTIME_MULTIE10S_START: "UPDATE_RUNTIME_MULTIE10S_START",
+ UPDATE_RUNTIME_MULTIE10S_SUCCESS: "UPDATE_RUNTIME_MULTIE10S_SUCCESS",
USB_RUNTIMES_SCAN_START: "USB_RUNTIMES_SCAN_START",
USB_RUNTIMES_SCAN_SUCCESS: "USB_RUNTIMES_SCAN_SUCCESS",
WATCH_RUNTIME_FAILURE: "WATCH_RUNTIME_FAILURE",
diff --git a/devtools/client/aboutdebugging-new/src/create-store.js b/devtools/client/aboutdebugging-new/src/create-store.js
index 8ddfd34220c6..c78ddb77807d 100644
--- a/devtools/client/aboutdebugging-new/src/create-store.js
+++ b/devtools/client/aboutdebugging-new/src/create-store.js
@@ -9,7 +9,6 @@ const Services = require("Services");
const { applyMiddleware, createStore } = require("devtools/client/shared/vendor/redux");
const { thunk } = require("devtools/client/shared/redux/middleware/thunk.js");
const { waitUntilService } = require("devtools/client/shared/redux/middleware/wait-service.js");
-const { isMultiE10s } = require("devtools/client/shared/multi-e10s-helper");
const rootReducer = require("./reducers/index");
const { DebugTargetsState } = require("./reducers/debug-targets-state");
@@ -51,7 +50,7 @@ function getUiState() {
const showSystemAddons = Services.prefs.getBoolPref(PREFERENCES.SHOW_SYSTEM_ADDONS,
false);
return new UiState(locations, collapsibilities, networkEnabled, wifiEnabled,
- showSystemAddons, isMultiE10s());
+ showSystemAddons);
}
exports.configureStore = configureStore;
diff --git a/devtools/client/aboutdebugging-new/src/modules/client-wrapper.js b/devtools/client/aboutdebugging-new/src/modules/client-wrapper.js
index 1b7df49e38be..ff39e0c95b87 100644
--- a/devtools/client/aboutdebugging-new/src/modules/client-wrapper.js
+++ b/devtools/client/aboutdebugging-new/src/modules/client-wrapper.js
@@ -59,18 +59,23 @@ class ClientWrapper {
}
}
+ async getFront(typeName) {
+ return this.client.mainRoot.getFront(typeName);
+ }
+
onFront(typeName, listener) {
this.client.mainRoot.onFront(typeName, listener);
}
async getDeviceDescription() {
- const deviceFront = await this.client.mainRoot.getFront("device");
- const { brandName, channel, deviceName, version } =
+ const deviceFront = await this.getFront("device");
+ const { brandName, channel, deviceName, isMultiE10s, version } =
await deviceFront.getDescription();
// Only expose a specific set of properties.
return {
channel,
deviceName,
+ isMultiE10s,
name: brandName,
version,
};
diff --git a/devtools/client/aboutdebugging-new/src/modules/debug-target-support.js b/devtools/client/aboutdebugging-new/src/modules/debug-target-support.js
index 1bfa240d88d3..37377a3150ab 100644
--- a/devtools/client/aboutdebugging-new/src/modules/debug-target-support.js
+++ b/devtools/client/aboutdebugging-new/src/modules/debug-target-support.js
@@ -14,14 +14,11 @@ const ALL_DEBUG_TARGETS = [
const SUPPORTED_TARGET_BY_RUNTIME = {
[RUNTIMES.THIS_FIREFOX]: ALL_DEBUG_TARGETS,
+ [RUNTIMES.NETWORK]: ALL_DEBUG_TARGETS,
[RUNTIMES.USB]: [
DEBUG_TARGETS.EXTENSION,
DEBUG_TARGETS.TAB,
],
- [RUNTIMES.NETWORK]: [
- DEBUG_TARGETS.EXTENSION,
- DEBUG_TARGETS.TAB,
- ],
};
function isSupportedDebugTarget(runtimeType, debugTargetType) {
@@ -44,10 +41,9 @@ const SUPPORTED_TARGET_PANE_BY_RUNTIME = {
DEBUG_TARGET_PANE.INSTALLED_EXTENSION,
DEBUG_TARGET_PANE.TAB,
],
- [RUNTIMES.NETWORK]: [
- DEBUG_TARGET_PANE.INSTALLED_EXTENSION,
- DEBUG_TARGET_PANE.TAB,
- ],
+ // All debug target panes except temporary extensions
+ [RUNTIMES.NETWORK]: ALL_DEBUG_TARGET_PANES.filter(p =>
+ p !== DEBUG_TARGET_PANE.TEMPORARY_EXTENSION),
};
/**
diff --git a/devtools/client/aboutdebugging-new/src/modules/runtimes-state-helper.js b/devtools/client/aboutdebugging-new/src/modules/runtimes-state-helper.js
index 50a35104142b..ae6c7d55511b 100644
--- a/devtools/client/aboutdebugging-new/src/modules/runtimes-state-helper.js
+++ b/devtools/client/aboutdebugging-new/src/modules/runtimes-state-helper.js
@@ -46,3 +46,4 @@ function getCurrentRuntimeDetails(runtimesState) {
const runtime = getCurrentRuntime(runtimesState);
return runtime ? runtime.runtimeDetails : null;
}
+exports.getCurrentRuntimeDetails = getCurrentRuntimeDetails;
diff --git a/devtools/client/aboutdebugging-new/src/reducers/runtimes-state.js b/devtools/client/aboutdebugging-new/src/reducers/runtimes-state.js
index fa8f2a3aadb5..6939137cbc85 100644
--- a/devtools/client/aboutdebugging-new/src/reducers/runtimes-state.js
+++ b/devtools/client/aboutdebugging-new/src/reducers/runtimes-state.js
@@ -10,6 +10,7 @@ const {
RUNTIMES,
UNWATCH_RUNTIME_SUCCESS,
UPDATE_CONNECTION_PROMPT_SETTING_SUCCESS,
+ UPDATE_RUNTIME_MULTIE10S_SUCCESS,
REMOTE_RUNTIMES_UPDATED,
WATCH_RUNTIME_SUCCESS,
} = require("../constants");
@@ -97,6 +98,15 @@ function runtimesReducer(state = RuntimesState(), action) {
return _updateRuntimeById(runtimeId, { runtimeDetails }, state);
}
+ case UPDATE_RUNTIME_MULTIE10S_SUCCESS: {
+ const { isMultiE10s } = action;
+ const { id: runtimeId } = action.runtime;
+ const runtime = findRuntimeById(runtimeId, state);
+ const runtimeDetails =
+ Object.assign({}, runtime.runtimeDetails, { isMultiE10s });
+ return _updateRuntimeById(runtimeId, { runtimeDetails }, state);
+ }
+
case REMOTE_RUNTIMES_UPDATED: {
const { runtimes, runtimeType } = action;
const key = TYPE_TO_RUNTIMES_KEY[runtimeType];
diff --git a/devtools/client/aboutdebugging-new/src/reducers/ui-state.js b/devtools/client/aboutdebugging-new/src/reducers/ui-state.js
index e659fa91188d..ff02fd858fc5 100644
--- a/devtools/client/aboutdebugging-new/src/reducers/ui-state.js
+++ b/devtools/client/aboutdebugging-new/src/reducers/ui-state.js
@@ -7,7 +7,6 @@
const {
ADB_ADDON_STATUS_UPDATED,
DEBUG_TARGET_COLLAPSIBILITY_UPDATED,
- MULTI_E10S_UPDATED,
NETWORK_LOCATIONS_UPDATED,
PAGE_SELECTED,
TEMPORARY_EXTENSION_INSTALL_FAILURE,
@@ -18,11 +17,10 @@ const {
function UiState(locations = [], debugTargetCollapsibilities = {},
networkEnabled = false, wifiEnabled = false,
- showSystemAddons = false, isMultiE10s = false) {
+ showSystemAddons = false) {
return {
adbAddonStatus: null,
debugTargetCollapsibilities,
- isMultiE10s,
isScanningUsb: false,
networkEnabled,
networkLocations: locations,
@@ -48,11 +46,6 @@ function uiReducer(state = UiState(), action) {
return Object.assign({}, state, { debugTargetCollapsibilities });
}
- case MULTI_E10S_UPDATED: {
- const { isMultiE10s } = action;
- return Object.assign({}, state, { isMultiE10s });
- }
-
case NETWORK_LOCATIONS_UPDATED: {
const { locations } = action;
return Object.assign({}, state, { networkLocations: locations });
diff --git a/devtools/client/aboutdebugging-new/src/types/index.js b/devtools/client/aboutdebugging-new/src/types/index.js
index fbee6347431d..e8e9d4445b75 100644
--- a/devtools/client/aboutdebugging-new/src/types/index.js
+++ b/devtools/client/aboutdebugging-new/src/types/index.js
@@ -5,9 +5,10 @@
"use strict";
const { debugTarget } = require("./debug-target");
-const { runtime } = require("./runtime");
+const { runtime, runtimeDetails } = require("./runtime");
module.exports = Object.assign({}, {
debugTarget,
runtime,
+ runtimeDetails,
});
diff --git a/devtools/client/aboutdebugging-new/src/types/runtime.js b/devtools/client/aboutdebugging-new/src/types/runtime.js
index a8f768b345cb..5337d0adef65 100644
--- a/devtools/client/aboutdebugging-new/src/types/runtime.js
+++ b/devtools/client/aboutdebugging-new/src/types/runtime.js
@@ -31,7 +31,12 @@ const runtimeDetails = {
// runtime information
info: PropTypes.shape(runtimeInfo).isRequired,
+
+ // True if this runtime supports multiple content processes
+ // This might be undefined when connecting to runtimes older than Fx 66
+ isMultiE10s: PropTypes.bool,
};
+exports.runtimeDetails = PropTypes.shape(runtimeDetails);
const networkRuntimeConnectionParameter = {
// host name of debugger server to connect
diff --git a/devtools/client/aboutdebugging-new/test/browser/browser.ini b/devtools/client/aboutdebugging-new/test/browser/browser.ini
index b4dde1b0ce7f..e79d8211a470 100644
--- a/devtools/client/aboutdebugging-new/test/browser/browser.ini
+++ b/devtools/client/aboutdebugging-new/test/browser/browser.ini
@@ -60,3 +60,4 @@ skip-if = (os == 'linux' && bits == 32) # ADB start() fails on linux 32, see Bug
[browser_aboutdebugging_thisfirefox.js]
[browser_aboutdebugging_thisfirefox_runtime_info.js]
[browser_aboutdebugging_thisfirefox_worker_inspection.js]
+[browser_aboutdebugging_workers_remote_runtime.js]
diff --git a/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_workers_remote_runtime.js b/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_workers_remote_runtime.js
new file mode 100644
index 000000000000..a3aa57f51b4e
--- /dev/null
+++ b/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_workers_remote_runtime.js
@@ -0,0 +1,111 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/* import-globals-from helper-mocks.js */
+Services.scriptloader.loadSubScript(CHROME_URL_ROOT + "helper-mocks.js", this);
+
+const NETWORK_RUNTIME_HOST = "localhost:6080";
+const NETWORK_RUNTIME_APP_NAME = "TestNetworkApp";
+
+const TESTS = [
+ {
+ category: "Other Workers",
+ propertyName: "otherWorkers",
+ workerName: "other/worker/script.js",
+ }, {
+ category: "Service Workers",
+ propertyName: "serviceWorkers",
+ workerName: "service/worker/script.js",
+ }, {
+ category: "Shared Workers",
+ propertyName: "sharedWorkers",
+ workerName: "shared/worker/script.js",
+ },
+];
+
+const EMPTY_WORKERS_RESPONSE = {
+ otherWorkers: [],
+ serviceWorkers: [],
+ sharedWorkers: [],
+};
+
+// Test that workers are displayed and updated for remote runtimes when expected.
+add_task(async function() {
+ const mocks = new Mocks();
+
+ const { document, tab } = await openAboutDebugging();
+
+ info("Prepare Network client mock");
+ const networkClient = mocks.createNetworkRuntime(NETWORK_RUNTIME_HOST, {
+ name: NETWORK_RUNTIME_APP_NAME,
+ });
+
+ info("Test workers in runtime page for Network client");
+ await connectToRuntime(NETWORK_RUNTIME_HOST, document);
+ await selectRuntime(NETWORK_RUNTIME_HOST, NETWORK_RUNTIME_APP_NAME, document);
+
+ for (const testData of TESTS) {
+ await testWorkerOnMockedRemoteClient(testData, networkClient, mocks.thisFirefoxClient,
+ document);
+ }
+
+ await removeTab(tab);
+});
+
+/**
+ * Check that workers are visible in the runtime page for a remote client.
+ */
+async function testWorkerOnMockedRemoteClient(testData, remoteClient, firefoxClient,
+ document) {
+ const { category, propertyName, workerName } = testData;
+ info(`Test workers for category [${category}] in remote runtime`);
+
+ const workersPane = getDebugTargetPane(category, document);
+ info("Check an empty target pane message is displayed");
+ ok(workersPane.querySelector(".js-debug-target-list-empty"),
+ "Workers list is empty");
+
+ info(`Add a worker of type [${propertyName}] to the remote client`);
+ const workers = Object.assign({}, EMPTY_WORKERS_RESPONSE, {
+ [propertyName]: [{
+ name: workerName,
+ workerTargetFront: {
+ actorID: workerName,
+ },
+ }],
+ });
+ remoteClient.listWorkers = () => workers;
+ remoteClient._eventEmitter.emit("workerListChanged");
+
+ info("Wait until the worker appears");
+ await waitUntil(() => !workersPane.querySelector(".js-debug-target-list-empty"));
+
+ const workerTarget = findDebugTargetByText(workerName, document);
+ ok(workerTarget, "Worker target appeared for the remote runtime");
+
+ // Check that the list of REMOTE workers are NOT updated when the local this-firefox
+ // emits a workerListChanged event.
+ info("Remove the worker from the remote client WITHOUT sending an event");
+ remoteClient.listWorkers = () => EMPTY_WORKERS_RESPONSE;
+
+ info("Simulate a worker update on the ThisFirefox client");
+ firefoxClient._eventEmitter.emit("workerListChanged");
+
+ // To avoid wait for a set period of time we trigger another async update, adding a new
+ // tab. We assume that if the worker update mechanism had started, it would also be done
+ // when the new tab was processed.
+ info("Wait until the tab target for 'http://some.random/url.com' appears");
+ const testTab = { outerWindowID: 0, url: "http://some.random/url.com" };
+ remoteClient.listTabs = () => [testTab];
+ remoteClient._eventEmitter.emit("tabListChanged");
+ await waitUntil(() => findDebugTargetByText("http://some.random/url.com", document));
+
+ ok(findDebugTargetByText(workerName, document),
+ "The test worker is still visible");
+
+ info("Emit `workerListChanged` on remoteClient and wait for the target list to update");
+ remoteClient._eventEmitter.emit("workerListChanged");
+ await waitUntil(() => !findDebugTargetByText(workerName, document));
+}
diff --git a/devtools/client/aboutdebugging-new/test/browser/mocks/helper-client-wrapper-mock.js b/devtools/client/aboutdebugging-new/test/browser/mocks/helper-client-wrapper-mock.js
index e12a7cae5b59..7554f855b500 100644
--- a/devtools/client/aboutdebugging-new/test/browser/mocks/helper-client-wrapper-mock.js
+++ b/devtools/client/aboutdebugging-new/test/browser/mocks/helper-client-wrapper-mock.js
@@ -76,6 +76,8 @@ function createClientMock() {
sharedWorkers: [],
}),
// no-op
+ getFront: () => {},
+ // no-op
onFront: () => {},
// stores the preference locally (doesn't update about:config)
setPreference: function(prefName, value) {
diff --git a/devtools/client/aboutdebugging/components/workers/Panel.js b/devtools/client/aboutdebugging/components/workers/Panel.js
index e5c9dd8c07ff..0bc8a52c8871 100644
--- a/devtools/client/aboutdebugging/components/workers/Panel.js
+++ b/devtools/client/aboutdebugging/components/workers/Panel.js
@@ -15,7 +15,7 @@ const {
addMultiE10sListener,
isMultiE10s,
removeMultiE10sListener,
-} = require("devtools/client/shared/multi-e10s-helper");
+} = require("devtools/shared/multi-e10s-helper");
const PanelHeader = createFactory(require("../PanelHeader"));
const TargetList = createFactory(require("../TargetList"));
diff --git a/devtools/client/responsive.html/setting-onboarding-tooltip.js b/devtools/client/responsive.html/setting-onboarding-tooltip.js
index d6ca79117b10..e6f14157eebe 100644
--- a/devtools/client/responsive.html/setting-onboarding-tooltip.js
+++ b/devtools/client/responsive.html/setting-onboarding-tooltip.js
@@ -20,7 +20,10 @@ const CONTAINER_WIDTH = 270;
class SettingOnboardingTooltip {
constructor(doc) {
this.doc = doc;
- this.tooltip = new HTMLTooltip(this.doc, { type: "arrow" });
+ this.tooltip = new HTMLTooltip(this.doc, {
+ consumeOutsideClicks: false,
+ type: "arrow",
+ });
this.onCloseButtonClick = this.onCloseButtonClick.bind(this);
diff --git a/devtools/client/shared/moz.build b/devtools/client/shared/moz.build
index 6148d21de332..45f2c651d3da 100644
--- a/devtools/client/shared/moz.build
+++ b/devtools/client/shared/moz.build
@@ -37,7 +37,6 @@ DevToolsModules(
'key-shortcuts.js',
'keycodes.js',
'link.js',
- 'multi-e10s-helper.js',
'natural-sort.js',
'node-attribute-parser.js',
'options-view.js',
diff --git a/devtools/server/actors/device.js b/devtools/server/actors/device.js
index d9a71a7a3181..67e028480be9 100644
--- a/devtools/server/actors/device.js
+++ b/devtools/server/actors/device.js
@@ -8,6 +8,12 @@ const {Ci, Cc} = require("chrome");
const Services = require("Services");
const protocol = require("devtools/shared/protocol");
const {LongStringActor} = require("devtools/server/actors/string");
+const {
+ addMultiE10sListener,
+ isMultiE10s,
+ removeMultiE10sListener,
+} = require("devtools/shared/multi-e10s-helper");
+
const {DebuggerServer} = require("devtools/server/main");
const {getSystemInfo} = require("devtools/shared/system");
const {deviceSpec} = require("devtools/shared/specs/device");
@@ -23,6 +29,9 @@ exports.DeviceActor = protocol.ActorClassWithSpec(deviceSpec, {
this._window.addEventListener("pageshow", this._onPageShow, true);
}
this._acquireWakeLock();
+
+ this._onMultiE10sUpdated = this._onMultiE10sUpdated.bind(this);
+ addMultiE10sListener(this._onMultiE10sUpdated);
},
destroy: function() {
@@ -31,10 +40,15 @@ exports.DeviceActor = protocol.ActorClassWithSpec(deviceSpec, {
if (this._window) {
this._window.removeEventListener("pageshow", this._onPageShow, true);
}
+ removeMultiE10sListener(this._onMultiE10sUpdated);
+ },
+
+ _onMultiE10sUpdated: function() {
+ this.emit("multi-e10s-updated", isMultiE10s());
},
getDescription: function() {
- return getSystemInfo();
+ return Object.assign({}, getSystemInfo(), { isMultiE10s: isMultiE10s() });
},
screenshotToDataURL: function() {
diff --git a/devtools/shared/moz.build b/devtools/shared/moz.build
index f44017ea5f81..4d2fe0430db9 100644
--- a/devtools/shared/moz.build
+++ b/devtools/shared/moz.build
@@ -65,6 +65,7 @@ DevToolsModules(
'l10n.js',
'loader-plugin-raw.jsm',
'Loader.jsm',
+ 'multi-e10s-helper.js',
'Parser.jsm',
'path.js',
'plural-form.js',
diff --git a/devtools/client/shared/multi-e10s-helper.js b/devtools/shared/multi-e10s-helper.js
similarity index 100%
rename from devtools/client/shared/multi-e10s-helper.js
rename to devtools/shared/multi-e10s-helper.js
diff --git a/devtools/shared/specs/device.js b/devtools/shared/specs/device.js
index 2fa7e5ae173f..551149d7c34b 100644
--- a/devtools/shared/specs/device.js
+++ b/devtools/shared/specs/device.js
@@ -3,11 +3,17 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
-const {RetVal, generateActorSpec} = require("devtools/shared/protocol");
-
+const { Arg, RetVal, generateActorSpec } = require("devtools/shared/protocol");
const deviceSpec = generateActorSpec({
typeName: "device",
+ events: {
+ "multi-e10s-updated": {
+ type: "multi-e10s-updated",
+ isMultiE10s: Arg(0, "boolean"),
+ },
+ },
+
methods: {
getDescription: {request: {}, response: { value: RetVal("json")}},
screenshotToDataURL: {request: {}, response: { value: RetVal("longstring")}},
diff --git a/devtools/shared/system.js b/devtools/shared/system.js
index e6985e9da24d..0069bcb902cf 100644
--- a/devtools/shared/system.js
+++ b/devtools/shared/system.js
@@ -35,7 +35,7 @@ const APP_MAP = {
var CACHED_INFO = null;
-async function getSystemInfo() {
+function getSystemInfo() {
if (CACHED_INFO) {
return CACHED_INFO;
}
diff --git a/editor/reftests/xul/emptytextbox-3.xul b/editor/reftests/xul/emptytextbox-3.xul
deleted file mode 100644
index a37ce642982f..000000000000
--- a/editor/reftests/xul/emptytextbox-3.xul
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/number-1.xul b/editor/reftests/xul/number-1.xul
deleted file mode 100644
index a37ce642982f..000000000000
--- a/editor/reftests/xul/number-1.xul
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/number-2.xul b/editor/reftests/xul/number-2.xul
deleted file mode 100644
index 73d2e84a091e..000000000000
--- a/editor/reftests/xul/number-2.xul
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/number-3.xul b/editor/reftests/xul/number-3.xul
deleted file mode 100644
index 8ddadcf63527..000000000000
--- a/editor/reftests/xul/number-3.xul
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/number-4.xul b/editor/reftests/xul/number-4.xul
deleted file mode 100644
index 40650e8e4d1e..000000000000
--- a/editor/reftests/xul/number-4.xul
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/number-5.xul b/editor/reftests/xul/number-5.xul
deleted file mode 100644
index bd6346fe5050..000000000000
--- a/editor/reftests/xul/number-5.xul
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/number-ref.xul b/editor/reftests/xul/number-ref.xul
deleted file mode 100644
index c5960515e186..000000000000
--- a/editor/reftests/xul/number-ref.xul
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/numberwithvalue-1.xul b/editor/reftests/xul/numberwithvalue-1.xul
deleted file mode 100644
index 3aaebcfdfeaa..000000000000
--- a/editor/reftests/xul/numberwithvalue-1.xul
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/numberwithvalue-ref.xul b/editor/reftests/xul/numberwithvalue-ref.xul
deleted file mode 100644
index 79f1c9baefe2..000000000000
--- a/editor/reftests/xul/numberwithvalue-ref.xul
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/editor/reftests/xul/reftest.list b/editor/reftests/xul/reftest.list
index 3318d66aefd2..04e6eba07379 100644
--- a/editor/reftests/xul/reftest.list
+++ b/editor/reftests/xul/reftest.list
@@ -8,16 +8,7 @@ fails-if(Android) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[
fails-if(Android) == emptymultiline-2.xul emptymultiline-ref.xul # bug 783658
fails-if(Android) skip-if(winWidget) == emptytextbox-1.xul emptytextbox-ref.xul # Windows: bug 1239170
fails-if(Android) skip-if(winWidget) == emptytextbox-2.xul emptytextbox-ref.xul # Windows: bug 1239170
-!= emptytextbox-3.xul emptytextbox-ref.xul
!= emptytextbox-4.xul emptytextbox-ref.xul
-# There is no way to simulate a number textbox in windows XP/Vista/7 default theme using CSS.
-# Therefore, the equlity tests below should be marked as failing.
-!= number-1.xul number-ref.xul
-!= number-2.xul number-ref.xul
-fuzzy-if(webrender,0-205,0-7) fails-if(Android) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012]|10\.0)/.test(http.oscpu)) == number-3.xul number-ref.xul # bug 783658
-!= number-4.xul number-ref.xul
-fuzzy-if(webrender,0-205,0-7) fails-if(Android) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012]|10\.0)/.test(http.oscpu)) == number-5.xul number-ref.xul # bug 783658
-fuzzy-if(webrender,0-255,0-7) fails-if(Android) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012]|10\.0)/.test(http.oscpu)) == numberwithvalue-1.xul numberwithvalue-ref.xul # bug 783658
fails-if(Android) skip-if(winWidget) == passwd-1.xul passwd-ref.xul # Windows: bug 1239170
fails-if(Android) skip-if(winWidget) == passwd-2.xul passwd-ref.xul # Windows: bug 1239170
!= passwd-3.xul passwd-ref.xul
diff --git a/gfx/layers/composite/AsyncCompositionManager.cpp b/gfx/layers/composite/AsyncCompositionManager.cpp
index 5b50c892c2d7..3434aafba010 100644
--- a/gfx/layers/composite/AsyncCompositionManager.cpp
+++ b/gfx/layers/composite/AsyncCompositionManager.cpp
@@ -1004,6 +1004,9 @@ bool AsyncCompositionManager::ApplyAsyncContentTransformToTree(
if (RefPtr uiController =
UiCompositorControllerParent::
GetFromRootLayerTreeId(rootLayerTreeId)) {
+ if (!animator) {
+ uiController->NotifyUpdateScreenMetrics(metrics);
+ }
uiController->NotifyFirstPaint();
}
mIsFirstPaint = false;
diff --git a/gfx/layers/ipc/UiCompositorControllerParent.cpp b/gfx/layers/ipc/UiCompositorControllerParent.cpp
index 51d859ca5b5b..1536e1eaef93 100644
--- a/gfx/layers/ipc/UiCompositorControllerParent.cpp
+++ b/gfx/layers/ipc/UiCompositorControllerParent.cpp
@@ -16,6 +16,8 @@
#include "mozilla/Move.h"
#include "mozilla/Unused.h"
+#include "FrameMetrics.h"
+
namespace mozilla {
namespace layers {
@@ -240,6 +242,21 @@ void UiCompositorControllerParent::NotifyFirstPaint() {
ToolbarAnimatorMessageFromCompositor(FIRST_PAINT);
}
+void UiCompositorControllerParent::NotifyUpdateScreenMetrics(
+ const FrameMetrics& aMetrics) {
+#if defined(MOZ_WIDGET_ANDROID)
+ CSSToScreenScale scale = ViewTargetAs(
+ aMetrics.GetZoom().ToScaleFactor(),
+ PixelCastJustification::ScreenIsParentLayerForRoot);
+ ScreenPoint scrollOffset = aMetrics.GetScrollOffset() * scale;
+ CompositorThreadHolder::Loop()->PostTask(
+ NewRunnableMethod(
+ "UiCompositorControllerParent::SendRootFrameMetrics", this,
+ &UiCompositorControllerParent::SendRootFrameMetrics, scrollOffset,
+ scale));
+#endif
+}
+
UiCompositorControllerParent::UiCompositorControllerParent(
const LayersId& aRootLayerTreeId)
: mRootLayerTreeId(aRootLayerTreeId)
diff --git a/gfx/layers/ipc/UiCompositorControllerParent.h b/gfx/layers/ipc/UiCompositorControllerParent.h
index 664c25dfa979..83a6c8084152 100644
--- a/gfx/layers/ipc/UiCompositorControllerParent.h
+++ b/gfx/layers/ipc/UiCompositorControllerParent.h
@@ -16,6 +16,8 @@
namespace mozilla {
namespace layers {
+struct FrameMetrics;
+
class UiCompositorControllerParent final
: public PUiCompositorControllerParent {
// UiCompositorControllerChild needs to call the private constructor when
@@ -66,6 +68,7 @@ class UiCompositorControllerParent final
// necessary.
void NotifyLayersUpdated();
void NotifyFirstPaint();
+ void NotifyUpdateScreenMetrics(const FrameMetrics& aMetrics);
private:
explicit UiCompositorControllerParent(const LayersId& aRootLayerTreeId);
diff --git a/gfx/webrender_bindings/revision.txt b/gfx/webrender_bindings/revision.txt
index 006f7bcc6967..13888a817bfa 100644
--- a/gfx/webrender_bindings/revision.txt
+++ b/gfx/webrender_bindings/revision.txt
@@ -1 +1 @@
-fb4b9342aa1b047ac46b89cb7a70987816bee686
+ff9940fdf95412a3e5d1a70c78defba6e919c170
diff --git a/gfx/wr/webrender/src/freelist.rs b/gfx/wr/webrender/src/freelist.rs
index 0081428b4b34..faec9b710948 100644
--- a/gfx/wr/webrender/src/freelist.rs
+++ b/gfx/wr/webrender/src/freelist.rs
@@ -263,6 +263,7 @@ impl FreeList {
slot.value.take().unwrap()
}
+ #[allow(dead_code)]
pub fn len(&self) -> usize {
self.active_count
}
diff --git a/gfx/wr/webrender/src/texture_cache.rs b/gfx/wr/webrender/src/texture_cache.rs
index bb10a8973106..32d094fb7cdc 100644
--- a/gfx/wr/webrender/src/texture_cache.rs
+++ b/gfx/wr/webrender/src/texture_cache.rs
@@ -526,7 +526,8 @@ impl TextureCache {
self.debug_flags = flags;
}
- pub fn clear(&mut self) {
+ /// Clear all standalone textures in the cache.
+ pub fn clear_standalone(&mut self) {
let standalone_entry_handles = mem::replace(
&mut self.handles.standalone,
Vec::new(),
@@ -537,7 +538,10 @@ impl TextureCache {
entry.evict();
self.free(entry);
}
+ }
+ /// Clear all shared textures in the cache.
+ pub fn clear_shared(&mut self) {
let shared_entry_handles = mem::replace(
&mut self.handles.shared,
Vec::new(),
@@ -549,11 +553,16 @@ impl TextureCache {
self.free(entry);
}
- assert!(self.entries.len() == 0);
-
self.shared_textures.clear(&mut self.pending_updates);
}
+ /// Clear all entries in the texture cache. This is a fairly drastic
+ /// step that should only be called very rarely.
+ pub fn clear(&mut self) {
+ self.clear_standalone();
+ self.clear_shared();
+ }
+
/// Called at the beginning of each frame.
pub fn begin_frame(&mut self, stamp: FrameStamp) {
self.now = stamp;
@@ -597,7 +606,7 @@ impl TextureCache {
if let Some(t) = self.reached_reclaim_threshold {
let dur = self.now.time().duration_since(t).unwrap_or(Duration::default());
if dur >= Duration::from_secs(5) {
- self.clear();
+ self.clear_shared();
self.reached_reclaim_threshold = None;
}
}
diff --git a/mobile/android/installer/allowed-dupes.mn b/mobile/android/installer/allowed-dupes.mn
index 252cf4ead183..7abd418fbaf5 100644
--- a/mobile/android/installer/allowed-dupes.mn
+++ b/mobile/android/installer/allowed-dupes.mn
@@ -14,7 +14,7 @@ chrome/toolkit/skin/classic/global/global.css
chrome/toolkit/skin/classic/global/listbox.css
chrome/toolkit/skin/classic/global/menu.css
chrome/toolkit/skin/classic/global/menulist.css
-chrome/toolkit/skin/classic/global/numberbox.css
+chrome/toolkit/skin/classic/global/numberinput.css
chrome/toolkit/skin/classic/global/popup.css
chrome/toolkit/skin/classic/global/preferences.css
chrome/toolkit/skin/classic/global/radio.css
diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_navigation.py b/testing/marionette/harness/marionette_harness/tests/unit/test_navigation.py
index 837ba096b387..2efe292b0309 100644
--- a/testing/marionette/harness/marionette_harness/tests/unit/test_navigation.py
+++ b/testing/marionette/harness/marionette_harness/tests/unit/test_navigation.py
@@ -15,7 +15,6 @@ from marionette_harness import (
MarionetteTestCase,
run_if_e10s,
run_if_manage_instance,
- skip,
skip_if_mobile,
WindowManagerMixin,
)
@@ -819,10 +818,9 @@ class TestPageLoadStrategy(BaseNavigationTestCase):
self.assertEqual("complete", self.ready_state)
self.marionette.find_element(By.ID, "slow")
- @skip("Bug 1422741 - Causes following tests to fail in loading remote browser")
@run_if_e10s("Requires e10s mode enabled")
def test_strategy_after_remoteness_change(self):
- """Bug 1378191 - Reset of capabilities after listener reload"""
+ """Bug 1378191 - Reset of capabilities after listener reload."""
self.marionette.delete_session()
self.marionette.start_session({"pageLoadStrategy": "eager"})
diff --git a/testing/marionette/reftest.js b/testing/marionette/reftest.js
index 45ce07641598..04b0f58928af 100644
--- a/testing/marionette/reftest.js
+++ b/testing/marionette/reftest.js
@@ -408,6 +408,14 @@ max-width: ${REFTEST_WIDTH}px; max-height: ${REFTEST_HEIGHT}px`;
pixelsDifferent <= allowedPixels[1]));
}
+ ensureFocus(win) {
+ const focusManager = Services.focus;
+ if (focusManager.activeWindow != win) {
+ focusManager.activeWindow = win;
+ }
+ this.driver.curBrowser.contentBrowser.focus();
+ }
+
async screenshot(win, url, timeout) {
win.innerWidth = REFTEST_WIDTH;
win.innerHeight = REFTEST_HEIGHT;
@@ -466,7 +474,7 @@ max-width: ${REFTEST_WIDTH}px; max-height: ${REFTEST_HEIGHT}px`;
this.lastURL = url;
}
- this.driver.curBrowser.contentBrowser.focus();
+ this.ensureFocus(win);
await this.driver.listener.reftestWait(url, this.remote);
canvas = capture.canvas(
diff --git a/toolkit/components/printing/content/printPreviewToolbar.js b/toolkit/components/printing/content/printPreviewToolbar.js
index f2703fe34a83..de001bf88411 100644
--- a/toolkit/components/printing/content/printPreviewToolbar.js
+++ b/toolkit/components/printing/content/printPreviewToolbar.js
@@ -24,7 +24,7 @@ customElements.define("printpreview-toolbar", class PrintPreviewToolbar extends
-
+
@@ -104,6 +104,11 @@ customElements.define("printpreview-toolbar", class PrintPreviewToolbar extends
this.mPPBrowser = null;
this.mMessageManager = null;
+
+ this.mOnPageTextBoxChange = () => {
+ this.navigate(0, Number(this.mPageTextBox.value), 0);
+ };
+ this.mPageTextBox.addEventListener("change", this.mOnPageTextBoxChange);
}
initialize(aPPBrowser) {
@@ -140,6 +145,7 @@ customElements.define("printpreview-toolbar", class PrintPreviewToolbar extends
disconnectedCallback() {
window.removeEventListener("unload", this.disconnectedCallback);
+ this.mPageTextBox.removeEventListener("change", this.mOnPageTextBoxChange);
this.destroy();
}
@@ -188,9 +194,9 @@ customElements.define("printpreview-toolbar", class PrintPreviewToolbar extends
} else if (aDirection) {
// aDirection is either +1 or -1, and allows us to increment
// or decrement our currently viewed page.
- this.mPageTextBox.valueNumber += aDirection;
+ this.mPageTextBox.value = Number(this.mPageTextBox.value) + aDirection;
navType = nsIWebBrowserPrint.PRINTPREVIEW_GOTO_PAGENUM;
- pageNum = this.mPageTextBox.value; // TODO: back to valueNumber?
+ pageNum = this.mPageTextBox.value;
} else {
// We're going to a specific page (aPageNum)
navType = nsIWebBrowserPrint.PRINTPREVIEW_GOTO_PAGENUM;
diff --git a/toolkit/components/telemetry/tests/moz.build b/toolkit/components/telemetry/tests/moz.build
index 3ce6a3e40147..9cc30f53d9fe 100644
--- a/toolkit/components/telemetry/tests/moz.build
+++ b/toolkit/components/telemetry/tests/moz.build
@@ -14,6 +14,10 @@ SharedLibrary('modules-test')
NO_PGO = True
+TESTING_JS_MODULES += [
+ 'utils/TelemetryTestUtils.jsm',
+]
+
if CONFIG['COMPILE_ENVIRONMENT']:
shared_library = '!%smodules-test%s' % (CONFIG['DLL_PREFIX'], CONFIG['DLL_SUFFIX'])
TEST_HARNESS_FILES.xpcshell.toolkit.components.telemetry.tests.unit += [shared_library]
diff --git a/toolkit/components/telemetry/tests/utils/TelemetryTestUtils.jsm b/toolkit/components/telemetry/tests/utils/TelemetryTestUtils.jsm
new file mode 100644
index 000000000000..bca13dd4fbd6
--- /dev/null
+++ b/toolkit/components/telemetry/tests/utils/TelemetryTestUtils.jsm
@@ -0,0 +1,182 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const EXPORTED_SYMBOLS = ["TelemetryTestUtils"];
+
+ChromeUtils.import("resource://testing-common/Assert.jsm");
+ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+var TelemetryTestUtils = {
+ /* Scalars */
+
+ /**
+ * An helper that asserts the value of a scalar if it's expected to be > 0,
+ * otherwise makes sure that the scalar has not been reported.
+ *
+ * @param {Object} scalars The snapshot of the scalars.
+ * @param {String} scalarName The name of the scalar to check.
+ * @param {Number} value The expected value for the provided scalar.
+ * @param {String} msg The message to print when checking the value.
+ */
+ assertScalar(scalars, scalarName, value, msg) {
+ if (value > 0) {
+ Assert.equal(scalars[scalarName], value, msg);
+ return;
+ }
+ Assert.ok(!(scalarName in scalars), scalarName + " must not be reported.");
+ },
+
+ /**
+ * Asserts if the snapshotted keyed scalars contain the expected
+ * data.
+ *
+ * @param {Object} scalars The snapshot of the keyed scalars.
+ * @param {String} scalarName The name of the keyed scalar to check.
+ * @param {String} key The key that must be within the keyed scalar.
+ * @param {String|Boolean|Number} expectedValue The expected value for the
+ * provided key in the scalar.
+ */
+ assertKeyedScalar(scalars, scalarName, key, expectedValue) {
+ Assert.ok(scalarName in scalars,
+ scalarName + " must be recorded.");
+ Assert.ok(key in scalars[scalarName],
+ scalarName + " must contain the '" + key + "' key.");
+ Assert.equal(scalars[scalarName][key], expectedValue,
+ scalarName + "['" + key + "'] must contain the expected value");
+ },
+
+ /**
+ * Returns a snapshot of scalars from the parent-process.
+ *
+ * @param {Number} aChannel The channel dataset type from nsITelemetry.
+ * @param {boolean} [aKeyed] Set to true if keyed scalars rather than normal
+ * scalars should be snapshotted.
+ * @param {boolean} [aClear] Set to true to clear the scalars once the snapshot
+ * has been obtained.
+ * @returns {Object} The snapshotted scalars from the parent process.
+ */
+ getParentProcessScalars(aChannel, aKeyed = false, aClear = false) {
+ const extended = aChannel == Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN;
+ const currentExtended = Services.telemetry.canRecordExtended;
+ Services.telemetry.canRecordExtended = extended;
+ const scalars = aKeyed ?
+ Services.telemetry.getSnapshotForKeyedScalars("main", aClear).parent :
+ Services.telemetry.getSnapshotForScalars("main", aClear).parent;
+ Services.telemetry.canRecordExtended = currentExtended;
+ return scalars || {};
+ },
+
+ /* Events */
+
+ /**
+ * Asserts if snapshotted events telemetry match the expected values.
+ *
+ * @param {Array} events Snapshotted telemetry events to test.
+ * @param {Array} expectedEvents The expected event data.
+ */
+ assertEvents(events, expectedEvents) {
+ if (!Services.telemetry.canRecordExtended) {
+ console.log("Not asserting event telemetry - canRecordExtended is disabled.");
+ return;
+ }
+
+ Assert.equal(events.length, expectedEvents.length, "Should have matching amount of events.");
+
+ // Strip timestamps from the events for easier comparison.
+ events = events.map(e => e.slice(1));
+
+ for (let i = 0; i < events.length; ++i) {
+ Assert.deepEqual(events[i], expectedEvents[i], "Events should match.");
+ }
+ },
+
+ /* Histograms */
+
+ /**
+ * Clear and get the named histogram.
+ *
+ * @param {String} name The name of the histogram
+ * @returns {Object} The obtained histogram.
+ */
+ getAndClearHistogram(name) {
+ let histogram = Services.telemetry.getHistogramById(name);
+ histogram.clear();
+ return histogram;
+ },
+
+
+ /**
+ * Clear and get the named keyed histogram.
+ *
+ * @param {String} name The name of the keyed histogram
+ * @returns {Object} The obtained keyed histogram.
+ */
+ getAndClearKeyedHistogram(name) {
+ let histogram = Services.telemetry.getKeyedHistogramById(name);
+ histogram.clear();
+ return histogram;
+ },
+
+ /**
+ * Assert that the histogram index is the right value. It expects that
+ * other indexes are all zero.
+ *
+ * @param {Object} histogram The histogram to check.
+ * @param {Number} index The index to check against the expected value.
+ * @param {Number} expected The expected value of the index.
+ */
+ assertHistogram(histogram, index, expected) {
+ const snapshot = histogram.snapshot();
+ for (let [i, val] of Object.entries(snapshot.values)) {
+ if (i == index) {
+ Assert.equal(val, expected,
+ `expected counts should match for the histogram index ${i}`);
+ } else {
+ Assert.equal(val, 0,
+ `unexpected counts should be zero for the histogram index ${i}`);
+ }
+ }
+ },
+
+ /**
+ * Assert that a key within a keyed histogram contains the required sum.
+ *
+ * @param {Object} histogram The keyed histogram to check.
+ * @param {String} key The key to check.
+ * @param {Number} [expected] The expected sum for the key.
+ */
+ assertKeyedHistogramSum(histogram, key, expected) {
+ const snapshot = histogram.snapshot();
+ if (expected === undefined) {
+ Assert.ok(!(key in snapshot), `The histogram must not contain ${key}.`);
+ return;
+ }
+ Assert.ok(key in snapshot, `The histogram must contain ${key}.`);
+ Assert.equal(snapshot[key].sum, expected,
+ `The key ${key} must contain the expected sum.`);
+ },
+
+ /**
+ * Assert that the value of a key within a keyed histogram is the right value.
+ * It expects that other values are all zero.
+ *
+ * @param {Object} histogram The keyed histogram to check.
+ * @param {String} key The key to check.
+ * @param {Number} index The index to check against the expected value.
+ * @param {Number} [expected] The expected values for the key.
+ */
+ assertKeyedHistogramValue(histogram, key, index, expected) {
+ const snapshot = histogram.snapshot();
+ for (let [i, val] of Object.entries(snapshot[key].values)) {
+ if (i == index) {
+ Assert.equal(val, expected,
+ `expected counts should match for the histogram index ${i}`);
+ } else {
+ Assert.equal(val, 0,
+ `unexpected counts should be zero for the histogram index ${i}`);
+ }
+ }
+ },
+};
diff --git a/toolkit/content/customElements.js b/toolkit/content/customElements.js
index 82883005a961..52c82b263f23 100644
--- a/toolkit/content/customElements.js
+++ b/toolkit/content/customElements.js
@@ -141,7 +141,8 @@ const MozElementMixin = Base => class MozElement extends Base {
`;
}, "")}
]>` : ""}
-
+
${str}
`, "application/xml");
diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
index a772d075ca7d..374315701d49 100644
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
@@ -75,7 +75,6 @@ toolkit.jar:
content/global/bindings/menu.xml (widgets/menu.xml)
content/global/bindings/menulist.xml (widgets/menulist.xml)
content/global/bindings/notification.xml (widgets/notification.xml)
- content/global/bindings/numberbox.xml (widgets/numberbox.xml)
content/global/bindings/popup.xml (widgets/popup.xml)
content/global/bindings/radio.xml (widgets/radio.xml)
content/global/bindings/richlistbox.xml (widgets/richlistbox.xml)
@@ -93,7 +92,7 @@ toolkit.jar:
* content/global/bindings/wizard.xml (widgets/wizard.xml)
content/global/elements/datetimebox.js (widgets/datetimebox.js)
content/global/elements/findbar.js (widgets/findbar.js)
- content/global/elements/editor.js (widgets/editor.js)
+ content/global/elements/editor.js (widgets/editor.js)
content/global/elements/general.js (widgets/general.js)
content/global/elements/notificationbox.js (widgets/notificationbox.js)
content/global/elements/pluginProblem.js (widgets/pluginProblem.js)
diff --git a/toolkit/content/tests/chrome/chrome.ini b/toolkit/content/tests/chrome/chrome.ini
index 82888c8e53df..c46a20010498 100644
--- a/toolkit/content/tests/chrome/chrome.ini
+++ b/toolkit/content/tests/chrome/chrome.ini
@@ -182,7 +182,6 @@ support-files = window_preferences_onsyncfrompreference.xul
[test_tabindex.xul]
[test_textbox_dictionary.xul]
[test_textbox_emptytext.xul]
-[test_textbox_number.xul]
[test_textbox_search.xul]
[test_titlebar.xul]
skip-if = os == "linux"
diff --git a/toolkit/content/tests/chrome/test_textbox_number.xul b/toolkit/content/tests/chrome/test_textbox_number.xul
deleted file mode 100644
index 0f7e55e54ded..000000000000
--- a/toolkit/content/tests/chrome/test_textbox_number.xul
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/toolkit/content/widgets.css b/toolkit/content/widgets.css
index bef24b61b79c..4604909e23c4 100644
--- a/toolkit/content/widgets.css
+++ b/toolkit/content/widgets.css
@@ -16,17 +16,14 @@
@import url("chrome://global/skin/menu.css");
@import url("chrome://global/skin/menulist.css");
@import url("chrome://global/skin/notification.css");
+@import url("chrome://global/skin/numberinput.css");
@import url("chrome://global/skin/popup.css");
@import url("chrome://global/skin/radio.css");
@import url("chrome://global/skin/richlistbox.css");
@import url("chrome://global/skin/scrollbox.css");
@import url("chrome://global/skin/splitter.css");
@import url("chrome://global/skin/tabbox.css");
-
-/* numberbox.css needs to be loaded after textbox.css since it overrides it */
@import url("chrome://global/skin/textbox.css");
-@import url("chrome://global/skin/numberbox.css");
-
@import url("chrome://global/skin/toolbar.css");
@import url("chrome://global/skin/toolbarbutton.css");
@import url("chrome://global/skin/tree.css");
diff --git a/toolkit/content/widgets/numberbox.xml b/toolkit/content/widgets/numberbox.xml
deleted file mode 100644
index 68ffe7d606ab..000000000000
--- a/toolkit/content/widgets/numberbox.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
- 0
-
-
-
-
-
- if (this._valueEntered) {
- var newval = this.inputField.value;
- this._validateValue(newval);
- }
- return this._value;
-
-
- this._validateValue(val);
- return val;
-
-
-
-
- var min = this.getAttribute("min");
- return min ? Number(min) : 0;
-
-
-
-
-
-
-
-
- var max = this.getAttribute("max");
- return max ? Number(max) : Infinity;
-
-
- val)
- this._validateValue(val);
- return val;
- ]]>
-
-
-
-
-
-
- max)
- aValue = max;
-
- this._valueEntered = false;
- this._value = Number(aValue);
- this.inputField.value = aValue;
-
- return aValue;
- ]]>
-
-
-
-
-
- var evt = document.createEvent("Events");
- evt.initEvent("change", true, true);
- this.dispatchEvent(evt);
-
-
-
-
-
-
-
-
-
- this._valueEntered = true;
-
-
-
- 57)
- event.preventDefault();
- }
- ]]>
-
-
-
- if (event.originalTarget == this.inputField) {
- this._validateValue(this.inputField.value);
- }
-
-
-
-
-
-
diff --git a/toolkit/content/widgets/textbox.xml b/toolkit/content/widgets/textbox.xml
index b6e13f20083b..0c6fe7255090 100644
--- a/toolkit/content/widgets/textbox.xml
+++ b/toolkit/content/widgets/textbox.xml
@@ -194,29 +194,27 @@
if (this.hasAttribute("focused"))
return;
- let { originalTarget } = event;
- if (originalTarget == this) {
- // Forward focus to actual HTML input
- this.inputField.focus();
- this.setAttribute("focused", "true");
- return;
+ switch (event.originalTarget) {
+ case this:
+ // Forward focus to actual HTML input
+ this.inputField.focus();
+ this.setAttribute("focused", "true");
+ break;
+ case this.inputField:
+ if (this.mIgnoreFocus) {
+ this.mIgnoreFocus = false;
+ } else if (this.clickSelectsAll) {
+ try {
+ if (!this.editor || !this.editor.composing)
+ this.editor.selectAll();
+ } catch (e) {}
+ }
+ this.setAttribute("focused", "true");
+ break;
+ default:
+ // Otherwise, allow other children (e.g. URL bar buttons) to get focus
+ break;
}
-
- // We check for the parent nodes to support input[type=number] where originalTarget may be an
- // anonymous child input.
- if (originalTarget == this.inputField ||
- originalTarget.localName == "input" && originalTarget.parentNode.parentNode == this.inputField) {
- if (this.mIgnoreFocus) {
- this.mIgnoreFocus = false;
- } else if (this.clickSelectsAll) {
- try {
- if (!this.editor || !this.editor.composing)
- this.editor.selectAll();
- } catch (e) {}
- }
- this.setAttribute("focused", "true");
- }
- // Otherwise, allow other children (e.g. URL bar buttons) to get focus
]]>
diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css
index 08a4e4dd6b94..601e89379a05 100644
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -562,10 +562,6 @@ textbox[type="search"] {
-moz-binding: url("chrome://global/content/bindings/textbox.xml#search-textbox");
}
-textbox[type="number"] {
- -moz-binding: url("chrome://global/content/bindings/numberbox.xml#numberbox");
-}
-
@supports -moz-bool-pref("layout.css.emulate-moz-box-with-flex") {
html|*.textbox-input,
html|*.textbox-textarea {
diff --git a/toolkit/themes/linux/global/global.css b/toolkit/themes/linux/global/global.css
index adecf764456b..5e13e993f976 100644
--- a/toolkit/themes/linux/global/global.css
+++ b/toolkit/themes/linux/global/global.css
@@ -11,6 +11,7 @@
@import url("chrome://global/content/widgets.css");
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+@namespace html url("http://www.w3.org/1999/xhtml");
%include ../../shared/global.inc.css
@@ -121,9 +122,10 @@ toolbar[mode="text"] .toolbarbutton-text {
list-style-image: url("moz-icon://stock/gtk-orientation-landscape?size=button");
}
-#print-preview-pageNumber {
- /* 3 chars + 4px padding left + 2px padding right + 2*6px border */
- width: calc(18px + 3ch);
+html|*#print-preview-pageNumber {
+ /* 3 chars + (3px border + 1px padding) on both sides */
+ width: calc(8px + 3ch);
+ margin: 0 4px;
}
/* ::::: miscellaneous formatting ::::: */
@@ -257,4 +259,3 @@ popupnotificationcontent {
}
%include ../../shared/notification-popup.inc.css
-
diff --git a/toolkit/themes/linux/global/in-content/common.css b/toolkit/themes/linux/global/in-content/common.css
index 7ed60c9fbf94..ccb076297b4f 100644
--- a/toolkit/themes/linux/global/in-content/common.css
+++ b/toolkit/themes/linux/global/in-content/common.css
@@ -43,11 +43,6 @@ xul|*.radio-label-box {
-moz-appearance: none;
}
-xul|*.numberbox-input-box {
- -moz-appearance: none;
- border-width: 0;
-}
-
xul|menulist:-moz-focusring > xul|*.menulist-label-box {
outline: none;
}
diff --git a/toolkit/themes/mobile/jar.mn b/toolkit/themes/mobile/jar.mn
index 52700c5e18c9..9b41bc571b52 100644
--- a/toolkit/themes/mobile/jar.mn
+++ b/toolkit/themes/mobile/jar.mn
@@ -13,7 +13,7 @@ toolkit.jar:
skin/classic/global/global.css (global/empty.css)
skin/classic/global/menu.css (global/empty.css)
skin/classic/global/menulist.css (global/empty.css)
- skin/classic/global/numberbox.css (global/empty.css)
+ skin/classic/global/numberinput.css (global/empty.css)
skin/classic/global/popup.css (global/empty.css)
skin/classic/global/radio.css (global/empty.css)
skin/classic/global/richlistbox.css (global/empty.css)
diff --git a/toolkit/themes/osx/global/in-content/common.css b/toolkit/themes/osx/global/in-content/common.css
index 64f97f3bf52a..f9ee778853ec 100644
--- a/toolkit/themes/osx/global/in-content/common.css
+++ b/toolkit/themes/osx/global/in-content/common.css
@@ -70,14 +70,6 @@ xul|radio[focused="true"] > .radio-check {
-moz-outline-radius: 100%;
}
-html|*.numberbox-input::-moz-number-spin-up {
- border-radius: 4px 4px 0 0;
-}
-
-html|*.numberbox-input::-moz-number-spin-down {
- border-radius: 0 0 4px 4px;
-}
-
textbox[type="search"] {
-moz-appearance: none;
padding-inline-start: 8px;
diff --git a/toolkit/themes/osx/global/notification.css b/toolkit/themes/osx/global/notification.css
index cfc15cee31d8..3cbd6b9c07d9 100644
--- a/toolkit/themes/osx/global/notification.css
+++ b/toolkit/themes/osx/global/notification.css
@@ -8,11 +8,6 @@
%include ../../shared/notification.inc.css
%include ../../shared/popupnotification.inc.css
-.popup-notification-button:-moz-focusring {
- outline: 2px -moz-mac-focusring solid;
- outline-offset: -2px;
-}
-
.popup-notification-warning {
color: #aa1b08;
}
diff --git a/toolkit/themes/shared/global.inc.css b/toolkit/themes/shared/global.inc.css
index 3d9c1315a2a1..059c0b64862b 100644
--- a/toolkit/themes/shared/global.inc.css
+++ b/toolkit/themes/shared/global.inc.css
@@ -96,3 +96,7 @@
.panel-footer > button:not([disabled])[default]:hover:active {
background-color: #002275;
}
+
+.panel-footer > button > .button-box {
+ padding: 0;
+}
diff --git a/toolkit/themes/shared/in-content/common.inc.css b/toolkit/themes/shared/in-content/common.inc.css
index 18e918c233ff..f55e78fb50b9 100644
--- a/toolkit/themes/shared/in-content/common.inc.css
+++ b/toolkit/themes/shared/in-content/common.inc.css
@@ -165,9 +165,7 @@ html|button {
*|button,
html|select,
html|input[type="color"],
-xul|menulist,
-html|*.numberbox-input::-moz-number-spin-up,
-html|*.numberbox-input::-moz-number-spin-down {
+xul|menulist {
-moz-appearance: none;
min-height: 32px;
/* !important overrides button.css for disabled and default XUL buttons: */
@@ -199,9 +197,7 @@ html|input[type="color"]::-moz-focus-inner {
*|button:-moz-focusring,
html|select:-moz-focusring,
html|input[type="color"]:-moz-focusring,
-xul|menulist:-moz-focusring,
-html|input[type="number"]:-moz-focusring::-moz-number-spin-up,
-html|input[type="number"]:-moz-focusring::-moz-number-spin-down {
+xul|menulist:-moz-focusring {
outline: none;
box-shadow: 0 0 0 1px var(--in-content-border-active) inset,
0 0 0 1px var(--in-content-border-active),
@@ -225,8 +221,6 @@ html|select:not([size]):not([multiple]):dir(rtl) {
html|button:enabled:hover,
html|select:not([size]):not([multiple]):enabled:hover,
-html|*.numberbox-input::-moz-number-spin-up:hover,
-html|*.numberbox-input::-moz-number-spin-down:hover,
html|input[type="color"]:hover,
xul|button:not([disabled="true"]):hover,
xul|menulist:not([disabled="true"]):hover {
@@ -235,8 +229,6 @@ xul|menulist:not([disabled="true"]):hover {
html|button:enabled:hover:active,
html|select:not([size]):not([multiple]):enabled:hover:active,
-html|*.numberbox-input::-moz-number-spin-up:hover:active,
-html|*.numberbox-input::-moz-number-spin-down:hover:active,
html|input[type="color"]:enabled:hover:active,
xul|button:not([disabled="true"]):hover:active,
xul|menulist[open="true"]:not([disabled="true"]) {
@@ -245,7 +237,6 @@ xul|menulist[open="true"]:not([disabled="true"]) {
html|button:disabled,
html|select:disabled,
-html|*.numberbox-input:disabled::-moz-number-spin-box,
html|input[type="color"]:disabled,
xul|button[disabled="true"],
xul|menulist[disabled="true"] {
@@ -297,28 +288,6 @@ xul|*.close-icon > xul|*.button-box {
padding-left: 0 !important;
}
-html|*.numberbox-input::-moz-number-spin-box {
- margin-inline-end: 1px;
-}
-
-html|*.numberbox-input::-moz-number-spin-up,
-html|*.numberbox-input::-moz-number-spin-down {
- padding: 5px 8px;
- margin: 0;
- min-height: initial;
- background-position: center;
-}
-
-html|*.numberbox-input::-moz-number-spin-up {
- border-radius: 1px 1px 0 0;
- background-image: url("chrome://global/skin/arrow/arrow-up.gif");
-}
-
-html|*.numberbox-input::-moz-number-spin-down {
- border-radius: 0 0 1px 1px;
- background-image: url("chrome://global/skin/arrow/arrow-dn.gif");
-}
-
xul|*.menulist-dropmarker {
-moz-appearance: none;
margin-inline-end: 4px;
@@ -418,14 +387,6 @@ xul|textbox {
padding-left: 8px;
}
-xul|textbox[type="number"] {
- padding-inline-end: 0;
-}
-
-html|*.numberbox-input::-moz-number-text {
- margin-inline-end: 10px;
-}
-
/* Create a separate rule to unset these styles on .tree-input instead of
using :not(.tree-input) so the selector specifity doesn't change. */
xul|textbox.tree-input {
diff --git a/toolkit/themes/shared/jar.inc.mn b/toolkit/themes/shared/jar.inc.mn
index a31577d53f43..0ca25053874f 100644
--- a/toolkit/themes/shared/jar.inc.mn
+++ b/toolkit/themes/shared/jar.inc.mn
@@ -22,7 +22,7 @@ toolkit.jar:
skin/classic/global/appPicker.css (../../shared/appPicker.css)
skin/classic/global/config.css (../../shared/config.css)
skin/classic/global/datetimeinputpickers.css (../../shared/datetimeinputpickers.css)
- skin/classic/global/numberbox.css (../../shared/numberbox.css)
+ skin/classic/global/numberinput.css (../../shared/numberinput.css)
skin/classic/global/passwordmgr.css (../../shared/passwordmgr.css)
skin/classic/global/icons/autoscroll.svg (../../shared/icons/autoscroll.svg)
skin/classic/global/icons/autoscroll-horizontal.svg (../../shared/icons/autoscroll-horizontal.svg)
diff --git a/toolkit/themes/shared/non-mac.jar.inc.mn b/toolkit/themes/shared/non-mac.jar.inc.mn
index 3d0c9d08bd5e..2d550881161b 100644
--- a/toolkit/themes/shared/non-mac.jar.inc.mn
+++ b/toolkit/themes/shared/non-mac.jar.inc.mn
@@ -15,8 +15,6 @@
skin/classic/global/tabprompts.css (../../windows/global/tabprompts.css)
skin/classic/global/wizard.css (../../windows/global/wizard.css)
- skin/classic/global/arrow/arrow-dn.gif (../../windows/global/arrow/arrow-dn.gif)
- skin/classic/global/arrow/arrow-up.gif (../../windows/global/arrow/arrow-up.gif)
skin/classic/global/arrow/panelarrow-horizontal.svg (../../windows/global/arrow/panelarrow-horizontal.svg)
skin/classic/global/arrow/panelarrow-vertical.svg (../../windows/global/arrow/panelarrow-vertical.svg)
diff --git a/toolkit/themes/shared/numberbox.css b/toolkit/themes/shared/numberbox.css
deleted file mode 100644
index 15cee6266cbb..000000000000
--- a/toolkit/themes/shared/numberbox.css
+++ /dev/null
@@ -1,42 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* ===== numberbox.css ==================================================
- == Styles used by the XUL textbox type="number" element.
- ======================================================================= */
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-html|*.numberbox-input {
- text-align: right;
-}
-
-textbox[type="number"][hidespinbuttons="true"] html|*.numberbox-input {
- -moz-appearance: textfield;
-}
-
-/* input[type=number] uses display: flex; by default which is incompatible with XUL flexbox
- Forcing XUL flexbox allows changing the size of the input. */
-html|*.numberbox-input,
-html|*.numberbox-input::-moz-number-wrapper,
-html|*.numberbox-input::-moz-number-spin-box {
- display: -moz-box;
- -moz-box-align: center;
-}
-
-html|*.numberbox-input::-moz-number-spin-box {
- -moz-box-orient: vertical;
-}
-
-html|*.numberbox-input::-moz-number-wrapper,
-html|*.numberbox-input::-moz-number-spin-up,
-html|*.numberbox-input::-moz-number-spin-down,
-html|*.numberbox-input::-moz-number-text {
- -moz-box-flex: 1;
-}
-
-html|*.numberbox-input::-moz-number-wrapper {
- width: 100%;
-}
diff --git a/toolkit/themes/shared/numberinput.css b/toolkit/themes/shared/numberinput.css
new file mode 100644
index 000000000000..e2a40369a3db
--- /dev/null
+++ b/toolkit/themes/shared/numberinput.css
@@ -0,0 +1,35 @@
+/* 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/. */
+
+/* ===== numberinput.css ================================================
+ == Styles used by the input[type="number"] element.
+ ======================================================================= */
+
+@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+@namespace html url("http://www.w3.org/1999/xhtml");
+
+html|input[type="number"] {
+ text-align: right;
+}
+
+html|input[type="number"][hidespinbuttons="true"] {
+ -moz-appearance: textfield !important;
+}
+
+/* input[type=number] uses display: flex; by default which is incompatible with XUL flexbox
+ Forcing XUL flexbox allows changing the size of the input. */
+xul|*:root html|input[type="number"],
+xul|*:root html|input[type="number"]::-moz-number-wrapper {
+ display: -moz-box;
+ -moz-box-align: center;
+}
+
+xul|*:root html|input[type="number"]::-moz-number-wrapper,
+xul|*:root html|input[type="number"]::-moz-number-text {
+ -moz-box-flex: 1;
+}
+
+xul|*:root html|input[type="number"]::-moz-number-wrapper {
+ width: 100%;
+}
diff --git a/toolkit/themes/shared/popupnotification.inc.css b/toolkit/themes/shared/popupnotification.inc.css
index e7e0a4a94d2c..db983c0a4bfa 100644
--- a/toolkit/themes/shared/popupnotification.inc.css
+++ b/toolkit/themes/shared/popupnotification.inc.css
@@ -68,10 +68,6 @@
flex: 1;
}
-.popup-notification-button > .button-box {
- padding: 0;
-}
-
.popup-notification-dropmarker {
flex: none;
padding: 0 15px;
diff --git a/toolkit/themes/windows/global/global.css b/toolkit/themes/windows/global/global.css
index 2066eb9812f2..a8d8a67c3d0c 100644
--- a/toolkit/themes/windows/global/global.css
+++ b/toolkit/themes/windows/global/global.css
@@ -11,6 +11,7 @@
@import url("chrome://global/content/widgets.css");
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+@namespace html url("http://www.w3.org/1999/xhtml");
%include ../../shared/global.inc.css
@@ -126,8 +127,10 @@ toolbar[mode="text"] .toolbarbutton-text {
-moz-image-region: rect(0px 32px 16px 16px);
}
-#print-preview-pageNumber {
- width: 3ch;
+html|*#print-preview-pageNumber {
+ /* 3 chars + (3px border + 1px padding) on both sides */
+ width: calc(8px + 3ch);
+ margin: 0 4px;
}
/* ::::: miscellaneous formatting ::::: */
@@ -260,4 +263,3 @@ popupnotificationcontent {
}
%include ../../shared/notification-popup.inc.css
-
diff --git a/toolkit/themes/windows/global/jar.mn b/toolkit/themes/windows/global/jar.mn
index bd0e1afcb3e7..5c52d7773274 100644
--- a/toolkit/themes/windows/global/jar.mn
+++ b/toolkit/themes/windows/global/jar.mn
@@ -33,7 +33,9 @@ toolkit.jar:
skin/classic/global/arrow/arrow-lft-dis.gif (arrow/arrow-lft-dis.gif)
skin/classic/global/arrow/arrow-rit.gif (arrow/arrow-rit.gif)
skin/classic/global/arrow/arrow-rit-dis.gif (arrow/arrow-rit-dis.gif)
+ skin/classic/global/arrow/arrow-up.gif (arrow/arrow-up.gif)
skin/classic/global/arrow/arrow-up-dis.gif (arrow/arrow-up-dis.gif)
+ skin/classic/global/arrow/arrow-dn.gif (arrow/arrow-dn.gif)
skin/classic/global/arrow/arrow-dn-dis.gif (arrow/arrow-dn-dis.gif)
skin/classic/global/dirListing/folder.png (dirListing/folder.png)
skin/classic/global/dirListing/up.png (dirListing/up.png)