Commit Graph

2780 Commits

Author SHA1 Message Date
Kyle Huey
0a62d4d460 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
Botond Ballo
1fab59cdfe Bug 1056356 - Allow calling NewRunnableMethod() with a const pointer to the callee object. r=froydnj 2015-07-29 19:51:36 -04:00
Carsten "Tomcat" Book
608aaf0c98 Merge mozilla-central to b2g-inbound 2015-08-03 16:20:10 +02:00
Thomas Zimmermann
ba533a2a2b Bug 1187904: Add |DaemonSocketConnector|, r=shuang
|DaemonSocketConnector| is a copy of |BluetoothDaemonConnector| and
also includes |BluetoothDaemonInterface::CreateRandomAddressString|.
2015-08-03 13:17:02 +02:00
Bob Owen
c1e6587805 Bug 1189352: Fix NSPR_LOG_FILE with absolute paths for sandboxed child on Windows. r=bbondy 2015-08-03 07:58:43 +01:00
Makoto Kato
629ba560a7 Bug 830801 - Part 2. Remove NOMINMAX define from moz.build. r=mshal 2015-08-03 10:07:09 +09:00
Jesse Ruderman
5e6905f92a Bug 1024259: Use NS_FREE_PERMANENT_DATA more consistently. r=mccr8 2015-07-31 12:11:48 -07:00
Cervantes Yu
b2307503dd Bug 1155547, Part 2: Create PNuwa protocol (managed by PBackground) for forking content processes. r=khuey
This allows us to send a sync fork request to the Nuwa process when we need one but there is no
spare process available. After an app is launched, the request to fork a spare process is still
handled asynchronously.
2015-07-31 15:25:27 +08:00
Andrea Marchesini
491a3c515e Bug 1188776 - Remove appId/isInBrowserElement from BroadcastChannel. r=bholley 2015-07-29 06:56:00 -04:00
Ryan VanderMeulen
e8856f630c Merge inbound to m-c. a=merge 2015-07-30 16:08:21 -04:00
Thomas Zimmermann
1271c602b3 Bug 1187249: Move Bluetooth init operators to ipc/hal, r=shuang 2015-07-30 10:34:51 +02:00
Thomas Zimmermann
a0dea3fa12 Bug 1183249: Move PDU helper functions to ipc/hal, r=shuang 2015-07-30 10:34:51 +02:00
Thomas Zimmermann
b0a37b8448 Bug 1187249: Move |DaemonSocketPDUHeader| to hal/ipc, r=shuang 2015-07-30 10:34:51 +02:00
Bob Owen
958aa88302 Bug 1171796: Add sandbox rule for child process NSPR log file on Windows. r=bbondy
This also moves the initialization of the sandbox TargetServices to earlier in
plugin-container.cpp content_process_main, because it needs to happen before
xul.dll loads.
2015-07-30 10:04:42 +01:00
Bobby Holley
59c4d9cf6c Bug 1188696 - Hoist nsRefPtr.h into MFBT. r=froydnj 2015-07-29 10:44:59 -07:00
Aaron Klotz
f56584d2b0 Bug 1185639 - Allow deferred message processing to happen between consecutive IPC message dispatches. r=jimm 2015-07-21 01:21:51 -06:00
Ehsan Akhgari
22277f767b Bug 1188211 - Fix more constructors in IPC; r=billm 2015-07-28 08:53:31 -04:00
David Anderson
6a1a144862 Add default initializers for primitive fields in IPDL structs. (bug 1154522, r=billm) 2015-07-28 00:02:10 -07:00
Mike Hommey
5cb6216446 Bug 1187533 - Change how Gtk+2 plugin-container is started on Gtk+3 builds. r=billm
The current situation looks like this: Firefox launches the plugin-container
with two environment variables set:
  LD_LIBRARY_PATH=$FIREFOX_DIR:$LD_LIBRARY_PATH
  LD_PRELOAD=$FIREFOX_DIR/libmozgtk2.so:$LD_PRELOAD

libxul.so has a dependency on libmozgtk.so (without "2"), but libmozgtk2.so
has a SONAME of libmozgtk.so, so ld.so recognizes libmozgtk2.so as a
dependency of libxul.so, and uses it instead of the actual libmozgtk.so,
making the plugin-container use Gtk+2 instead of Gtk+3 to load Gtk+2 plugins.

Now, ASan sets things up in shared libraries such that they needs a symbol
from the executable binary. So in the case of plugin-container, the
plugin-container executable itself contains some ASan symbols such as
__asan_init_v3. libmozgtk2.so, OTOH, contains an undefined weak reference to
that symbol, like all other Firefox shared libraries.

Since libmozgtk2.so is LD_PRELOADed, it is loaded _before_ the
plugin-container executable, and __asan_init_v3 can't be resolved.

Disabling ASan for libmozgtk2.so would be a possibility, but the build system
doesn't really know how to do that, and filtering out -fsanitize=address
can be fragile.

