Commit graph

56 commits

Author SHA1 Message Date
Edouard Oger
9d1dc7c4a7 Bug 1368560 part 2 - Move Svc.Crypto to Weave.Crypto. r=markh
MozReview-Commit-ID: 74IFsVjZSgz

--HG--
extra : rebase_source : 00f77b7a24a509d5e9fabb8ee7793a59b38f639f
2017-05-29 13:24:01 -04:00
Ethan Glasser-Camp
f9f6f160da Bug 1364135: Clean up detection/handling of deleted keyrings, r=kmag,MattN
MozReview-Commit-ID: CoOwUazDRSL

--HG--
extra : rebase_source : d027c47f1b5740fa9916420b5dafdac935264ff8
2017-05-11 13:15:20 -04:00
Ethan Glasser-Camp
72d89acea8 Bug 1358120: correctly handle failed authorizations, r=kmag
This code seems to have never worked correctly. This code was based on
an error style that is thrown from one part of kinto-http.js but then
immediately rethrown using a different format. On top of that, the
code as written tries to parse JSON out of the response body and use
that. Instead, let's use the response status code, since that feels a
little more robust.

MozReview-Commit-ID: B5MG5tpduCd

--HG--
extra : rebase_source : 9f4ba94ef215297db6ba3b126852984a9a7878fe
2017-05-15 16:46:30 -04:00
Ethan Glasser-Camp
ceed266119 Bug 1350088: Recover when we hit "server was flushed", r=kmag
This is another edge case that seems to be linked to the server-side
data loss bug in Kinto. It seems like you can get into a "server was
flushed" case if one device hadn't seen the most recent keyring before
another client caused the server to be wiped. We don't expect this to
happen in the future, but it affects some number of our users who were
already using storage.sync, so build a recovery pathway for them.

MozReview-Commit-ID: K0BJNQgN6Z4

--HG--
extra : rebase_source : 5a8707bc1edc1f30306a301d3c9f7b10a1f2fb76
2017-05-19 16:43:32 -04:00
Mark Banner
d1dfdb8a14 Bug 1367232 - Clean up various ESLint global definitions in toolkit/. r=mossop
MozReview-Commit-ID: Hhm4YBansg1

--HG--
extra : rebase_source : 3cb49159fa3f5dae12e4eb21f22e747850fdf184
2017-05-19 09:22:48 +01:00
Kris Maglione
e272c4c239 Bug 1365005: Cleanup async code after Task.jsm migration. r=aswan
MozReview-Commit-ID: FNKSsBqq6Kf

--HG--
extra : rebase_source : f6e5056fc2de0b13b4b77e27fe88c2d4063b1445
extra : amend_source : 42473dedc3280e225eb243ce5a87d552ba5f9ee2
2017-05-15 12:07:06 -07:00
Florian Quèze
5e3539e504 Bug 1353542 - massive script-generated patch converting Task.async and Task.spawn calls, and generators clearly identifiable as tasks, rs=Mossop. 2017-05-12 14:42:39 +02:00
Florian Quèze
2e2f358aa9 Bug 1353542 - pre-script hand-written cleanup patch, r=Mossop. 2017-05-12 14:41:20 +02:00
Ethan Glasser-Camp
4f4ee59962 Bug 1359879: add logging and robustness to key syncing, r=kmag
It seems like the server-side keyring is getting deleted somehow. This
causes syncing of the keyring to fail. We haven't completely
fixed the root problem yet, but this adds logging to try to flag
down the dangerous operation of deleting a bucket to make sure we
aren't doing that by accident. We also try to recover from the
server-keyring-was-deleted situation by wiping all storage.sync data,
the same as if we found a keyring that we couldn't decrypt.

MozReview-Commit-ID: JMB0IxApbGq

--HG--
extra : rebase_source : 54982a374aa5c7d7e60e8175b99734c672b91799
2017-05-01 14:22:51 -04:00
Ethan Glasser-Camp
232842cc9f Bug 1351678: Handle resolved conflicts correctly, r=kmag
The elements of the SyncResultObject#conflicts field are {local,
remote} pairs.  However, the elements of the SyncResultObject#resolved
field are just the resolutions, and trying to access "local" and
"remote" fields of those resolutions causes a crash. Add a test that
demonstrates the error, and then fix it.

MozReview-Commit-ID: LF0NBw5VKBC

