Commit Graph

502 Commits

Author SHA1 Message Date
Kyle Huey
8328b9b63c Bug 1208687: Only discard events from the outermost queue. r=ehsan
When workers shut down we discard the event queue rather than running it to completion.  Originally workers managed their event queue themselves and would simply iterate through the array of events and cancel them all.  After bug 914762 this was done by setting a (thread-)global "canceling" flag and then calling NS_ProcessPendingEvents.  But this neglects that a shut down request can be received while the worker is in a sync queue.  In this case, calling NS_ProcessPendingEvents will process any events pending in the sync queue, which is *not* the queue we need to cancel.

The fix is, if we are in a sync queue when NotifyInternal is called, to defer clearing the queue until the top-most sync queue is destroyed and we are about to return to the regular event queue.  Only then can we call NS_ProcessPendingEvents to clear out the queue.  Because we can never process any events from this queue while sync queues are active, the timing of the mass cancellation is unchanged from the perspective of events in the regular queue.
2015-09-28 14:34:28 -07:00
Nigel Babu
d77a40ba48 Backed out changeset ee27fc2f6a1d (bug 1208687) for W(4) bustage
ON A CLOSED TREE
2015-09-28 12:23:36 +05:30
Kyle Huey
0d404b44a2 Bug 1208687: Only discard events from the outermost queue. r=ehsan
When workers shut down we discard the event queue rather than running it to completion.  Originally workers managed their event queue themselves and would simply iterate through the array of events and cancel them all.  After bug 914762 this was done by setting a (thread-)global "canceling" flag and then calling NS_ProcessPendingEvents.  But this neglects that a shut down request can be received while the worker is in a sync queue.  In this case, calling NS_ProcessPendingEvents will process any events pending in the sync queue, which is *not* the queue we need to cancel.

The fix is, if we are in a sync queue when NotifyInternal is called, to defer clearing the queue until the top-most sync queue is destroyed and we are about to return to the regular event queue.  Only then can we call NS_ProcessPendingEvents to clear out the queue.  Because we can never process any events from this queue while sync queues are active, the timing of the mass cancellation is unchanged from the perspective of events in the regular queue.
2015-09-27 21:57:36 -07:00
Andrea Marchesini
944df6dbb8 Bug 1193414 - SharedWorkers thread should be kept alive also when the SharedWorker object is CCed, r=khuey 2015-09-23 06:54:29 +01:00
Nicholas Nethercote
3ddf3a726a Bug 1203427 (part 5) - Add logging of timer firings. r=froydnj. 2015-09-10 00:50:51 -07:00
Andrea Marchesini
8ffb255cfa Bug 1204775 - SharedWorker.port should be a 'real' MessagePort, r=khuey 2015-09-16 11:27:56 +08:00
Wes Kocher
b5d1789b6c Backed out changeset ccfddcbccdac (bug 1204775) for sharedworker bustage 2015-09-15 11:08:09 -07:00
Andrea Marchesini
6fc6f7c041 Bug 1204775 - SharedWorker.port should be a 'real' MessagePort, r=khuey 2015-09-16 00:47:19 +08:00
Botond Ballo
9bc3c35de8 Bug 1198451 - Disambiguate mozilla::dom::Function from mozilla::Function. r=froydnj 2015-09-11 17:25:23 -04:00
Andrea Marchesini
a2c814e845 Bug 1198795 - ipc/StructuredCloneUtils should be merged with StructuredCloneHelper, r=smaug 2015-09-02 17:20:30 +01:00
Kyle Huey
2be758a103 Bug 1198982: Don't fail the SW load for an importScripts failure. r=bkelly 2015-08-30 10:31:52 -07:00
Michael Layzell
0cb27cd08f Bug 1147821 - Update IndexedDB to use common StorageAllowedForWindow logic, r=khuey 2015-08-28 10:10:30 -04:00
Andrea Marchesini
ca8beb8e59 Bug 1186307 - StructuredCloneHelper in workers.postMessage(), r=smaug 2015-08-27 17:19:13 +01:00
Nigel Babu
ad0137c71f Backed out a19daae11647 (Bug 1186307) for W8 and W4 bustage on CLOSED TREE 2015-08-27 15:04:25 +05:30
Andrea Marchesini
29e5030756 Bug 1186307 - StructuredCloneHelper in workers.postMessage(), r=smaug 2015-08-27 09:06:09 +01:00
Nikhil Marathe
4d4496194c Bug 1180861 - Various ServiceWorker registration fixes to get test passing. r=bkelly,jgraham.
This commit implements the following changes to get registration.https.html working.
1) Fail with NS_ERROR_DOM_SECURITY_ERR where the spec requires it.
2) Propagate JSExnType to ServiceWorkerManager::HandleError() so that a JS
   exception object with the correct .name can be created.
3) Fail with security error on redirect failure.
4) Check fetched script's mimetype.
5) Add missing python server files for web-platform-tests.
6) Update web-platform-tests expected data.
7) Several tests have been changed to use TypeError or more appropriate JS
   errors based on my reading of the spec.