The alternative possibility, implemented here, is to change the library
loading strategy, renaming libmozgtk2.so to gtk2/libmozgtk.so, and setting
the following environment variable when Firefox launches the plugin-container:
  LD_LIBRARY_PATH=$FIREFOX_DIR/gtk2:$FIREFOX_DIR:$LD_LIBRARY_PATH
2015-07-28 08:19:13 +09:00
Ryan VanderMeulen
2e8222bd19 Merge m-c to inbound. a=merge 2015-07-27 16:06:20 -04:00
Ryan VanderMeulen
1f08fd1eaf Backed out changeset b2d0e28fe539 (bug 1185639) test_plugin_focus.html timeouts. 2015-07-27 16:06:03 -04:00
Andrew McCreight
065d0b780a Bug 1089816 - Let ASan content processes run to completion. r=billm
There are a variety of ways that the parent and child process ensure that
the child process exits quickly in opt builds, but for AddressSanitizer
builds we want to let the child process to run to completion, so that we
can get a LeakSanitizer report.

This requires adding some addition LSan suppressions, because running
LSan in child processes detects some new leaks.
2015-07-27 12:49:48 -07:00
Aaron Klotz
f158251c2f Bug 1185639: Allow deferred message processing to happen between consecutive IPC message dispatches; r=jimm 2015-07-21 01:21:51 -06:00
Thomas Zimmermann
cb698f81c4 Bug 1187230: Generalize Bluetooth daemon runnables, r=shuang
The new daemon runnables are generalized implementations of the
Bluetooth daemon runnables. The code is unchanged, except for name
changes and fixes to the coding style.
2015-07-27 13:33:17 +02:00
Carsten "Tomcat" Book
d55a11b7e4 Backed out changeset fa4f742c5c11 (bug 1187230) for bustage on a CLOSED TREE 2015-07-24 15:42:39 +02:00
Thomas Zimmermann
1e4f846ac2 Bug 1187230: Generalize Bluetooth daemon runnables, r=shuang
The new daemon runnables are generalized implementations of the
Bluetooth daemon runnables. The code is unchanged, except for name
changes and fixes to the coding style.
2015-07-24 14:50:06 +02:00
Jeff Muizelaar
d692ad7be8 Bug 1186025. Optimize the usage of regions. r=mstange
This eliminates a bad idiom in some places.
2015-07-21 10:54:44 -04:00
Thomas Zimmermann
ae3f007a39 Bug 1185478: Remove strong references from socket I/O class to socket classes
The shutdown procedure for socket classes ensures that the I/O class is
deleted independently from its socket class. If the socket class has been
deleted, no I/O is performed and no socket events are forwarded. The I/O
class therefore doesn't require a strong reference to its socket class.

This patch removes the remaining ref-counted pointers from the socket I/O
classes. The socket class clears the weak reference in its socket I/O class
when closing the socket.
2015-07-21 08:06:29 +02:00
Thomas Zimmermann
9e43771c76 Bug 1185478: Add leak checks to socket I/O classes 2015-07-21 08:06:29 +02:00
Christoph Kerschbaumer
03cd461c06 Bug 1143922 - Add AsyncOpen2 to nsIChannel and perform security checks when opening a channel - loadinfo changes (r=sicking,tanvi,sworkman) 2015-07-19 19:11:57 -07:00
Christoph Kerschbaumer
229a41aa30 Bug 1175803 - Store redirect chain within loadInfo - part 1 (r=sicking,mayhemer) 2015-07-19 19:11:03 -07:00
Thomas Zimmermann
04f8f3b5ec Bug 1171994: Cleanup JSAPI code of |RilConsumer|, r=htsai
This patch cleans up the JSAPI code of |RilConsumer| and moves it
into the class itself.
2015-07-17 12:10:01 +02:00
Thomas Zimmermann
3968e49ba6 Bug 1171994: Use |RilSocket| to handle RIL messages on the RIL worker, r=htsai
This patch finally breaks up forwarding received RIL messages to the
main thread before they go to the RIL worker. Any RIL message that is
received on th I/O thread is forwarded directly to the RIL worker
thread and handed over to the RIL worker JS code.

The patch includes a number of changes. They all depend on each other,
so there's no good way of landing them one-by-one.

 * |RilConsumer| now runs on the RIL worker thread.

 * |RilWorker| uses tasks to register/unregister |RilConsumer| in the worker.

 * |RilConsumer| uses |RilSocket| instead of |StreamSocket|.

 * With |RilSocket|, received RIL messages do not go through main. They are
   forwared to the RIL worker and handed over to JS immediately.
2015-07-17 12:10:01 +02:00
Thomas Zimmermann
485ba1b5ae Bug 1171994: Store an instance of |RilWorker| for each RIL connection, r=htsai 2015-07-17 12:10:01 +02:00
Thomas Zimmermann
d9296de87c Bug 1171994: Separate RIL I/O interfaces, r=htsai
This patch separates the current interface of |RilConsumer| into
two distinct classes. |RilWorker| provides the public interface
and |RilConsumer| provides the internal implementation. Running
|RilConsumer| on a worker thread will be easier this way.
2015-07-17 12:10:01 +02:00
Thomas Zimmermann
402f6a7f0e Bug 1171994: Forward received RIL socket I/O via |WorkerCrossThreadDispatcher|, r=htsai
With this patch, |RilSocket| and it's helpers forward received data
via a WCTD. This will hand over the worker's JS context to the RIL
consumer.