--HG--
extra : rebase_source : 7711111d35cfe962f57c7d08d74bad2e37090b7c
2017-04-20 13:44:46 -04:00
Kris Maglione
3d8483182d Bug 1333477: Part 2 - Remove "browser" environment from ESLint settings. r=aswan
MozReview-Commit-ID: LCxI6JVp7Xo

--HG--
extra : rebase_source : d0fc6519f3b6872f76a9df533f3eddf1352c2559
extra : histedit_source : 790c0f2322f2b3a3d35b8bf6d7b3f7b705f33fcd%2Cdae80b78b03f25f165f1fc575667df394a43b572
2017-03-12 14:16:13 -07:00
Ethan Glasser-Camp
bf7f47db2b Bug 1328974: Record metrics for chrome.storage.sync usage, r=bsmedberg,kmag
MozReview-Commit-ID: 7c2CHLuXxS6

--HG--
extra : rebase_source : f56bf58bfdf2f3ecb7fb5dbe8ee22d3a3569ae34
extra : source : c48083c4b41537af44a38722e64d8e10987ba199
2017-01-17 13:25:02 -05:00
Ethan Glasser-Camp
b228d5b47d Bug 1321570 - use dependency injection for fxAccounts, r=kmag
Get rid of the ugly hack where test code monkeypatches a singleton to
convince the rest of the ExtensionStorageSync code that a fake user is
logged in. Instead, take a handle to the fxAccounts service at
construction time. Test code can provide any kind of fxAccounts it
wants, including one that has a hard-coded user.

This provokes a bunch of changes:

- ExtensionStorageSync is now no longer a singleton, but a class. You
  have to instantiate it in order to do anything with it. A global
  instance extensionStorageSync is provided for use by Sync code as
  well as WebExtension code.

- CryptoCollection is now also a class, and each ExtensionStorageSync
  instance has its own CryptoCollection. This dependency should maybe
  also be injected, but for the time being it doesn't provide us any
  value to do so.

- Converting singletons with asynchronous methods to classes is a pain
  in the neck. We convert async method foo from `foo:
  Task.async(....)` to `async foo() { .... }`. While we're here,
  convert KeyRingEncryptionRemoteTransformer#decode to async/await to
  eliminate a need for `let self = this`.

- Update Sync code and WebExtension code to use extensionStorageSync.

- There's a cyclic dependency where CryptoCollection#sync depends on
  ExtensionStorageSync#_syncCollection which depends on
  CryptoCollection#getKeyRing. As a short-term hack, we now require an
  ExtensionStorageSync argument to CryptoCollection#sync.

- KeyRingEncryptionRemoteTransformer now takes a handle to fxAccounts
  on construction time as well. Because this is the only
  EncryptionRemoteTransformer subclass that accesses fxAccounts, we
  can get rid of the hack where the tests monkeypatch something in the
  EncryptionRemoteTransformer prototype.

- CollectionKeyEncryptionRemoteTransformer now takes a handle to a
  CryptoCollection, rather than relying on a global one.

- A bunch of methods that previously assumed access to fxAccounts now
  check if fxAccounts is present (i.e. if we're on Android). Strictly
  speaking, this isn't required by this change, but it helps make
  certain kinds of failure a little easier to diagnose.

- Update tests, including extracting a domain-specific helper method
  to hide the use of CollectionKeyEncryptionRemoteTransformer. We now
  no longer monkeypatch in our mock fxaService, but pass it to the
  test so that it can do whatever it wants with it. We also provide an
  ExtensionStorageSync instance for convenience. Access to the global
  cryptoCollection is now done through an ExtensionStorageSync
  instance.

To summarize, we've gone from a situation where a bunch of singletons
had implicit dependencies on other singletons in a shared global
namespace, to a situation where dependencies are provided explicitly
using method/constructor arguments. This highlights some of the
dependencies present:

- ExtensionStorageSync depends on CryptoCollection and fxAccounts if
  it needs to sync

- Every collection created via openCollection needs a handle to
  CryptoCollection so it can correctly create its remote transformers

- CryptoCollection needs a handle to fxAccounts so it can create its
  own remote transformer for its special collection

Most of this is only possible, or at least much easier, because we no
longer try to juggle Sqlite connections but just keep one around
forever.

However, please note:

- CryptoCollection needs a handle to ExtensionStorageSync to actually
  perform syncing logic because that's where we foolishly put the
  logic to make requests

- There's still a backing Sqlite store which is shared by everything

- There's still a singleton tracking contexts that opened extensions
  which we manage to try to clean contexts up correctly

MozReview-Commit-ID: DGIzyRTdYZ1

--HG--
extra : rebase_source : 305a98b8e1ece3ae7a5e8a2fdb5c58d8e7c496d9
2017-01-10 16:44:01 -05:00
Ethan Glasser-Camp
4f7afb05a6 Bug 1321570 - Move ExtensionStorageSync crypto out of services/sync, r=kmag
Since services/sync doesn't ship on Android, this meant
conditionally-defining some variables such as `cryptoCollection` and
`CollectionKeyEncryptionRemoteTransformer` depending on whether or not
we were on Android. However, none of these definitions really rely on
functionality that isn't present on Android (although you can't really
use them yet either). Move the dependency together with the dependant
code so we can simplify a bit. This lets us remove conditional uses of
`cryptoCollection` and `CollectionKeyEncryptionRemoteTransformer`.