2015-08-19 16:21:25 -07:00
Kyle Huey
b70b9d5bda Bug 1164834: MessageEvents coming from postMessage should not be cancelable. r=Ms2ger 2015-08-25 13:30:19 -07:00
Bill McCloskey
82c63a0ceb Bug 1163735 - Ensure that we don't hand out a destroyed TabChild from WorkerPrivate::InterfaceRequestor (r=khuey)
If the actor we hand out has been __delete__d, then we'll crash when
Necko tries to send the actor to the parent to open connections.
2015-08-19 09:40:55 -07:00
Andrea Marchesini
d418f400ef Bug 1187470 - ServiceWorker scripts should not be treated parser warnings as errors, r=bkelly 2015-08-13 10:52:15 +01:00
Aryeh Gregor
6e1dae88e0 Bug 874842 - Return Event instead of nsIDOMEvent 2015-08-12 14:39:31 +03:00
Kyle Huey
862b128345 Bug 1179909: Refactor stable state handling. r=smaug
This is motivated by three separate but related problems:

1. Our concept of recursion depth is broken for things that run from AfterProcessNextEvent observers (e.g. Promises). We decrement the recursionDepth counter before firing observers, so a Promise callback running at the lowest event loop depth has a recursion depth of 0 (whereas a regular nsIRunnable would be 1). This is a problem because it's impossible to distinguish a Promise running after a sync XHR's onreadystatechange handler from a top-level event (since the former runs with depth 2 - 1 = 1, and the latter runs with just 1).

2. The nsIThreadObserver mechanism that is used by a lot of code to run "after" the current event is a poor fit for anything that runs script. First, the order the observers fire in is the order they were added, not anything fixed by spec. Additionally, running script can cause the event loop to spin, which is a big source of pain here (bholley has some nasty bug caused by this).

3. We run Promises from different points in the code for workers and main thread. The latter runs from XPConnect's nsIThreadObserver callbacks, while the former runs from a hardcoded call to run Promises in the worker event loop. What workers do is particularly problematic because it means we can't get the right recursion depth no matter what we do to nsThread.

The solve this, this patch does the following:

1. Consolidate some handling of microtasks and all handling of stable state from appshell and WorkerPrivate into CycleCollectedJSRuntime.
2. Make the recursionDepth counter only available to CycleCollectedJSRuntime (and its consumers) and remove it from the nsIThreadInternal and nsIThreadObserver APIs.
3. Adjust the recursionDepth counter so that microtasks run with the recursionDepth of the task they are associated with.
4. Introduce the concept of metastable state to replace appshell's RunBeforeNextEvent. Metastable state is reached after every microtask or task is completed. This provides the semantics that bent and I want for IndexedDB, where transactions autocommit at the end of a microtask and do not "spill" from one microtask into a subsequent microtask. This differs from appshell's RunBeforeNextEvent in two ways:
a) It fires between microtasks, which was the motivation for starting this.
b) It no longer ensures that we're at the same event loop depth in the native event queue. bent decided we don't care about this.
5. Reorder stable state to happen after microtasks such as Promises, per HTML. Right now we call the regular thread observers, including appshell, before the main thread observer (XPConnect), so stable state tasks happen before microtasks.
2015-08-11 06:10:46 -07:00
Andrea Marchesini
4f1be66939 Bug 1186307 - part 2 - Compilation failures fixed, CLOSED TREE 2015-08-10 17:28:43 +01:00
Andrea Marchesini
a553c2153c Bug 1186307 - part 1 - Unify the StructuredCloneCallbacks in WorkerPrivate.cpp, r=smaug 2015-08-10 16:33:23 +01:00
Nikhil Marathe
30f6915ff5 Bug 1144660 - client.focus() adds window interaction checks and directly uses DOMServiceWorkerFocusClient to focus window. r=ehsan,dao
client.focus() now directly uses the DOMServiceWorkerFocusClient event. The
platform popup checking is not available on service workers. Instead each
worker maintains a counter of if it is allowed to interact with windows. This
counter is currently only incremented by the notificationclick event and
dropped after the event has been dispatched.

Since acquiring a client is an async operation most service workers will
perform in notificationclick, an additional extension is granted after the event
during which the service worker may focus a client. This extension is only granted
if the script invokes NotificationEvent.waitUntil() at which point the timer begins.
The extension is terminated when the Promise passed to waitUntil() is fulfilled, or
the timer expires, whichever comes first.
2015-07-23 08:30:27 -07:00
Wes Kocher
6a7e2366bd Backed out 3 changesets (bug 1191495, bug 1153499, bug 1144660) for mochitest-push crashes
Backed out changeset 8917e7323399 (bug 1191495)
Backed out changeset 13ed6f60d3f9 (bug 1144660)
Backed out changeset 95bd6642e4b1 (bug 1153499)
2015-08-05 15:18:05 -07:00
Nikhil Marathe
e98edad8cd Bug 1144660 - client.focus() adds window interaction checks and directly uses DOMServiceWorkerFocusClient to focus window. r=ehsan,dao
client.focus() now directly uses the DOMServiceWorkerFocusClient event. The
platform popup checking is not available on service workers. Instead each
worker maintains a counter of if it is allowed to interact with windows. This
counter is currently only incremented by the notificationclick event and
dropped after the event has been dispatched.

