Commit Graph

103 Commits

Author SHA1 Message Date
Myk Melez
afc457fdb3 Bug 1460811 - migrate XULStore to rkv r=bgrins,lina
Differential Revision: https://phabricator.services.mozilla.com/D25355
2019-04-22 02:59:51 +00:00
Coroiu Cristina
5243880061 Backed out changeset 37054e6d6bbb (bug 1460811) for marionette failures at marionette_harness/tests/unit/test_cli_arguments.py on a CLOSED TREE 2019-04-20 00:05:55 +03:00
Myk Melez
0d156747c2 Bug 1460811 - migrate XULStore to rkv r=bgrins,lina
Differential Revision: https://phabricator.services.mozilla.com/D25355
2019-04-19 17:42:48 +00:00
Razvan Maries
49b3da6112 Backed out changeset 2f8f0e53a7db (bug 1460811) for leakcheck perma failures. CLOSED TREE 2019-04-19 00:16:32 +03:00
Myk Melez
cbff591253 Bug 1460811 - migrate XULStore to rkv r=bgrins,lina
Differential Revision: https://phabricator.services.mozilla.com/D25355
2019-04-18 19:27:12 +00:00
Myk Melez
20b93db244 Bug 1543795 - configure lmdb-rkv-sys to use a smaller MDB_IDL_LOGN size r=nanj,glandium
Configure the lmdb-rkv-sys Rust crate to use a smaller MDB_IDL_LOGN size in order to reduce allocations when opening an LMDB environment in read-write mode.

@glandium I adopted the configuration strategy you suggested of creating a "feature" for each reasonable value for the MDB_IDL_LOGN macro.  Fortunately, the range of reasonable values is fairly small.

@nanj Based on your evalution in https://github.com/mozilla/lmdb/pull/2, a value of "9" for this macro should aggressively reduce the allocations while still supporting our existing use cases.  But I'm open to increasing it, if you think a higher initial value would be preferable.

Differential Revision: https://phabricator.services.mozilla.com/D27559
2019-04-16 16:03:10 +00:00
David Major
b0e53d0294 Bug 1533010 - Update Windows Rust to 1.34 beta r=glandium
This is needed for cross-language LTO (bug 1512723). We don't want to block on waiting for 1.34's release, so we'll get a head start now, but we'll update to the final 1.34 release when available. Rust Forge estimates the release at 11 April.

Differential Revision: https://phabricator.services.mozilla.com/D25851
2019-04-03 15:11:43 +00:00
Cosmin Sabou
83e0d5b271 Backed out 2 changesets (bug 1529774) for android mochitest failures on test_profile_worker.html.
Backed out changeset 334d8f9c9995 (bug 1529774)
Backed out changeset d3f27592a382 (bug 1529774)
2019-03-27 04:00:50 +02:00
Mike Hommey
a7d033f0ea Bug 1529774 - Upgrade builders to rust 1.33. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D24830
2019-03-26 13:22:07 +00:00
Lina Cambridge
aca17f0545 Bug 1482608 - Port the synced bookmarks merger to Rust. r=nika,mak,markh,tcsc
This commit introduces a Rust XPCOM component,
`mozISyncedBookmarksMerger`, that wraps the Dogear crate for
merging and applying synced bookmarks.

How this works: `SyncedBookmarksMirror.jsm` manages opening
the connection, initializing the schema, and writing incoming
items into the mirror database. The new `mozISyncedBookmarksMerger`
holds a handle to the same connection. When JS code calls
`mozISyncedBookmarksMerger::apply`, the merger builds local and
remote trees, produces a merged tree, applies the tree back to Places,
and stages outgoing items for upload in a temp table, all on the
storage thread. It then calls back in to JS, which inflates Sync
records for outgoing items, notifies Places observers, and cleans up.

Since Dogear has a more robust merging algorithm that attempts to fix
up invalid trees, `test_bookmark_corruption.js` intentionally fails.
This is fixed in the next commit, which changes the merger to handle
invalid structure.

Differential Revision: https://phabricator.services.mozilla.com/D20076
2019-03-25 04:50:14 +00:00
Lina Cambridge
23033ace97 Bug 1482608 - Add basic Rust bindings for mozStorage. r=nika,asuth,mak
This commit wraps just enough of the mozStorage API to support the
bookmarks mirror. It's not complete: for example, there's no way
to open, clone, or close a connection, because the mirror handles
that from JS. The wrapper also omits shutdown blocking and retrying on
`SQLITE_BUSY`.

