summaryrefslogtreecommitdiff
path: root/data/patches/0005-Bug-1013064-part-5-stop-disabling-the-password-engin.patch
diff options
context:
space:
mode:
Diffstat (limited to 'data/patches/0005-Bug-1013064-part-5-stop-disabling-the-password-engin.patch')
-rw-r--r--data/patches/0005-Bug-1013064-part-5-stop-disabling-the-password-engin.patch519
1 files changed, 519 insertions, 0 deletions
diff --git a/data/patches/0005-Bug-1013064-part-5-stop-disabling-the-password-engin.patch b/data/patches/0005-Bug-1013064-part-5-stop-disabling-the-password-engin.patch
new file mode 100644
index 0000000..394d27c
--- /dev/null
+++ b/data/patches/0005-Bug-1013064-part-5-stop-disabling-the-password-engin.patch
@@ -0,0 +1,519 @@
+From 07aa9cc1fcd5479976effe29f6adf5ad5ba7a8f8 Mon Sep 17 00:00:00 2001
+From: Mark Hammond <mhammond@skippinet.com.au>
+Date: Thu, 12 Jun 2014 18:19:49 +1000
+Subject: Bug 1013064 (part 5) - stop disabling the password engine when MP
+ enabled. r=ttaubert
+
+diff --git a/browser/base/content/sync/customize.js b/browser/base/content/sync/customize.js
+--- a/browser/base/content/sync/customize.js
++++ b/browser/base/content/sync/customize.js
+@@ -1,25 +1,11 @@
+ /* 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/. */
+
+ "use strict";
+
+-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
+-
+-Cu.import("resource://gre/modules/Services.jsm");
+-
+-let service = Cc["@mozilla.org/weave/service;1"]
+- .getService(Ci.nsISupports)
+- .wrappedJSObject;
+-
+-if (!service.allowPasswordsEngine) {
+- let checkbox = document.getElementById("fxa-pweng-chk");
+- checkbox.checked = false;
+- checkbox.disabled = true;
+-}
+-
+ addEventListener("dialogaccept", function () {
+ let pane = document.getElementById("sync-customize-pane");
+ pane.writePreferences(true);
+ window.arguments[0].accepted = true;
+ });
+diff --git a/browser/base/content/sync/customize.xul b/browser/base/content/sync/customize.xul
+--- a/browser/base/content/sync/customize.xul
++++ b/browser/base/content/sync/customize.xul
+@@ -40,18 +40,17 @@
+
+ <vbox align="start">
+ <checkbox label="&engine.tabs.label;"
+ accesskey="&engine.tabs.accesskey;"
+ preference="engine.tabs"/>
+ <checkbox label="&engine.bookmarks.label;"
+ accesskey="&engine.bookmarks.accesskey;"
+ preference="engine.bookmarks"/>
+- <checkbox id="fxa-pweng-chk"
+- label="&engine.passwords.label;"
++ <checkbox label="&engine.passwords.label;"
+ accesskey="&engine.passwords.accesskey;"
+ preference="engine.passwords"/>
+ <checkbox label="&engine.history.label;"
+ accesskey="&engine.history.accesskey;"
+ preference="engine.history"/>
+ <checkbox label="&engine.addons.label;"
+ accesskey="&engine.addons.accesskey;"
+ preference="engine.addons"/>
+diff --git a/browser/base/content/sync/utils.js b/browser/base/content/sync/utils.js
+--- a/browser/base/content/sync/utils.js
++++ b/browser/base/content/sync/utils.js
+@@ -82,22 +82,16 @@ let gSyncUtils = {
+ this._openLink(Weave.Svc.Prefs.get(root + "termsURL"));
+ },
+
+ openPrivacyPolicy: function () {
+ let root = this.fxAccountsEnabled ? "fxa." : "";
+ this._openLink(Weave.Svc.Prefs.get(root + "privacyURL"));
+ },
+
+- openMPInfoPage: function (event) {
+- event.stopPropagation();
+- let baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL");
+- this._openLink(baseURL + "sync-master-password");
+- },
+-
+ openFirstSyncProgressPage: function () {
+ this._openLink("about:sync-progress");
+ },
+
+ /**
+ * Prepare an invisible iframe with the passphrase backup document.
+ * Used by both the print and saving methods.
+ *
+diff --git a/browser/components/preferences/in-content/sync.js b/browser/components/preferences/in-content/sync.js
+--- a/browser/components/preferences/in-content/sync.js
++++ b/browser/components/preferences/in-content/sync.js
+@@ -149,27 +149,16 @@ let gSyncPane = {
+ document.getElementById("fxaEmailAddress1").textContent = data.email;
+ document.getElementById("fxaEmailAddress2").textContent = data.email;
+ document.getElementById("fxaEmailAddress3").textContent = data.email;
+ document.getElementById("fxaSyncComputerName").value = Weave.Service.clientsEngine.localName;
+ let engines = document.getElementById("fxaSyncEngines")
+ for (let checkbox of engines.querySelectorAll("checkbox")) {
+ checkbox.disabled = enginesListDisabled;
+ }
+-
+- let checkbox = document.getElementById("fxa-pweng-chk");
+- let help = document.getElementById("fxa-pweng-help");
+- let allowPasswordsEngine = service.allowPasswordsEngine;
+-
+- if (!allowPasswordsEngine) {
+- checkbox.checked = false;
+- }
+-
+- checkbox.disabled = !allowPasswordsEngine || enginesListDisabled;
+- help.hidden = allowPasswordsEngine || enginesListDisabled;
+ });
+ // If fxAccountEnabled is false and we are in a "not configured" state,
+ // then fxAccounts is probably fully disabled rather than just unconfigured,
+ // so handle this case. This block can be removed once we remove support
+ // for fxAccounts being disabled.
+ } else if (Weave.Status.service == Weave.CLIENT_NOT_CONFIGURED ||
+ Weave.Svc.Prefs.get("firstSync", "") == "notReady") {
+ this.page = PAGE_NO_ACCOUNT;
+diff --git a/browser/components/preferences/in-content/sync.xul b/browser/components/preferences/in-content/sync.xul
+--- a/browser/components/preferences/in-content/sync.xul
++++ b/browser/components/preferences/in-content/sync.xul
+@@ -278,30 +278,19 @@
+ <hbox id="fxaSyncEngines">
+ <vbox>
+ <checkbox label="&engine.tabs.label;"
+ accesskey="&engine.tabs.accesskey;"
+ preference="engine.tabs"/>
+ <checkbox label="&engine.bookmarks.label;"
+ accesskey="&engine.bookmarks.accesskey;"
+ preference="engine.bookmarks"/>
+- <hbox>
+- <checkbox id="fxa-pweng-chk"
+- label="&engine.passwords.label;"
+- accesskey="&engine.passwords.accesskey;"
+- preference="engine.passwords"/>
+-
+- <vbox id="fxa-pweng-help">
+- <spacer flex="1"/>
+- <hbox id="fxa-pweng-help-link">
+- <image onclick="gSyncUtils.openMPInfoPage(event);" />
+- </hbox>
+- <spacer flex="1"/>
+- </vbox>
+- </hbox>
++ <checkbox label="&engine.passwords.label;"
++ accesskey="&engine.passwords.accesskey;"
++ preference="engine.passwords"/>
+ <checkbox label="&engine.history.label;"
+ accesskey="&engine.history.accesskey;"
+ preference="engine.history"/>
+ <checkbox label="&engine.addons.label;"
+ accesskey="&engine.addons.accesskey;"
+ preference="engine.addons"/>
+ <checkbox label="&engine.prefs.label;"
+ accesskey="&engine.prefs.accesskey;"
+diff --git a/browser/components/preferences/sync.js b/browser/components/preferences/sync.js
+--- a/browser/components/preferences/sync.js
++++ b/browser/components/preferences/sync.js
+@@ -149,27 +149,16 @@ let gSyncPane = {
+ document.getElementById("fxaEmailAddress1").textContent = data.email;
+ document.getElementById("fxaEmailAddress2").textContent = data.email;
+ document.getElementById("fxaEmailAddress3").textContent = data.email;
+ document.getElementById("fxaSyncComputerName").value = Weave.Service.clientsEngine.localName;
+ let engines = document.getElementById("fxaSyncEngines")
+ for (let checkbox of engines.querySelectorAll("checkbox")) {
+ checkbox.disabled = enginesListDisabled;
+ }
+-
+- let checkbox = document.getElementById("fxa-pweng-chk");
+- let help = document.getElementById("fxa-pweng-help");
+- let allowPasswordsEngine = service.allowPasswordsEngine;
+-
+- if (!allowPasswordsEngine) {
+- checkbox.checked = false;
+- }
+-
+- checkbox.disabled = !allowPasswordsEngine || enginesListDisabled;
+- help.hidden = allowPasswordsEngine || enginesListDisabled;
+ });
+ // If fxAccountEnabled is false and we are in a "not configured" state,
+ // then fxAccounts is probably fully disabled rather than just unconfigured,
+ // so handle this case. This block can be removed once we remove support
+ // for fxAccounts being disabled.
+ } else if (Weave.Status.service == Weave.CLIENT_NOT_CONFIGURED ||
+ Weave.Svc.Prefs.get("firstSync", "") == "notReady") {
+ this.page = PAGE_NO_ACCOUNT;
+diff --git a/browser/components/preferences/sync.xul b/browser/components/preferences/sync.xul
+--- a/browser/components/preferences/sync.xul
++++ b/browser/components/preferences/sync.xul
+@@ -260,30 +260,19 @@
+ <hbox id="fxaSyncEngines">
+ <vbox>
+ <checkbox label="&engine.tabs.label;"
+ accesskey="&engine.tabs.accesskey;"
+ preference="engine.tabs"/>
+ <checkbox label="&engine.bookmarks.label;"
+ accesskey="&engine.bookmarks.accesskey;"
+ preference="engine.bookmarks"/>
+- <hbox>
+- <checkbox id="fxa-pweng-chk"
+- label="&engine.passwords.label;"
+- accesskey="&engine.passwords.accesskey;"
+- preference="engine.passwords"/>
+-
+- <vbox id="fxa-pweng-help">
+- <spacer flex="1"/>
+- <hbox id="fxa-pweng-help-link">
+- <image onclick="gSyncUtils.openMPInfoPage(event);" />
+- </hbox>
+- <spacer flex="1"/>
+- </vbox>
+- </hbox>
++ <checkbox label="&engine.passwords.label;"
++ accesskey="&engine.passwords.accesskey;"
++ preference="engine.passwords"/>
+ <checkbox label="&engine.history.label;"
+ accesskey="&engine.history.accesskey;"
+ preference="engine.history"/>
+ <checkbox label="&engine.addons.label;"
+ accesskey="&engine.addons.accesskey;"
+ preference="engine.addons"/>
+ <checkbox label="&engine.prefs.label;"
+ accesskey="&engine.prefs.accesskey;"
+diff --git a/browser/themes/linux/preferences/preferences.css b/browser/themes/linux/preferences/preferences.css
+--- a/browser/themes/linux/preferences/preferences.css
++++ b/browser/themes/linux/preferences/preferences.css
+@@ -166,17 +166,9 @@ label.small {
+ margin: 5px;
+ line-height: 1.2em;
+ }
+
+ #noFxaAccount > label:first-child {
+ margin-bottom: 0.6em;
+ }
+
+-#fxa-pweng-help-link > label {
+- margin: 0;
+-}
+-
+-#fxa-pweng-help-link > image {
+- list-style-image: url("chrome://global/skin/icons/question-16.png");
+-}
+-
+ %endif
+diff --git a/browser/themes/osx/preferences/preferences.css b/browser/themes/osx/preferences/preferences.css
+--- a/browser/themes/osx/preferences/preferences.css
++++ b/browser/themes/osx/preferences/preferences.css
+@@ -228,25 +228,9 @@ html|a.inline-link:-moz-focusring {
+ margin: 12px 4px;
+ line-height: 1.2em;
+ }
+
+ #noFxaAccount > label:first-child {
+ margin-bottom: 0.6em;
+ }
+
+-#fxa-pweng-help-link > label {
+- margin: 0;
+-}
+-
+-#fxa-pweng-help-link > image {
+- width: 16px;
+- height: 16px;
+- list-style-image: url("chrome://global/skin/icons/question-16.png");
+-}
+-
+-@media (min-resolution: 2dppx) {
+- #fxa-pweng-help-link > image {
+- list-style-image: url("chrome://global/skin/icons/question-32.png");
+- }
+-}
+-
+ %endif
+diff --git a/browser/themes/windows/preferences/preferences.css b/browser/themes/windows/preferences/preferences.css
+--- a/browser/themes/windows/preferences/preferences.css
++++ b/browser/themes/windows/preferences/preferences.css
+@@ -156,17 +156,9 @@ label.small {
+ margin: 6px;
+ line-height: 1.2em;
+ }
+
+ #noFxaAccount > label:first-child {
+ margin-bottom: 0.6em;
+ }
+
+-#fxa-pweng-help-link > label {
+- margin: 0;
+-}
+-
+-#fxa-pweng-help-link > image {
+- list-style-image: url("chrome://global/skin/icons/question-16.png");
+-}
+-
+ %endif
+diff --git a/services/sync/Weave.js b/services/sync/Weave.js
+--- a/services/sync/Weave.js
++++ b/services/sync/Weave.js
+@@ -104,26 +104,16 @@ WeaveService.prototype = {
+ let username = Services.prefs.getCharPref(SYNC_PREFS_BRANCH + "username");
+ return !username || username.contains('@');
+ } catch (_) {
+ return true; // No username == only allow FxA to be configured.
+ }
+ },
+
+ /**
+- * Returns whether the password engine is allowed. We explicitly disallow
+- * the password engine when a master password is used to ensure those can't
+- * be accessed without the master key.
+- */
+- get allowPasswordsEngine() {
+- // This doesn't apply to old-style sync, it's only an issue for FxA.
+- return !this.fxAccountsEnabled || !Utils.mpEnabled();
+- },
+-
+- /**
+ * Whether Sync appears to be enabled.
+ *
+ * This returns true if all the Sync preferences for storing account
+ * and server configuration are populated.
+ *
+ * It does *not* perform a robust check to see if the client is working.
+ * For that, you'll want to check Weave.Status.checkSetup().
+ */
+diff --git a/services/sync/modules/engines/passwords.js b/services/sync/modules/engines/passwords.js
+--- a/services/sync/modules/engines/passwords.js
++++ b/services/sync/modules/engines/passwords.js
+@@ -31,38 +31,16 @@ this.PasswordEngine = function PasswordE
+ }
+ PasswordEngine.prototype = {
+ __proto__: SyncEngine.prototype,
+ _storeObj: PasswordStore,
+ _trackerObj: PasswordTracker,
+ _recordObj: LoginRec,
+ applyIncomingBatchSize: PASSWORDS_STORE_BATCH_SIZE,
+
+- get isAllowed() {
+- return Cc["@mozilla.org/weave/service;1"]
+- .getService(Ci.nsISupports)
+- .wrappedJSObject
+- .allowPasswordsEngine;
+- },
+-
+- get enabled() {
+- // If we are disabled due to !isAllowed(), we must take care to ensure the
+- // engine has actually had the enabled setter called which reflects this state.
+- let prefVal = SyncEngine.prototype.__lookupGetter__("enabled").call(this);
+- let newVal = this.isAllowed && prefVal;
+- if (newVal != prefVal) {
+- this.enabled = newVal;
+- }
+- return newVal;
+- },
+-
+- set enabled(val) {
+- SyncEngine.prototype.__lookupSetter__("enabled").call(this, this.isAllowed && val);
+- },
+-
+ _syncFinish: function _syncFinish() {
+ SyncEngine.prototype._syncFinish.call(this);
+
+ // Delete the weave credentials from the server once
+ if (!Svc.Prefs.get("deletePwdFxA", false)) {
+ try {
+ let ids = [];
+ for (let host of Utils.getSyncCredentialsHosts()) {
+diff --git a/services/sync/tests/unit/test_password_mpenabled.js b/services/sync/tests/unit/test_password_mpenabled.js
+deleted file mode 100644
+--- a/services/sync/tests/unit/test_password_mpenabled.js
++++ /dev/null
+@@ -1,137 +0,0 @@
+-/* Any copyright is dedicated to the Public Domain.
+- http://creativecommons.org/publicdomain/zero/1.0/ */
+-
+-Cu.import("resource://gre/modules/Log.jsm");
+-Cu.import("resource://services-sync/stages/enginesync.js");
+-Cu.import("resource://services-sync/util.js");
+-Cu.import("resource://services-sync/engines/passwords.js");
+-Cu.import("resource://services-sync/service.js");
+-Cu.import("resource://testing-common/services/sync/utils.js");
+-
+-function run_test() {
+- initTestLogging("Trace");
+- run_next_test();
+-}
+-
+-add_test(function test_simple() {
+- ensureLegacyIdentityManager();
+- // Stub fxAccountsEnabled
+- let xpcs = Cc["@mozilla.org/weave/service;1"]
+- .getService(Components.interfaces.nsISupports)
+- .wrappedJSObject;
+- let fxaEnabledGetter = xpcs.__lookupGetter__("fxAccountsEnabled");
+- xpcs.__defineGetter__("fxAccountsEnabled", () => true);
+-
+- // Stub mpEnabled.
+- let mpEnabledF = Utils.mpEnabled;
+- let mpEnabled = false;
+- Utils.mpEnabled = function() mpEnabled;
+-
+- let manager = Service.engineManager;
+-
+- Service.engineManager.register(PasswordEngine);
+- let engine = Service.engineManager.get("passwords");
+- let wipeCount = 0;
+- let engineWipeServerF = engine.wipeServer;
+- engine.wipeServer = function() {
+- ++wipeCount;
+- }
+-
+- // A server for the metadata.
+- let server = new SyncServer();
+- let johndoe = server.registerUser("johndoe", "password");
+- johndoe.createContents({
+- meta: {global: {engines: {passwords: {version: engine.version,
+- syncID: engine.syncID}}}},
+- crypto: {},
+- clients: {}
+- });
+- server.start();
+- setBasicCredentials("johndoe", "password", "abcdeabcdeabcdeabcdeabcdea");
+- Service.serverURL = server.baseURI;
+- Service.clusterURL = server.baseURI;
+-
+- let engineSync = new EngineSynchronizer(Service);
+- engineSync._log.level = Log.Level.Trace;
+-
+- function assertEnabled(expected, message) {
+- Assert.strictEqual(engine.enabled, expected, message);
+- // The preference *must* reflect the actual state.
+- Assert.strictEqual(Svc.Prefs.get("engine." + engine.prefName), expected,
+- message + " (pref should match enabled state)");
+- }
+-
+- try {
+- assertEnabled(true, "password engine should be enabled by default")
+- let engineMeta = Service.recordManager.get(engine.metaURL);
+- // This engine should be in the meta/global
+- Assert.notStrictEqual(engineMeta.payload.engines[engine.name], undefined,
+- "The engine should appear in the metadata");
+- Assert.ok(!engineMeta.changed, "the metadata for the password engine hasn't changed");
+-
+- // (pretend to) enable a master-password
+- mpEnabled = true;
+- // The password engine should be locally disabled...
+- assertEnabled(false, "if mp is locked the engine should be disabled");
+- // ...but not declined.
+- Assert.ok(!manager.isDeclined("passwords"), "password engine is not declined");
+- // Next time a sync would happen, we call _updateEnabledEngines(), which
+- // would remove the engine from the metadata - call that now.
+- engineSync._updateEnabledEngines();
+- // The global meta should no longer list the engine.
+- engineMeta = Service.recordManager.get(engine.metaURL);
+- Assert.strictEqual(engineMeta.payload.engines[engine.name], undefined,
+- "The engine should have vanished");
+- // And we should have wiped the server data.
+- Assert.strictEqual(wipeCount, 1, "wipeServer should have been called");
+-
+- // Now simulate an incoming meta/global indicating the engine should be
+- // enabled. We should fail to actually enable it - the pref should remain
+- // false and we wipe the server for anything another device might have
+- // stored.
+- let meta = {
+- payload: {
+- engines: {
+- "passwords": {"version":1,"syncID":"yfBi2v7PpFO2"},
+- },
+- },
+- };
+- engineSync._updateEnabledFromMeta(meta, 3, manager);
+- Assert.strictEqual(wipeCount, 2, "wipeServer should have been called");
+- Assert.ok(!manager.isDeclined("passwords"), "password engine is not declined");
+- assertEnabled(false, "engine still not enabled locally");
+-
+- // Let's turn the MP off - but *not* re-enable it locally.
+- mpEnabled = false;
+- // Just disabling the MP isn't enough to force it back to enabled.
+- assertEnabled(false, "engine still not enabled locally");
+- // Another incoming metadata record with the engine enabled should cause
+- // it to be enabled locally.
+- meta = {
+- payload: {
+- engines: {
+- "passwords": 1,
+- },
+- },
+- };
+- engineSync._updateEnabledFromMeta(meta, 3, manager);
+- Assert.strictEqual(wipeCount, 2, "wipeServer should *not* have been called again");
+- Assert.ok(!manager.isDeclined("passwords"), "password engine is not declined");
+- // It should be enabled locally.
+- assertEnabled(true, "engine now enabled locally");
+- // Next time a sync starts it should magically re-appear in our meta/global
+- engine._syncStartup();
+- //engineSync._updateEnabledEngines();
+- engineMeta = Service.recordManager.get(engine.metaURL);
+- Assert.equal(engineMeta.payload.engines[engine.name].version, engine.version,
+- "The engine should re-appear in the metadata");
+- } finally {
+- // restore the damage we did above...
+- engine.wipeServer = engineWipeServerF;
+- engine._store.wipe();
+- // Un-stub mpEnabled and fxAccountsEnabled
+- Utils.mpEnabled = mpEnabledF;
+- xpcs.__defineGetter__("fxAccountsEnabled", fxaEnabledGetter);
+- server.stop(run_next_test);
+- }
+-});
+diff --git a/services/sync/tests/unit/xpcshell.ini b/services/sync/tests/unit/xpcshell.ini
+--- a/services/sync/tests/unit/xpcshell.ini
++++ b/services/sync/tests/unit/xpcshell.ini
+@@ -164,10 +164,8 @@ skip-if = debug
+ [test_prefs_store.js]
+ [test_prefs_tracker.js]
+ [test_tab_engine.js]
+ [test_tab_store.js]
+ [test_tab_tracker.js]
+
+ [test_healthreport.js]
+ skip-if = ! healthreport
+-
+-[test_password_mpenabled.js]