Because the WebExtensions source directory has more stringent eslint
rules, we end up reformatting and commenting a bit in addition to
moving.

MozReview-Commit-ID: 2ddDeymYFNi

--HG--
rename : services/sync/tests/unit/test_extension_storage_crypto.js => toolkit/components/extensions/test/xpcshell/test_ext_storage_sync_crypto.js
extra : rebase_source : f84c0810b6a447f2104f96c9dc9d6139743f269c
2017-02-13 15:06:02 -05:00
Ethan Glasser-Camp
3a3e213b7d Bug 1333810: Hash record IDs during encryption, r=kmag,rnewman
This does a sha256 of record IDs, the same way we do for collection
IDs, during encryption.

The way we compute the new ID (using an overridden method) is a little
bit of a hack, but we use the new ID as part of the HMAC. This also
invalidates a previous assumption, which is that we kept record IDs
the same during decryption.

MozReview-Commit-ID: Gbzlo9OE1he

--HG--
extra : rebase_source : 3a303cce50e60ecf0cd709da4ebef5ff98bff314
extra : intermediate-source : 033163eeac84466553d4f9636093c3b824d7cf2b
extra : source : c5c115baff4a729b064e74e87821f7ee3b9d3edb
2017-01-31 13:09:38 -05:00
Ethan Glasser-Camp
adede591b2 Bug 1333810: Redo hashing of collection ID, r=kmag,rnewman
This ties the collection ID used for a given extension to the "salts"
record. This blocks an attack where, given the user's ID, an attacker
could just hash all the extension IDs on addons.mozilla.org to
generate possible hashed collection IDs.

MozReview-Commit-ID: OABsOOMn2F

--HG--
extra : rebase_source : 7c43968b9b7d695c98f00f99d7349d39eb1dc514
extra : source : ed19b98e6b8beb3009cee342bb97eb5684c02af6
2017-01-30 19:07:02 -05:00
Ethan Glasser-Camp
b2aa4480f7 Bug 1333810: Add salts to the keys record, r=kmag,rnewman
Because these need to be encrypted with kB like the keyring does, and
wiped at the same time as the keyring does, just smush them into the
keyring. Rename `ensureKeysFor` to `ensureCanSync`, but don't update
it to return the salts -- for now, we don't need that.

MozReview-Commit-ID: DOJxdx5ugKl

--HG--
extra : rebase_source : 02fdae5d434232395d91a626213d91d4bdff40bc
2017-01-30 16:03:59 -05:00
Ethan Glasser-Camp
1549e45546 Bug 1331467: Enable chrome.storage.sync by default, r=kmag
MozReview-Commit-ID: 76wXwJGobIt

--HG--
extra : rebase_source : 8cc08b6d41c3b3e35cb92627e497a3925ef50376
2017-01-18 11:44:17 -05:00
Ryan VanderMeulen
cf7b3c6971 Backed out changeset 442d75009799 (bug 1331467) for test_ext_storage_content.html failures. 2017-01-20 18:33:47 -05:00
Ethan Glasser-Camp
4b188f8d49 Bug 1331467: Enable chrome.storage.sync by default, r=kmag
MozReview-Commit-ID: 76wXwJGobIt

--HG--
extra : rebase_source : c4e29d8beabd7d4d6cb0b53adf26e1a30c320b18
2017-01-18 11:44:17 -05:00
Mark Banner
582fcb8090 Bug 1329614 - [eslint] Catch more cases of importing globals from 'var foo = Cu.import('...');'. r=jaws
MozReview-Commit-ID: 5NKHHb70YA6