This commit also changes the behavior of sync and async mozStorage
connections. Async (`mozIStorageAsyncConnection`) methods may be called
from any thread on any connection. Sync (`mozIStorageConnection`)
methods may be called from any thread on a sync connection, and from
background threads on an async connection. All connections now QI
to `mozIStorageConnection`, but attempting to call a sync method on
an async connection from the main thread throws.

Finally, this commit exposes an `OpenedConnection::unsafeRawConnection`
getter in Sqlite.jsm, for JS code to access the underlying connection.

Differential Revision: https://phabricator.services.mozilla.com/D20073
2019-03-25 04:49:18 +00:00
Adam Gashlin
d21e39792b Bug 1523417 - BITS client library for update downloading r=aklotz,emilio,froydnj
Differential Revision: https://phabricator.services.mozilla.com/D17989
2019-03-21 22:43:41 +00:00
Mark Goodwin
1094938b5f Bug 1429796 Cleanup storage in CertBlocklist to allow easy addition of new types of pair (e.g. whitelist entries) r=keeler
Differential Revision: https://phabricator.services.mozilla.com/D17668
2019-03-20 17:00:47 +00:00
Andreea Pavel
0dee2cca18 Backed out 2 changesets (bug 1429796) for failing xperf on a CLOSED TREE
Backed out changeset b0d08863f7a5 (bug 1429796)
Backed out changeset 1bd54f8dfd9e (bug 1429796)
2019-03-20 00:03:49 +02:00
Mark Goodwin
3675829d83 Bug 1429796 Cleanup storage in CertBlocklist to allow easy addition of new types of pair (e.g. whitelist entries) r=keeler
Differential Revision: https://phabricator.services.mozilla.com/D17668
2019-03-19 17:48:04 +00:00
Benjamin Bouvier
b90e9ce349 Bug 1532689: Use Cranelift features to include only architecture-specific support; r=froydnj
This introduces features in the jsrust crate, so we can enable/disable
compilation for a specific platform at compile-time. It also does only select
the architecture targeted by the JIT, which should result in slightly lower
compilation times on every platform, and lower binary sizes too.

Differential Revision: https://phabricator.services.mozilla.com/D22280
2019-03-11 13:09:58 +00:00
Bogdan Tara
42e4bb473f Backed out changeset ed3b55f9d326 (bug 1532689) for causing build bustages CLOSED TREE 2019-03-08 20:22:38 +02:00
Benjamin Bouvier
f50dfb0393 Bug 1532689: Use Cranelift features to include only architecture-specific support; r=froydnj
This introduces features in the jsrust crate, so we can enable/disable
compilation for a specific platform at compile-time. It also does only select
the architecture targeted by the JIT, which should result in slightly lower
compilation times on every platform, and lower binary sizes too.

Differential Revision: https://phabricator.services.mozilla.com/D22280
2019-03-08 13:47:35 +00:00
Jonathan Kingston
45ce8f1f58 Bug 1346759 - Use URI comparison for null principals instead of pointer comparison. r=ckerschb,bholley
Differential Revision: https://phabricator.services.mozilla.com/D12154
2019-02-11 18:03:12 +00:00
Chris Peterson
fb83a4d3e1 Bug 1507049 - Rename GeckoCrashOOL GeckoCrash. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D18514
2019-02-03 00:02:30 -08:00
Chris Peterson
dc4a318483 Bug 1507049 - Rename MOZ_CrashOOL MOZ_Crash. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D18513
2019-02-03 00:00:12 -08:00
Myk Melez
8a78786850 Bug 1490496 - implement XPCOM FFI for key-value storage r=nika,lina,mossop
MozReview-Commit-ID: JnQzXG581DW

