Bug 1445991 - ensure prefs inited before autoconfig reload button updated; r?Gijs draft
authorMyk Melez <myk@mykzilla.org>
Thu, 15 Mar 2018 17:49:22 -0700
changeset 768636 f84fabcd98515129709c2ec2106de1b650cefa56
parent 767919 fcb11e93adf57210167de0b27b15433e9c3f45e4
push id102937
push userbmo:myk@mykzilla.org
push dateFri, 16 Mar 2018 16:28:39 +0000
reviewersGijs
bugs1445991
milestone61.0a1
Bug 1445991 - ensure prefs inited before autoconfig reload button updated; r?Gijs Reorder the construction of Preference objects so network.proxy.autoconfig_url gets constructed before network.proxy.type, which will ensure that networkProxyAutoconfigURL is set to the value of network.proxy.autoconfig_url before network.proxy.type construction triggers the call to updateReloadButton. MozReview-Commit-ID: BQL0RlvnCOo
browser/components/preferences/connection.js
browser/components/preferences/in-content/tests/browser.ini
browser/components/preferences/in-content/tests/browser_connection_bug1445991.js
--- a/browser/components/preferences/connection.js
+++ b/browser/components/preferences/connection.js
@@ -3,29 +3,32 @@
  * 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/. */
 
 /* import-globals-from ../../base/content/utilityOverlay.js */
 /* import-globals-from ../../../toolkit/content/preferencesBindings.js */
 /* import-globals-from in-content/extensionControlled.js */
 
 Preferences.addAll([
+  // Add network.proxy.autoconfig_url before network.proxy.type so they're
+  // both initialized when network.proxy.type initialization triggers a call to
+  // gConnectionsDialog.updateReloadButton().
+  { id: "network.proxy.autoconfig_url", type: "string" },
   { id: "network.proxy.type", type: "int" },
   { id: "network.proxy.http", type: "string" },
   { id: "network.proxy.http_port", type: "int" },
   { id: "network.proxy.ftp", type: "string" },
   { id: "network.proxy.ftp_port", type: "int" },
   { id: "network.proxy.ssl", type: "string" },
   { id: "network.proxy.ssl_port", type: "int" },
   { id: "network.proxy.socks", type: "string" },
   { id: "network.proxy.socks_port", type: "int" },
   { id: "network.proxy.socks_version", type: "int" },
   { id: "network.proxy.socks_remote_dns", type: "bool" },
   { id: "network.proxy.no_proxies_on", type: "string" },
-  { id: "network.proxy.autoconfig_url", type: "string" },
   { id: "network.proxy.share_proxy_settings", type: "bool" },
   { id: "signon.autologin.proxy", type: "bool" },
   { id: "pref.advanced.proxies.disable_button.reload", type: "bool" },
   { id: "network.proxy.backup.ftp", type: "string" },
   { id: "network.proxy.backup.ftp_port", type: "int" },
   { id: "network.proxy.backup.ssl", type: "string" },
   { id: "network.proxy.backup.ssl_port", type: "int" },
   { id: "network.proxy.backup.socks", type: "string" },
--- a/browser/components/preferences/in-content/tests/browser.ini
+++ b/browser/components/preferences/in-content/tests/browser.ini
@@ -37,16 +37,17 @@ support-files =
   browser_bug1184989_prevent_scrolling_when_preferences_flipped.xul
 [browser_change_app_handler.js]
 skip-if = os != "win" || (os == "win" && os_version == "6.1")
 # This test tests the windows-specific app selection dialog, so can't run on non-Windows.
 # Skip the test on Window 7, see the detail at Bug 1381706.
 [browser_checkspelling.js]
 [browser_connection.js]
 [browser_connection_bug388287.js]
+[browser_connection_bug1445991.js]
 [browser_cookies_exceptions.js]
 [browser_defaultbrowser_alwayscheck.js]
 [browser_healthreport.js]
 skip-if = true || !healthreport # Bug 1185403 for the "true"
 [browser_homepages_filter_aboutpreferences.js]
 [browser_extension_controlled.js]
 [browser_languages_subdialog.js]
 [browser_layersacceleration.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_connection_bug1445991.js
@@ -0,0 +1,29 @@
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test the disabled status of the autoconfig Reload button when the proxy type
+// is autoconfig (network.proxy.type == 2).
+add_task(async function testAutoconfigReloadButton() {
+  await SpecialPowers.pushPrefEnv({
+    set: [
+      ["network.proxy.type", 2],
+      ["network.proxy.autoconfig_url", "file:///nonexistent.pac"],
+    ],
+  });
+
+  await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true });
+  const connectionURL = "chrome://browser/content/preferences/connection.xul";
+  const promiseDialogLoaded = promiseLoadSubDialog(connectionURL);
+  // eslint-disable-next-line mozilla/no-cpows-in-tests
+  gBrowser.contentDocument.getElementById("connectionSettings").click();
+  const dialog = await promiseDialogLoaded;
+
+  ok(!dialog.document.getElementById("autoReload").disabled,
+     "Reload button is enabled when proxy type is autoconfig");
+
+  dialog.close();
+  gBrowser.removeCurrentTab();
+});