Here are the changes needed to achieve this:
* We tag each message posted to the framework with a context argument.
context can be one of "Window", "Worker" or "ServiceWorker". In the
places where we handle messages, we only handle the ones corresponding
to the context that we expect.
* We use Promise.all in order to interleave the execution of the tests.
This has the nice property of actually getting the tests run
simultaneously on multi-core machines.
* For ease of debugging test failures, we print the context from which
each test message is coming from.
* In order for the tests that are run in parallel to not step on each
other's toes, we introduce a global `context' variable that the test
script can use to create names that do not clash with concurrent
test runs. For example, instead of `caches.open("foo")', one must now
use: `caches.open("foo" + context)'.
* The existing tests are modified based on the above.
* When running the tests in parallel, the service worker may end up
controlling both frame.html and message_receiver.html. The hunk at
the end of worker_wrapper.js is intended to ensure that we will
always be communicating with message_receiver.html.
* An order argument has been added to runTests which can be set to
"sequential" in order to run the tests in different contexts in
parallel. If the argument is omitted, the default is "parallel".
CLOSED TREE
Backed out changeset 584d91ffdf88 (bug 1135424)
Backed out changeset d86806ea63f4 (bug 1135424)
Backed out changeset e52401d30a67 (bug 1135424)
The original idea behind the current model was that we wanted ironclad guarantees
that consumers would always get a callback on their promise. But we now have use
cases where the consumer wants to forget about a promise (using the new
Disconnect()) feature, and in some cases wants to shut down the task queue that
the response is going to be dispatched on. In the case of this bug, we want to
avoid waiting for the longest outstanding timer promise to be resolved before
shutting down the MDSM.
So this patch fixes up the pieces needed to make this work:
* Loosening our invariants to allow dispatch targets to be released on any thread,
since MediaTaskQueue and nsIEventTarget both have thread-safe refcounting.
* Releasing mThisVal in Disconnect, so that we no longer depend on successful
dispatch to release it on the correct (dispatch) thread.
* Fiddling with various assertions.
We also make some assertions fatal in nightly/aurora builds while we're at it.
Playback position used in calculating buffering time is set
during metadata reading. This is at end of file for the
video in the bug. As a result the buffering data is always
wrong.
Changed to not setting position during metadata - it is set
during frame playback anyway.
Also changes buffering timeout to 15s from 30s.
This patch inverses the connection setup procedure between Gecko
and nfcd. Gecko now installs a listen socket and starts nfcd from
the init scripts. Nfcd establishes the connection by connecting
to Gecko's socket.
As a side effect of this patch, nfcd only runs while NFC is switched
on. This saves ~1.6 MiB os memory with contemporary NFC drivers on
flame-kk.
With this patch Gecko only creates a connection to nfcd while NFC is
switched on, and closes the connection after NFC has been switched off.
While the connection is being opened, commands to nfcd are held in a
waiting queue. Gecko flushes the queue after it connected successfully
to nfcd.
As a side effect of this patch, the NFC thread only exists while NFC
is switched on.
Keeping helper classes in Bluetooth's C++ namespace creates collisions
between symbols of different managers' helpers. Moving OPP helpers into
the namespace of |BluetoothOPPManager| fixes this problem for OPP.
Keeping helper classes in Bluetooth's C++ namespace creates collisions
between symbols of different managers' helpers. Moving A2DP helpers into
the namespace of |BluetoothA2dpManager| fixes this problem for A2DP.
Keeping helper classes in Bluetooth's C++ namespace creates collisions
between symbols of different managers' helpers. Moving HFP helpers into
the namespace of |BluetoothHfpManager| fixes this problem for HFP.