--HG--
extra : rebase_source : 4551e56f56065349fb9ddc8d90e67f9dc84c1701
2017-01-09 10:12:26 +00:00
Ethan Glasser-Camp
e1c5d29c37 Bug 1319742 - UUIDs should be strings, not objects, r=markh
`generateUUID()` returns an `nsID`, which is not exactly the same as a
UUID. `nsID`s can be converted to strings using `toString()`, but if
you use `JSON.stringify()`, they become `{}`. Object comparison in JS
performs identity comparison, which would be useless even if the UUIDs
were sensible, which they aren't. As a result, trying to sync keyrings
always failed, because it always seemed like UUIDs had changed, even
when they hadn't.

Because it never occurred to me that UUIDs wouldn't be strings, I
never even wrote a test for this. Correct this, and fix the test.

Thanks to :vasilica_mihasca and :markh for reporting and diagnosing this.

MozReview-Commit-ID: EthxkFFwRbQ

--HG--
extra : rebase_source : 7b2a258d85bf8aab2bf9895e3a8cac9d34ab8435
2016-11-29 14:15:55 -05:00
Mark Hammond
ec4f115396 Bug 1320193 - remove trailing \n from log message. r=glasserc
MozReview-Commit-ID: LwdPOwXmS5i

--HG--
extra : rebase_source : b24ad9ec2ccb30e33e24731d0b19fdcc08348792
2016-11-25 09:01:05 +11:00
Ethan Glasser-Camp
4742db4baa Bug 1317841 - Update version of kinto.js to v6.0.0, r=MattN
This major version of kinto.js released without a FirefoxStorage
adapter. Since Gecko is the only project with a need for this adapter
as well as the only one who can use it, that file moves to this repo
as a new kinto-storage-adapter.js. This file is mostly a copy of the
most recent FirefoxStorage.js, plus some other non-exported utility
functions copied from kinto.js to make it work.

This changes the export of the kinto-offline-client.js from a
`loadKinto` function which returns the Kinto class, to the actual
Kinto class itself, with the user expected to "hook up" the
adapter. It turns out that this doesn't change much in how we actually
use Kinto, since we were always previously explicitly selecting the
Kinto adapter.

This release of kinto.js also changes some of the build options
around, which changes the minified output of kinto-offline-client.js.

There are still some outstanding stylistic complaints about
FirefoxAdapter having to do with its _init static method which is
public and the fact that sometimes FirefoxAdapter manages its own
Sqlite connection and sometimes it doesn't. These will be addressed in
a future patch.

MozReview-Commit-ID: HF0oNCEDcFs

--HG--
rename : services/common/kinto-offline-client.js => services/common/kinto-storage-adapter.js
extra : rebase_source : 11d01e573b259798305494ac072575247ac01e2c
2016-11-15 19:38:53 -05:00
Ehsan Akhgari
d93248e07e Bug 1318217 - Remove AppsUtils; r=baku 2016-11-17 12:08:13 -05:00
Ethan Glasser-Camp
cb41aa0ef8 Bug 1253740 - Try to build and function even on Android, r=kmag
MozReview-Commit-ID: 5NGXzNhHGUN

--HG--
extra : rebase_source : 61e2f10036c8862028ca22d9c5ba6a13bed1fa53
2016-11-07 12:13:08 -05:00
Ethan Glasser-Camp
ba082acec6 Bug 1253740 - Handle password resets more correctly, r=markh
MozReview-Commit-ID: 1mSvbsYP9fV

--HG--
extra : rebase_source : 24676ce50564a291ce4fdcce40633f76e381bb46
extra : intermediate-source : 385eb385501deec773b4680e64e8014bddaf0edb
extra : source : 8595b3a68fbd2dccbe63324524fd9532ea62bca5
2016-09-30 12:12:58 -04:00
Ethan Glasser-Camp
dc89d37ad4 Bug 1253740 - Define checkSyncKeyRing() which reuploads keys when passwords change, r=markh
MozReview-Commit-ID: B5Ptj4MGAC

--HG--
extra : rebase_source : 89a01c22937a19ce66c3993838a8491b7677cefa
extra : intermediate-source : a56017082760c6fbd0242298d37414de0a4aa25d
extra : source : d282a924f350b4d6ea21e3e1b4c9ea2ad09d3df6
2016-10-03 19:19:13 -04:00
Ethan Glasser-Camp
50314ee3a6 Bug 1253740 - Hash extension ID to obfuscate installed add-ons, r=bsilverberg,kmag
MozReview-Commit-ID: ASBrDxIq2lF