In a later patch, the RIL consumer will be moved onto the RIL worker
thread and call the JS ril-worker code directly.
2015-07-17 12:10:01 +02:00
Thomas Zimmermann
cc06a5e4ba Bug 1171994: Add |RilSocket| and |RilSocketConsumer|, r=htsai
|RilSocket| and |RilSocketConsumer| are copies of the respective stream-
socket classes. Improvements to the RIL I/O code will be implemented on
top of the new classes.
2015-07-17 12:10:01 +02:00
Bill McCloskey
43c87b40d3 Bug 1177013 - Bug fixes for CPOW cancelation (r=dvander) 2015-07-15 14:37:11 -07:00
Bill McCloskey
d2d832286f Bug 1128454 - Fix IPDL test (r=jimm) 2015-07-15 14:30:05 -07:00
Jim Mathies
6c14ed1a4d Bug 1128454 - When plugin bridging mysteriously fails, log the ipc channel state along with the nsresult error code. r=billm 2015-07-15 14:47:14 -05:00
Ryan VanderMeulen
c0697860fd Backed out 6 changesets (bug 1171994) for causing smoketest bustage. a=me
Backed out changeset 46061230e77a (bug 1171994)
Backed out changeset ea00769b70df (bug 1171994)
Backed out changeset 2dc847e4650c (bug 1171994)
Backed out changeset 14ec8c87f973 (bug 1171994)
Backed out changeset 31cdbef9fe22 (bug 1171994)
Backed out changeset 463528fcee4d (bug 1171994)
2015-07-15 12:53:28 -04:00
Wes Kocher
e030f0f25e Merge b2ginbound to central, a=merge 2015-07-14 15:25:44 -07:00
Thomas Zimmermann
0bc61259ef Bug 1171994: Cleanup JSAPI code of |RilConsumer|, r=htsai
This patch cleans up the JSAPI code of |RilConsumer| and moves it
into the class itself.
2015-07-14 16:57:00 +02:00
Thomas Zimmermann
e375515b5c Bug 1171994: Use |RilSocket| to handle RIL messages on the RIL worker, r=htsai
This patch finally breaks up forwarding received RIL messages to the
main thread before they go to the RIL worker. Any RIL message that is
received on th I/O thread is forwarded directly to the RIL worker
thread and handed over to the RIL worker JS code.

The patch includes a number of changes. They all depend on each other,
so there's no good way of landing them one-by-one.

 * |RilConsumer| now runs on the RIL worker thread.

 * |RilWorker| uses tasks to register/unregister |RilConsumer| in the worker.

 * |RilConsumer| uses |RilSocket| instead of |StreamSocket|.

 * With |RilSocket|, received RIL messages do not go through main. They are
   forwared to the RIL worker and handed over to JS immediately.
2015-07-14 16:57:00 +02:00
Thomas Zimmermann
e811c4a9ce Bug 1171994: Store an instance of |RilWorker| for each RIL connection, r=htsai 2015-07-14 16:57:00 +02:00
Thomas Zimmermann
b4e0ba4ded Bug 1171994: Separate RIL I/O interfaces, r=htsai
This patch separates the current interface of |RilConsumer| into
two distinct classes. |RilWorker| provides the public interface
and |RilConsumer| provides the internal implementation. Running
|RilConsumer| on a worker thread will be easier this way.
2015-07-14 16:57:00 +02:00
Thomas Zimmermann
2e5c2e368f Bug 1171994: Forward received RIL socket I/O via |WorkerCrossThreadDispatcher|, r=htsai
With this patch, |RilSocket| and it's helpers forward received data
via a WCTD. This will hand over the worker's JS context to the RIL
consumer.

In a later patch, the RIL consumer will be moved onto the RIL worker
thread and call the JS ril-worker code directly.
2015-07-14 16:57:00 +02:00
Thomas Zimmermann
0c5162b8f5 Bug 1171994: Add |RilSocket| and |RilSocketConsumer|, r=htsai
|RilSocket| and |RilSocketConsumer| are copies of the respective stream-
socket classes. Improvements to the RIL I/O code will be implemented on
top of the new classes.
2015-07-14 16:57:00 +02:00
Christoph Kerschbaumer
1fe4e1e149 Bug 1179505 - Make LoadInfo arguments optional in ipdl (r=bent,sicking) 2015-07-13 22:43:13 -07:00
Birunthan Mohanathas
47ed3a3675 Bug 1182996 - Fix and add missing namespace comments. rs=ehsan
The bulk of this commit was generated by running:

  run-clang-tidy.py \
    -checks='-*,llvm-namespace-comment' \
    -header-filter=^/.../mozilla-central/.* \
    -fix
2015-07-13 08:25:42 -07:00