Differential Revision: https://phabricator.services.mozilla.com/D6328
2019-02-07 16:14:04 +00:00
Bobby Holley
ffe0f52a09 Bug 1521187 - Add a dependency on derive_more. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D17028
2019-01-22 12:19:22 -08:00
bitnotri
9ad1578504 Bug 1461737 - Move nsstring-rs to a better location, r=nika
Differential Revision: https://phabricator.services.mozilla.com/D15743
2019-01-04 22:03:56 +00:00
Mike Hommey
9dac101457 Bug 1514122 - Make rust code use mozjemalloc directly. r=froydnj
Until rust 1.28, there was no stable way to change the allocator used by
rust code. In bug 1280578, we hooked HeadAlloc/HeapFree/HeapRealloc,
that the default rust system allocator uses. On other platforms, rust
code just ended up using malloc/free/realloc like everything else.

As of rust 1.28, though, it is now possible to use the GlobalAlloc trait
and the #[global_allocator] attribute to set an allocator. On Windows,
this can allow us to hook mozjemalloc directly, rather than using an
indirection through HeapAlloc/etc. (which require an extra call to
GetProcessHeap), so let's do this. On other platforms, this just ends up
doing the same thing as the default rust system allocator (except for
the memalign limit on 32-bits platforms).

We still need the HeapAlloc/etc. hooks for some C++ code using it, though.

Another benefit is that the HeapAlloc GlobalAlloc implementation needs
to do its own memalign, which it does by overallocating and aligning
manually. We obviously don't need to do this when we using
memalign/_aligned_malloc directly.

Differential Revision: https://phabricator.services.mozilla.com/D14820
2018-12-19 01:47:40 +00:00
Mike Hommey
abef7ba09e Bug 1514121 - Remove unused rust OOM handling variant. r=froydnj
This removes the code added in bug 1458161, because the old versions of
rust that required it can't be used to build Gecko anymore. The variant
for newer versions of rust stays.

Differential Revision: https://phabricator.services.mozilla.com/D14528
2018-12-14 22:24:04 +00:00
Mike Hommey
33d7b980e2 Bug 1496503 - Change the rust panic hook to delegate to Gecko's crash code. r=froydnj
The current rust panic hook keeps a string for the crash reporter, and
goes on calling the default rust panic hook, which prints out a crash
stack...  when RUST_BOOTSTRAP is set *and* when that works. Notably, on
both mac and Windows, it only really works for local builds, but fails
for debug builds from automation, although on automation itself, we also
do stackwalk from crash minidumps, which alleviates the problem.
Artifact debug builds are affected, though.

More importantly, C++ calls to e.g. MOZ_CRASH have a similar but
different behavior, in that they dump a stack trace on debug builds, by
default (with exceptions, see below for one). The format of those stack
traces is understood by the various fix*stack*py scripts under
tools/rb/, that are used by the various test harnesses both on
automation and locally.

Additionally, the current rust panic hook, as it calls the default rust
panic hook, ends up calling abort() on non-Windows platforms, which ends
up being verbosely redirected to mozalloc_abort per
https://dxr.mozilla.org/mozilla-central/rev/237e4c0633fda8e227b2ab3ab57e417c980a2811/memory/mozalloc/mozalloc_abort.cpp#79
which then calls MOZ_CRASH. Theoretically, /that/ would also print a
stack trace, but doesn't because currently the stack trace printing code
lives in libxul, and MOZ_CRASH only calls it when compiled from
libxul-code, which mozalloc_abort is not part of.