--HG--
extra : rebase_source : e5d6b8d7e0d1f31f11b7f8bdefb20da6b7d4212d
extra : intermediate-source : 2273d3092f922a1b9519f00c52fb5c6d9c436f66
extra : source : e5e4c725b8d7c29d0f7113690244e847dcfa7b81
2016-07-28 12:20:42 -04:00
Ethan Glasser-Camp
91ac1cbb42 Bug 1253740 - Introduce extensionIdToCollectionId, r=bsilverberg,kmag
MozReview-Commit-ID: 5nDVtleknyN

--HG--
extra : rebase_source : 514151dcf0dd7a7d5e6b770dddbc7f526bb12fe7
extra : intermediate-source : d588536c9254936eb7a14160dcf061f91d12c858
extra : source : c16e193319d6651f5c2a8b8e84b3e277eeba74f3
2016-07-27 16:16:09 -04:00
Ethan Glasser-Camp
57b31da4a0 Bug 1253740 - Add code that syncs and tests, r=bsilverberg,kmag,markh
MozReview-Commit-ID: 8pm2jG92hCs

--HG--
extra : rebase_source : 5ed7b120cb3b1b76498fbdf03f278b24afeb7e89
extra : intermediate-source : cc6b17b87de9162eba88ac5e86d23d63e80b31cd
extra : source : ea91038a3a747fb8d3c122bf6d5757287396189c
2016-09-08 14:16:09 -04:00
Ethan Glasser-Camp
ff10caa15d Bug 1253740 - Introduce extension-storage engine with a sanity test, r=markh
Note that this "enables" the engine using a pref, even though it might
not be ready yet, so that the tests can pass.

MozReview-Commit-ID: AZ0TVERiQDU

--HG--
extra : rebase_source : 8ca202c1ec79e068fb9395207792942a228d4433
extra : intermediate-source : 93f41b72d8e7023b5f22c727436e836de87c9ca7
extra : source : 183547f4dbbedc9ee3399b6a474016d0e89a12e8
2016-09-08 14:23:12 -04:00
Michiel de Jong
002dba0f07 Bug 1253740 - Implement storage.sync, r=bsilverberg,kmag
MozReview-Commit-ID: 5v9nYBTgekj

--HG--
extra : rebase_source : fc267740bbd3f91838c77f071e6e3c039a88fa32
2016-08-11 18:16:37 -04:00
Wes Kocher
57c08b3b40 Backed out 9 changesets (bug 1253740) for xpcshell failures a=backout
Backed out changeset 903890f218dd (bug 1253740)
Backed out changeset 1b13fe394b66 (bug 1253740)
Backed out changeset e1312ab53299 (bug 1253740)
Backed out changeset 5b5338a2baeb (bug 1253740)
Backed out changeset d3d89d4e2d87 (bug 1253740)
Backed out changeset 96da5e6944b8 (bug 1253740)
Backed out changeset 4fbff333994f (bug 1253740)
Backed out changeset 653788e146f2 (bug 1253740)
Backed out changeset b98fa03d8c15 (bug 1253740)
2016-11-11 18:59:24 -08:00
Ethan Glasser-Camp
92fb3b4b8f Bug 1253740 - Try to build and function even on Android, r=kmag
MozReview-Commit-ID: 5NGXzNhHGUN

--HG--
extra : rebase_source : 7e1f7d96c576d7ac03e732caeb6bd1022e2b1526
2016-11-07 12:13:08 -05:00
Ethan Glasser-Camp
4a15ce8b0b Bug 1253740 - Handle password resets more correctly, r=markh
MozReview-Commit-ID: 1mSvbsYP9fV

--HG--
extra : rebase_source : 05079dfd76cebd960efa703fa445a20ce466093c
extra : intermediate-source : 385eb385501deec773b4680e64e8014bddaf0edb
extra : source : 8595b3a68fbd2dccbe63324524fd9532ea62bca5
2016-09-30 12:12:58 -04:00
Ethan Glasser-Camp
b91dc5e613 Bug 1253740 - Define checkSyncKeyRing() which reuploads keys when passwords change, r=markh
MozReview-Commit-ID: B5Ptj4MGAC