Since acquiring a client is an async operation most service workers will
perform in notificationclick, an additional extension is granted after the event
during which the service worker may focus a client. This extension is only granted
if the script invokes NotificationEvent.waitUntil() at which point the timer begins.
The extension is terminated when the Promise passed to waitUntil() is fulfilled, or
the timer expires, whichever comes first.
2015-07-23 08:30:27 -07:00
Kaku Kuo
b05b1cd04b Bug 1044102 - Part 3 - Support StructuredClone. r=baku 2015-07-30 20:50:00 +02:00
Kyle Huey
d5b03cab2f Bug 1188141: Make Worker error events not bubble. r=baku 2015-07-28 15:59:55 -07:00
Ben Kelly
5f986f3ca7 Bug 1181887 Fall back to network if ServiceWorker script fails to load. r=ehsan r=khuey 2015-07-15 12:21:40 -07:00
Randell Jesup
9212636903 Bug 1155059: Patch 1&2 - Convert Dispatch() and friends to already_AddRefed<> r=froydnj
Modify Dispatch IDL and code to deal with MSVC issues with overloaded templates r=froydnj
2015-07-09 23:21:46 -04:00
Andrea Marchesini
f1c53bedbc Bug 1176034 - Implement JSAutoStructuredCloneBuffer::clear(with callbacks and closure), r=sfink 2015-07-06 12:22:08 +01:00
Juan Gomez
89035d527e Bug 1171931 - Refactor duplicated code using XRE_IsParent/ContentProcess. r=froydnj 2015-07-03 18:29:00 -07:00
Hiroyuki Ikezoe
b61dee95d7 Bug 1179982 - Fix all compile errors in dom/workers on non-unified build. r=mrbkap 2015-07-02 14:54:00 +02:00
Ehsan Akhgari
091092faac Bug 1148935 - Correctly reflect worker and sharedworker RequestContext values; r=smaug 2015-06-30 18:52:42 -04:00
Ryan VanderMeulen
63ceae91b7 Backed out changeset 07bf31cca660 (bug 1148935) for Werror bustage.
CLOSED TREE
2015-06-30 15:53:43 -04:00
Ehsan Akhgari
0b1720ebbd Bug 1148935 - Correctly reflect worker and sharedworker RequestContext values; r=smaug 2015-06-30 15:30:08 -04:00
Ben Kelly
9214a8b703 Bug 1175138 P3 Expose the devtools SW testing flag on workers. r=ehsan 2015-06-27 23:19:24 -04:00
Andrea Marchesini
bce6c64a90 Bug 1177621 - SharedWorkers should not be shared between a private and a non-private documents, r=nsm 2015-06-26 11:18:18 -07:00
Ryan VanderMeulen
7aba9d7002 Backed out changeset 8b4e4083639e (bug 1171931) for B2G debug emulator bustage. 2015-06-25 19:48:42 -04:00
Juan Gomez
7323e89a40 Bug 1171931 - Refactor duplicated code using XRE_IsParent/ContentProcess. r=froydnj 2015-06-24 14:11:00 -04:00
Andrea Marchesini
53eeb64dea Bug 1176034 - MessagePort should force a close() if the structured clone algorithm fails, r=bent 2015-06-23 15:50:00 -07:00
Carsten "Tomcat" Book
cae75e033e Backed out changeset 4f4ceae7be1a (bug 1176034) for frequent bustages in Windows 8 x64 debug 2015-06-24 10:11:07 +02:00
Andrea Marchesini
d720e96813 Bug 1176034 - MessagePort should force a close() if the structured clone algorithm fails, r=bent 2015-06-23 15:50:00 -07:00
Ben Turner
063d81721e Bug 1171578 - Avoid crashing if indexedDB is used at a particular point in the worker shutdown sequence, r=baku. 2015-06-22 12:13:38 -07:00
Valentin Gosu
9e34a62bf8 Bug 1093611 - Stage 2 - Make hash getters not do percent decoding if dom.url.getters_decode_hash is false r=smaug 2015-06-15 15:55:02 +03:00
Andrea Marchesini
a2bd5efebf Bug 911972 - MessagePort and MessageChannel in workers, r=smaug, r=bent 2015-06-17 11:44:27 +01:00
Ryan VanderMeulen
598e0c304c Backed out changesets a08167680328 and b008f158e91f (bug 1093611) for talos svgr timeouts. 2015-06-16 15:37:37 -04:00
Valentin Gosu
918ade0312 Bug 1093611 - Stage 2 - Make hash getters not do percent decoding if dom.url.getters_decode_hash is false r=smaug 2015-06-16 19:46:31 +03:00
Ryan VanderMeulen
cff9cb6b12 Backed out changeset 1d67d747b3eb (bug 911972) for frequent linux64 debug e10s test_post_message_advanced.html timeouts.
CLOSED TREE
2015-06-15 13:06:23 -04:00
Andrea Marchesini
1d96d95aba Bug 911972 - MessagePort and MessageChannel in workers, r=smaug, r=bent 2015-06-15 14:08:25 +01:00