With this change, we make the rust panic handler call back into
MOZ_CRASH directly. This has multiple advantages:
- This is more consistent cross-platforms (Windows is not special
anymore).
- This is more consistent between C++ and rust (stack traces all look
the same, and can all be post-processed by fix*stack*py if need be)
- This is more consistent in behavior, where debug builds will show
those stack traces without caring about environment variables.
- It demangles C++ symbols in rust-initiated stack traces (for some
reason that didn't happen with the rust panic handler)

A few downsides:
- the loss of demangling for some rust symbols.
- the loss of addresses in the stacks, although they're not entirely
useful
- extra empty lines.

The first should be fixable later one. The latter two are arguably
something that should be consistent across C++ and rust, and should be
changed if necessary, independently of this patch.

Depends on D11719

Depends on D11719

Differential Revision: https://phabricator.services.mozilla.com/D11720
2018-11-14 22:35:33 +00:00
Dorel Luca
020b2bdbe9 Backed out 4 changesets (bug 1496503) for Valgrind bustage. CLOSED TREE
Backed out changeset 033a89b3e00d (bug 1496503)
Backed out changeset a0f255b660ce (bug 1496503)
Backed out changeset 963d8ac1cfee (bug 1496503)
Backed out changeset 43e44f8439ec (bug 1496503)
2018-11-14 19:00:29 +02:00
Mike Hommey
67e2661ca5 Bug 1496503 - Change the rust panic hook to delegate to Gecko's crash code. r=froydnj
The current rust panic hook keeps a string for the crash reporter, and
goes on calling the default rust panic hook, which prints out a crash
stack...  when RUST_BOOTSTRAP is set *and* when that works. Notably, on
both mac and Windows, it only really works for local builds, but fails
for debug builds from automation, although on automation itself, we also
do stackwalk from crash minidumps, which alleviates the problem.
Artifact debug builds are affected, though.

More importantly, C++ calls to e.g. MOZ_CRASH have a similar but
different behavior, in that they dump a stack trace on debug builds, by
default (with exceptions, see below for one). The format of those stack
traces is understood by the various fix*stack*py scripts under
tools/rb/, that are used by the various test harnesses both on
automation and locally.

Additionally, the current rust panic hook, as it calls the default rust
panic hook, ends up calling abort() on non-Windows platforms, which ends
up being verbosely redirected to mozalloc_abort per
https://dxr.mozilla.org/mozilla-central/rev/237e4c0633fda8e227b2ab3ab57e417c980a2811/memory/mozalloc/mozalloc_abort.cpp#79
which then calls MOZ_CRASH. Theoretically, /that/ would also print a
stack trace, but doesn't because currently the stack trace printing code
lives in libxul, and MOZ_CRASH only calls it when compiled from
libxul-code, which mozalloc_abort is not part of.

With this change, we make the rust panic handler call back into
MOZ_CRASH directly. This has multiple advantages:
- This is more consistent cross-platforms (Windows is not special
anymore).
- This is more consistent between C++ and rust (stack traces all look
the same, and can all be post-processed by fix*stack*py if need be)
- This is more consistent in behavior, where debug builds will show
those stack traces without caring about environment variables.
- It demangles C++ symbols in rust-initiated stack traces (for some
reason that didn't happen with the rust panic handler)

A few downsides:
- the loss of demangling for some rust symbols.
- the loss of addresses in the stacks, although they're not entirely
useful
- extra empty lines.

The first should be fixable later one. The latter two are arguably
something that should be consistent across C++ and rust, and should be
changed if necessary, independently of this patch.

Depends on D11719

Differential Revision: https://phabricator.services.mozilla.com/D11720
2018-11-14 08:46:51 +00:00
Coroiu Cristina
e770c03004 Backed out 4 changesets (bug 1496503) for xpcshell failures at toolkit/crashreporter/test/unit/test_crash_rust_panic.js on a CLOSED TREE
Backed out changeset cfeee3d5ed6a (bug 1496503)
Backed out changeset 164a5a49fd25 (bug 1496503)
Backed out changeset d0b6c1fc149d (bug 1496503)
Backed out changeset bfb4ee856c71 (bug 1496503)
2018-11-14 09:00:06 +02:00
Mike Hommey
41dbba3d42 Bug 1496503 - Change the rust panic hook to delegate to Gecko's crash code. r=froydnj
The current rust panic hook keeps a string for the crash reporter, and
goes on calling the default rust panic hook, which prints out a crash
stack...  when RUST_BOOTSTRAP is set *and* when that works. Notably, on
both mac and Windows, it only really works for local builds, but fails
for debug builds from automation, although on automation itself, we also
do stackwalk from crash minidumps, which alleviates the problem.
Artifact debug builds are affected, though.

More importantly, C++ calls to e.g. MOZ_CRASH have a similar but
different behavior, in that they dump a stack trace on debug builds, by
default (with exceptions, see below for one). The format of those stack
traces is understood by the various fix*stack*py scripts under
tools/rb/, that are used by the various test harnesses both on
automation and locally.

Additionally, the current rust panic hook, as it calls the default rust
panic hook, ends up calling abort() on non-Windows platforms, which ends
up being verbosely redirected to mozalloc_abort per
https://dxr.mozilla.org/mozilla-central/rev/237e4c0633fda8e227b2ab3ab57e417c980a2811/memory/mozalloc/mozalloc_abort.cpp#79
which then calls MOZ_CRASH. Theoretically, /that/ would also print a
stack trace, but doesn't because currently the stack trace printing code
lives in libxul, and MOZ_CRASH only calls it when compiled from
libxul-code, which mozalloc_abort is not part of.

With this change, we make the rust panic handler call back into
MOZ_CRASH directly. This has multiple advantages:
- This is more consistent cross-platforms (Windows is not special
anymore).
- This is more consistent between C++ and rust (stack traces all look
the same, and can all be post-processed by fix*stack*py if need be)
- This is more consistent in behavior, where debug builds will show
those stack traces without caring about environment variables.
- It demangles C++ symbols in rust-initiated stack traces (for some
reason that didn't happen with the rust panic handler)

A few downsides:
- the loss of demangling for some rust symbols.
- the loss of addresses in the stacks, although they're not entirely
useful
- extra empty lines.

The first should be fixable later one. The latter two are arguably
something that should be consistent across C++ and rust, and should be
changed if necessary, independently of this patch.

Depends on D11719

Differential Revision: https://phabricator.services.mozilla.com/D11720
2018-11-13 23:48:40 +00:00
Nathan Froyd
132bf2ace7 Bug 1505921 - update rust version check for oom hooking; r=chmanchester,glandium
Rust 1.30 is out, which means nightly is 1.32.
2018-11-10 11:17:21 -05:00
Myk Melez
e7943ad9ec Bug 1500259 - update rkv to 0.5 and uuid to 0.6 r=froydnj
Updating rkv to 0.5 enables us to un-vendor new-ordered-float, as rkv 0.4 is the last crate in the tree that depends on it.

    It also enables us to un-vendor version 0.5 of uuid. We previously needed that version because multiple third-party crates depended on it, and we have limited control over third-party sub-dependencies. But rkv 0.4 was the last third-party crate that still depended on version 0.5 of uuid; rkv 0.5 depends on version 0.6 of uuid.

    There would still be two internal crates that depend on version 0.5 of uuid: geckodriver and webrender_bindings. But we have more control over internal sub-dependencies, and we can update those two internal crates to depend on version 0.6 of uuid. This patch does so.

    To summarize, this patch makes the following changes:

    * rkv: 0.4 -> 0.5
    * new-ordered-float: un-vendored
    * geckodriver: uuid dependency 0.5 -> 0.6
    * webrender_bindings: uuid dependency 0.5 -> 0.6
    * uuid 0.5: un-vendored
    * uuid 0.6: remains in tree

Differential Revision: https://phabricator.services.mozilla.com/D9160
2018-10-22 16:31:40 +00:00
Markus Stange
2cdfec9968 Bug 1457481 - Add nsIProfiler.GetSymbolTable and a profiler/rust-helper crate which implements it for ELF binaries. r=njn,jrmuizel
r?njn for the profiler parts
r?jrmuizel for the ELF parsing parts

Depends on D7020

Differential Revision: https://phabricator.services.mozilla.com/D7021
2018-10-02 01:50:02 +00:00
shindli
5777a708a7 Backed out 4 changesets (bug 1457481) for c1 failures in devtools/client/performance-new/test/chrome/test_perf-settings-entries.html
Backed out changeset 212450f77860 (bug 1457481)
Backed out changeset ac3deff9340f (bug 1457481)
Backed out changeset 4478820fbcaa (bug 1457481)
Backed out changeset 1c8460b1d6da (bug 1457481)
2018-10-02 01:43:46 +03:00
Markus Stange
1031929ed3 Bug 1457481 - Add nsIProfiler.GetSymbolTable and a profiler/rust-helper crate which implements it for ELF binaries. r=njn,jrmuizel
r?njn for the profiler parts
r?jrmuizel for the ELF parsing parts

Depends on D7020

Differential Revision: https://phabricator.services.mozilla.com/D7021
2018-10-01 20:16:07 +00:00
Benjamin Bouvier
e359fef5cb Bug 1490948: Add build system support for a Rust library in Spidermonkey; r=chmanchester
This introduces two new crates:
- jsrust, for standalone builds. This crate is compiled into a static library
  libjsrust.a, which gets linked into the shared Spidermonkey library when it's
  built, or into the static Spidermonkey library otherwise. This is just a
  static library wrapping jsrust_shared below.
- jsrust_shared, for Gecko embedding. It just references other Rust
  crates actively used in Spidermonkey. It is used to be embedded as part of
  a new Rust dependency in Gecko (in gkrust).
2018-09-25 15:56:56 +02:00
Chris Manchester
776799fb42 Bug 1485184 - Bump enforced upper rustc version limit. r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D4036
2018-08-29 00:41:53 +00:00
sotaro
90fc293098 Bug 1457390 - Forward rust log to android_log on android r=bholley 2018-08-22 13:48:53 +09:00
Myk Melez
f40848be9d Bug 1445451 - vendor rkv; r=froydnj
MozReview-Commit-ID: KbcADpNltYq

Differential Revision: https://phabricator.services.mozilla.com/D3042
2018-08-09 19:42:17 +00:00
Daniel Varga
69b76647e0 Backed out changeset 08fa47a24e89 (bug 1445451) for failing Btup 2018-08-09 02:20:25 +03:00
Myk Melez
04a9641a5d Bug 1445451 - vendor rkv r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D2246
2018-08-08 20:59:21 +00:00
Chris Manchester
1368bbfb78 Bug 1478561 - Bump OOM hook rustc version check to check for greater than 1.30.0-alpha. r=glandium
MozReview-Commit-ID: ESiK7tqHMT0
2018-07-30 16:46:20 -07:00
Chris Manchester
4470d1e2e7 Bug 1472857 - Allow rustc 1.27 to build in automation for the sake of the base-toolchains build. r=glandium
MozReview-Commit-ID: EQj9aLbbckA
2018-07-03 15:27:20 -07:00
Mike Hommey
c3cc42fd41 Bug 1471096 - Choose OOM hooking version to use at build time rather than configure time. r=froydnj
When I originally implemented bug 1458161, this is how it was done, but
it was suggested to use a configure-time check. This turned out to not
be great, because the rust compiler changes regularly, and we don't run
the configure tests when the version changes. When people upgraded their
rust compiler to 1.27, the code subsequently failed to build because the
features were still set for the previous version they had installed.
2018-06-23 07:28:26 +09:00
Mike Hommey
6e9e91d96b Bug 1471096 - Vendor rustc_version. r=froydnj 2018-06-26 10:00:26 +09:00
Mike Hommey
5bb37d4078 Bug 1469766 - Update OOM hook on rustc 1.28 after rust PR 51543. r=froydnj 2018-06-20 13:44:10 +09:00
Mike Hommey
9ceda51944 Bug 1465709 - Hook rust OOM handler on rustc 1.28. r=froydnj
Bug 1458161 added a rust OOM handler based on an unstable API that was
removed in 1.27, replaced with something that didn't allow to get the
failed allocation size.

Latest 1.28 nightly (2018-06-13) has
https://github.com/rust-lang/rust/pull/50880,
https://github.com/rust-lang/rust/pull/51264 and
https://github.com/rust-lang/rust/pull/51241 merged, which allow to
hook the OOM handler and get the failed allocation size again.

Because this is still an unstable API, we explicitly depend on strict
versions of rustc. We also explicitly error out if automation builds
end up using a rustc version that doesn't allow us to get the allocation
size for rust OOM, because we don't want that to happen without knowing.
2018-05-31 16:36:05 +09:00
Henri Sivonen
82e31ed8ef Bug 1466807 - Update encoding_rs to 0.8.0. r=emk
MozReview-Commit-ID: 30vmruy1kiL
2018-06-05 13:50:20 +03:00
Matthew Gregan
cfc9ae7b8d Bug 1457359 - Update mp4parse and disable FallibleVec when jemalloc is disabled. r=glandium,jya
Update mp4parse-rust to 0c8e1d91464aaa63b82ebf076b63cda1df4230d1, which adds
uuid parsing support and exports the mp4parse_fallible feature from
mp4parse_capi.

Update gkrust to pass MOZ_MEMORY as a feature, and use that to conditionally
enable mp4parse_fallible/FallibleVec.

MozReview-Commit-ID: 2HDYbL2CGgJ
2018-05-10 12:11:51 +12:00