--HG--
extra : rebase_source : 877db9f2e0a0d4a289d18584a550646f2bf86399
extra : intermediate-source : a56017082760c6fbd0242298d37414de0a4aa25d
extra : source : d282a924f350b4d6ea21e3e1b4c9ea2ad09d3df6
2016-10-03 19:19:13 -04:00
Ethan Glasser-Camp
b5f08d031e Bug 1253740 - Hash extension ID to obfuscate installed add-ons, r=bsilverberg,kmag
MozReview-Commit-ID: ASBrDxIq2lF

--HG--
extra : rebase_source : c6a21399a0530294844a94286baa38764235d322
extra : intermediate-source : 2273d3092f922a1b9519f00c52fb5c6d9c436f66
extra : source : e5e4c725b8d7c29d0f7113690244e847dcfa7b81
2016-07-28 12:20:42 -04:00
Ethan Glasser-Camp
24b0f0306c Bug 1253740 - Introduce extensionIdToCollectionId, r=bsilverberg,kmag
MozReview-Commit-ID: 5nDVtleknyN

--HG--
extra : rebase_source : 39304f9b0866c87dca608934623f807dc03f2e3e
extra : intermediate-source : d588536c9254936eb7a14160dcf061f91d12c858
extra : source : c16e193319d6651f5c2a8b8e84b3e277eeba74f3
2016-07-27 16:16:09 -04:00
Ethan Glasser-Camp
314ce99cee Bug 1253740 - Add code that syncs and tests, r=bsilverberg,kmag,markh
MozReview-Commit-ID: 8pm2jG92hCs

--HG--
extra : rebase_source : 44ff9b5fda993063b907a39192449ca2f910f1f3
extra : intermediate-source : cc6b17b87de9162eba88ac5e86d23d63e80b31cd
extra : source : ea91038a3a747fb8d3c122bf6d5757287396189c
2016-09-08 14:16:09 -04:00
Ethan Glasser-Camp
138ba0ff0a Bug 1253740 - Introduce extension-storage engine with a sanity test, r=markh
Note that this "enables" the engine using a pref, even though it might
not be ready yet, so that the tests can pass.

MozReview-Commit-ID: AZ0TVERiQDU

--HG--
extra : rebase_source : 3078b86c4255afd66a9c4faf895dc2b6fc43a152
extra : intermediate-source : 93f41b72d8e7023b5f22c727436e836de87c9ca7
extra : source : 183547f4dbbedc9ee3399b6a474016d0e89a12e8
2016-09-08 14:23:12 -04:00
Michiel de Jong
e4f0b4fda1 Bug 1253740 - Implement storage.sync, r=bsilverberg,kmag
MozReview-Commit-ID: 5v9nYBTgekj

--HG--
extra : rebase_source : 17da39c6ab98eaa043b1f00847921e26f91add5a
2016-08-11 18:16:37 -04:00
Sebastian Hengst
4fdd9389f6 Backed out changeset 396333163897 (bug 1253740) for failing xpcshell /test_ext_storage.js on Android and Linux. r=backout on a CLOSED TREE 2016-11-02 16:42:22 +01:00
Sebastian Hengst
900199872a Backed out changeset 39e08d903b48 (bug 1253740) 2016-11-02 16:40:07 +01:00
Sebastian Hengst
2535dfda38 Backed out changeset d7e4e2a7c0a6 (bug 1253740) 2016-11-02 16:39:59 +01:00
Sebastian Hengst
972ac77669 Backed out changeset 155b13cc953d (bug 1253740) 2016-11-02 16:39:55 +01:00
Sebastian Hengst
e41afb5731 Backed out changeset b8bd9da79a5e (bug 1253740) 2016-11-02 16:39:51 +01:00
Sebastian Hengst
a83fcd1fe2 Backed out changeset 1042e602ba84 (bug 1253740) 2016-11-02 16:39:46 +01:00
Sebastian Hengst
55e6f64d89 Backed out changeset a73da05c87ba (bug 1253740) 2016-11-02 16:39:42 +01:00
Ethan Glasser-Camp
882fdd80ee Bug 1253740 - Handle password resets more correctly, r=markh
MozReview-Commit-ID: 1mSvbsYP9fV

--HG--
extra : rebase_source : 08d1c6356505a8b60b67e44543c7205c6ba52e54
extra : intermediate-source : 385eb385501deec773b4680e64e8014bddaf0edb
extra : source : 8595b3a68fbd2dccbe63324524fd9532ea62bca5
2016-09-30 12:12:58 -04:00