Commit Graph

128 Commits

Author SHA1 Message Date
Andi-Bogdan Postelnicu
ad14abb338 Bug 1453795 - IPC - Initialize member fields in classes/ structures. r=jmathies 2018-06-14 08:48:43 +03:00
Alex Gaynor
895297bdcf Bug 1451859 - Part 3: In FUZZER builds, do not crash on malformed IPC messages. r=jld, r=posidron 2018-04-05 15:47:34 -04:00
Cosmin Sabou
28eb5415f4 Backed out 3 changesets (bug 1451859) for causing Spidermonkey bustages on Linux x64 opt.
Backed out changeset 8f5a9e18e953 (bug 1451859)
Backed out changeset 950fa584ec8e (bug 1451859)
Backed out changeset f1f42726f1ec (bug 1451859)
2018-06-07 09:10:35 +03:00
Alex Gaynor
ea00dc0946 Bug 1451859 - Part 3: In FUZZER builds, do not crash on malfored IPC messages. r=jld, r=posidron 2018-04-05 15:47:34 -04:00
Alex Gaynor
e7a99f8281 Bug 1457536 - refactor Transition in IPC to make it more amenable to fuzing; r=froydnj
Instead of crashing the process inside Transition on a bad state transition,
propagate an error up the stack (and crash higher up).

MozReview-Commit-ID: JJmAeq6xSfe
2018-05-03 12:08:48 -04:00
Alex Gaynor
9119fee5d7 Bug 1323532 - Part 2 - don't codegen Transition functions in ipdl, just statically define the two variants we need; r=froydnj
MozReview-Commit-ID: GdATc0Wdsxi
2018-04-30 17:10:27 -04:00
Christoph Diehl
4130756f59 Bug 1450231 - Ignore MOZ_CRASH in FatalError() for --enable-fuzzing builds. r=jld 2018-04-03 09:51:21 +02:00
Nathan Froyd
d5d9b2d583 Bug 1451363 - part 6 - move GetIPCChannel into ProtocolState; r=mccr8
We can move this information into ProtocolState and save having two
virtual functions for every protocol.  Moving some bits out of the
codegen'd IPC code is a nice bonus, though we keep the strange setup
where toplevel protocols have two mChannel member variables.
2018-04-23 14:13:36 -04:00
Nathan Froyd
1aad33a3a3 Bug 1451363 - part 5 - remove ProtocolName virtual function; r=mccr8
ProtocolName() is only used for producing error messages and annotating
crash reports.  But examining actual crash reports that would have used
the result of ProtocolName() indicates that we can always tell what the
erroring protocol is due to the stack backtrace.  So having this virtual
function around just provides duplicate information, and it takes up too
much space in the vtable besides.  Let's get rid of it.
2018-04-23 14:13:36 -04:00
Nathan Froyd
e1afd1ee23 Bug 1451363 - part 4 - consolidate generated code into IProtocol; r=mccr8
lower.py generates repetitious:

  SetManager(...);
  Register(...); // Or RegisterID.
  SetIPCChannel(...);

calls, which are moderately sized, given that the above call sequence
requires virtual calls in several places.  Instead of codegenning this
sequence, let's consolidate the sequence into IProtocol and change the
code generator to call into the consolidated function instead.
2018-04-23 14:13:37 -04:00
Nathan Froyd
699f426c14 Bug 1451363 - part 2b - move protocol event target access into ProtocolState; r=mccr8
The reasoning here is the same as for the protocol register/lookup
functions: these functions are all basic functionality that should not
be overriden by subclasses.
2018-04-23 14:13:37 -04:00
Nathan Froyd
5286ec0679 Bug 1451363 - part 2a - move protocol register/lookup functions into ProtocolState; r=mccr8
This functionality is base functionality for top-level and non-toplevel
protocols; nobody overrides this stuff, so it's safe to move into
ProtocolState.
2018-04-23 14:13:37 -04:00
Nathan Froyd
182d281adc Bug 1451363 - part 1 - move Shmem-related IProtocol interfaces into an intermediate State class; r=mccr8
IProtocol, which is inherited by every generated IPDL protocol and every
concrete protocol implementation in-tree, has a number of virtual
methods that are only relevant when distinguishing between top-level
protocols (IToplevelProtocol) and managed protocols (everything else).
These virtual methods require pointers in every protocol's vtable, which
is wasteful, and it's also somewhat confusing that many methods exist
but don't really need to be overridable in any useful way.

Let's clean this up, by creating a ProtocolState class to hold methods
that solely differ between top-level protocols and everything else.
This commit does that work and moves Shmem-related methods into this
class as a proof that this can be done in a reasonable way.
2018-04-23 14:13:37 -04:00
Nathan Froyd
f0c84c4a9d Bug 1452657 - rename IPDL-private Shmem token struct to something more professional; r=mccr8
Brevity is the soul of wit.
2018-04-17 10:05:30 -04:00
Sebastian Hengst
d91e9954eb Backed out 4 changesets (bug 525063) on request from Andi. a=backout
Backed out changeset 516c4fb1e4b8 (bug 525063)
Backed out changeset 6ff8aaef2866 (bug 525063)
Backed out changeset bf13e4103150 (bug 525063)
Backed out changeset d7d2f08e051c (bug 525063)
2018-04-13 16:01:28 +03:00
Jed Davis
c9ee1a83f3 Bug 1436156 - CHECK() in Chromium IPC code should be fatal when not fuzzing. r=froydnj
Includes a workaround for bug 1445121.

MozReview-Commit-ID: 4iQqzzECCK8
2018-04-10 12:36:46 -06:00
Tristan Bourvon
6095241db8 Bug 525063 - Initialize uninitialized class attributes in m-c. r=ehsan 2018-04-10 21:11:02 +02:00
Stephen A Pohl
a7e561f5ea Bug 1348361 - Part 3 - Do not block the thread when spawning a gecko child process; r=jld
They are not yet fully async because ContentParent::InitInternal calls
OtherPid(), which will block until the process is spawned. Deferring the calls
to OtherPid() will be a subject of a follow up patch.

MozReview-Commit-ID: 4TFkMpdQtRw
2018-02-16 10:24:21 -05:00
Alex Gaynor
3cc51bb878 Bug 1348361 - Part 1 - Added locking to IToplevelProtocol's management of the peer's pid; r=jld
This will let us manipulate it from multiple threads in a future patch.

MozReview-Commit-ID: 2AOgho8SEX9
2018-02-22 10:36:55 -05:00
Alex Gaynor
247d010651 Bug 1445249 - Part 3 - Make it an error to call IToplevelProtocol::OtherPid() on an unconnected protocol; r=jld
MozReview-Commit-ID: HAMXOYUeHoU
2018-03-12 13:06:33 -04:00
Alex Gaynor
04900e278c Bug 1445249 - Part 2 - avoid calling OtherPid() where it might return an invalid pid on android; r=jld
MozReview-Commit-ID: EXio3oNJy4U
2018-03-13 12:54:35 -04:00
Alex Gaynor
c0e121d92a Bug 1445249 - Part 1 - Remove unused aProcessId parameter when deleting shared memory; r=jld
MozReview-Commit-ID: Cn0q46Q67hd
2018-03-13 10:07:18 -04:00
Bob Owen
9e2907fd96 Bug 1420922: Remove orphaned TARGET_SANDBOX_EXPORTS defines. r=dmajor 2017-11-27 16:07:15 +00:00
Gabriele Svelto
8a2f4eadb6 Bug 1402519 - Remove MOZ_CRASHREPORTER directives from ipc; r=billm
MozReview-Commit-ID: 4mDW7cJqHDn
2017-10-10 12:06:35 +02:00
shindli
f90a73f3c0 Backed out 16 changesets (bug 1402519) for conflicts during merge r=backout on a CLOSED TREE
Backed out changeset 07fcf163241a (bug 1402519)
Backed out changeset c6d2ad45d8e2 (bug 1402519)
Backed out changeset 8a3caca61294 (bug 1402519)
Backed out changeset 01425eae2c48 (bug 1402519)
Backed out changeset cf298d3815de (bug 1402519)
Backed out changeset e1964f4389cd (bug 1402519)
Backed out changeset f405337f3569 (bug 1402519)
Backed out changeset a76356fd3359 (bug 1402519)
Backed out changeset d3bb350d1c34 (bug 1402519)
Backed out changeset 9d3bfd9f932c (bug 1402519)
Backed out changeset e3dd6e5b073f (bug 1402519)
Backed out changeset e801b0c00134 (bug 1402519)
Backed out changeset 8a4139fa5dca (bug 1402519)
Backed out changeset 8d01c14ac1ca (bug 1402519)
Backed out changeset 24e0dcd01898 (bug 1402519)
Backed out changeset f8fdf450613f (bug 1402519)
2017-11-23 00:11:44 +02:00
Gabriele Svelto
10b487f193 Bug 1402519 - Remove MOZ_CRASHREPORTER directives from ipc; r=billm
MozReview-Commit-ID: 4mDW7cJqHDn
2017-10-10 12:06:35 +02:00
Chris Peterson
cad9118fcb Bug 1412048 - Replace some NS_RUNTIMEABORT(var) calls with MOZ_CRASH_UNSAFE_PRINTF. r=froydnj data-review=francois
MOZ_CRASH_UNSAFE_PRINTF causes data collection because crash strings are annotated to crash-stats and are publicly visible. Firefox data stewards must do data review on usages of this macro. However, all the crash strings this patch collects with MOZ_CRASH_UNSAFE_PRINTF are already collected with NS_RUNTIMEABORT.

MozReview-Commit-ID: 5ujXa9MHH5Z
2017-10-26 00:49:00 -07:00
Chris Peterson
b0a306e3a0 Bug 1412048 - Replace NS_RUNTIMEABORT(var) with MOZ_CRASH_UNSAFE_OOL(var). r=froydnj data-review=francois
And remove unreachable code after MOZ_CRASH_UNSAFE_OOL().

MOZ_CRASH_UNSAFE_OOL causes data collection because crash strings are annotated to crash-stats and are publicly visible. Firefox data stewards must do data review on usages of this macro. However, all the crash strings this patch collects with MOZ_CRASH_UNSAFE_OOL are already collected with NS_RUNTIMEABORT.

MozReview-Commit-ID: IHmJfuxXSqw
2017-10-24 23:38:38 -07:00
Nathan Froyd
0f5d614fd5 Bug 1397823 - part 3 - do a better job setting IPC::Message flags; r=kanru
The current IPC::Message constructor takes a large number of arguments,
three of which--the nesting level, the priority, and the
compression--are almost always constant by virtue of the vast majority
of Message construction being done by auto-generated IPDL code.  But
then we take these constant values into the Message constructor, we
check them for various values, and then based on those values, we
perform a bunch of bitfield operations to store flags based on those
values.  This is wasted work.

Furthermore, for replies to IPDL messages, we'll construct a Message
object, and then call mutating setters on the Message object that will
perform even more bitfield manipulations.  Again, these operations are
performing tasks at runtime that are the same every single time, and use
information we already have at compile time.

The impact of these extra operations is not large, maybe 15-30K of extra
code, depending on platform.  Nonetheless, we can easily make them go
away, and make everything cleaner to boot.

This patch adds a HeaderFlags class that encapsulates all the knowledge
about the various kinds of flags Message needs to know about.  We can
construct HeaderFlags objects with strongly-typed enum arguments for the
various kinds of flags, and the compiler can take care of folding all of
those flags together into a constant when possible (and it is possible
for all the IPDL-generated code that instantiates Messages).  The upshot
is that we do no unnecessary work in the Message constructor itself.  We
can also remove various mutating operations on Message, as those
operations were only there to support post-constructor flag twiddling,
which is no longer necessary.
2017-09-15 08:06:11 -04:00
Bill McCloskey
9ff525de73 Bug 1397468 - Shmem creation/destruction messages should not be SystemGroup (r=dvander)
It's important that shmem creation/destruction messages be ordered
correctly with respect to other messages that use shmems. For example,
if we create a shmem with ID 10 and then send a message that
references shmem 10, then the creation message must be handled before
the referencing message. If shmem creation/destruction messages go in
a separate queue from other messages, this ordering may not be
preserved.

Leaving shmem creation/destruction unlabeled will give us the correct
ordering. Eventually, though, we'll need to provide a solution that
doesn't bottleneck the event queue.

MozReview-Commit-ID: 88MrslRrfnh
2017-09-07 22:31:34 -07:00
Jan Varga
e704f1ba01 Bug 1283609 - Part 1: Add an IToplevelProtocol::Open overload that takes an nsIEventTarget; r=billm 2017-08-03 11:21:44 +02:00
Henry Chang
aa75e90328 Bug 1348591 - Support custom default segment buffer list size. r=billm
MozReview-Commit-ID: 2Nkj6RPx62f
2017-06-21 17:55:13 +08:00
Bill McCloskey
c6f3c8f6aa Bug 1363877 - Label IPC shmem messages as SystemGroup (r=dvander)
MozReview-Commit-ID: 3I5ny0wxVHI
2017-05-19 16:38:12 -07:00
Bill McCloskey
4285635b81 Revert "Bug 1363877 - Label IPC shmem messages as SystemGroup (r=dvander)" for valgrind failures
This reverts commit 1f7a7e259501b47a014959049e2ed069fe2fd9b8.
2017-05-17 12:58:35 -07:00
Bill McCloskey
c76b296a27 Bug 1363877 - Label IPC shmem messages as SystemGroup (r=dvander)
MozReview-Commit-ID: 3I5ny0wxVHI
2017-05-17 11:47:40 -07:00
Kevin Chen
007f189a47 Bug 1343754 - Add a function for replacing event target for actor and label PTexture; r=bevistseng,billm,nical
MozReview-Commit-ID: KGVBWsexkqC
2017-03-21 03:57:56 +00:00
Sebastian Hengst
0b131f5c2a Backed out changeset 25f2e9e2068d (bug 1343754) for crashing e.g. in dom/workers/test/serviceworkers/test_fetch_integrity.html. r=backout 2017-05-03 12:59:36 +02:00
Kevin Chen
d08e1cb76d Bug 1343754 - Add a function for replacing event target for actor and label PTexture; r=bevistseng,billm,nical
MozReview-Commit-ID: KGVBWsexkqC
2017-03-21 03:57:56 +00:00
Bill McCloskey
1f66e062b6 Bug 1333968 - Add GetSpecificMessageEventTarget method to change the event target for specific IPC messages (r=dvander)
MozReview-Commit-ID: EIyfNgKWCRo
2017-04-11 12:59:13 -07:00
Andrew McCreight
1922b09c8c Bug 1345897 - Use a separate error function for sentinel errors. r=kanru
Using a separate error function will distinguish mismatched sentinels
from other errors, such as array length problems.

MozReview-Commit-ID: Gl8swNhqLns
2017-03-09 13:37:55 -08:00
Bevis Tseng
4e1106d1ce Bug 1339014 - Add IProtocol::GetActorEventTarget() to Retrieve the EventTarget of the Actor if Set. r=billm
MozReview-Commit-ID: Czg5hxJBcYN
2017-02-13 14:04:58 +08:00
Tom Tromey
e90d95a3f9 Bug 1060419 - make AppendPrintf and nsPrintfCString use Printf.h, r=froydnj
MozReview-Commit-ID: 2E8FoiNxU8L
2016-12-14 09:32:21 -07:00
Bill McCloskey
35ca7dca87 Bug 1318506 - Assign a TabGroup to every PBrowser (r=mystor,ehsan)
Every new PBrowser, whether it's created by the parent or the child, needs
to get a TabGroup assigned to it. That way IPC messages for the PBrowser will
be dispatched to that TabGroup.

For new PBrowsers created by the child, we just create a new TabGroup or reuse
the opener's TabGroup.

For PBrowsers created by the parent, the child needs to intercept the
PBrowserConstructor message and assign a TabGroup immediately. PBrowsers created
by the parent never have an opener so we can always create a new TabGroup.

In both cases, the nsGlobalWindow::TabGroupOuter logic needs to be updated to
read the TabGroup out of the IPC code. Otherwise the DOM and IPC code will get
out of sync about TabGroups.

MozReview-Commit-ID: D5iEdgirfvK
2016-12-23 11:48:13 -08:00
Bill McCloskey
608aa783de Bug 1317844 - Allow an event target to be specified for each IPC actor (r=dvander)
MozReview-Commit-ID: 1xuWFTS8skZ
2016-11-21 17:03:39 -08:00
Bill McCloskey
643ccb9185 Revert "Bug 1317844 - Allow an event target to be specified for each IPC actor (r=dvander)"
This reverts commit 30396b9e84304ad7ee7d5a253ec886325a0f0cbe.
2016-11-21 16:49:44 -08:00
Bill McCloskey
efa3b9b596 Bug 1317844 - Allow an event target to be specified for each IPC actor (r=dvander)
MozReview-Commit-ID: 1xuWFTS8skZ
2016-11-21 16:43:15 -08:00
Bill McCloskey
2cd3220514 Bug 1317844 - Convert IDMap so it can store nsCOMPtr (r=dvander)
MozReview-Commit-ID: 5fCM4u1QZLE
2016-11-21 16:43:05 -08:00
Kan-Ru Chen
1b9dd22e2d Bug 1314254 - Add mozilla::ipc::IPCResult type and convert IPDL handlers to use new return type. r=billm
We will use the new type for the generated IPDL message handler
prototype to make sure correct error handling method is called.

MozReview-Commit-ID: AzVbApxFGZ0
2016-11-15 04:26:00 +01:00
Bill McCloskey
dc6e499466 Bug 792652 - Move over toplevel shmem code (r=dvander) 2016-11-08 15:22:54 -08:00
Bill McCloskey
662f07d6d4 Bug 792652 - Move toplevel actor map to IToplevelProtocol (r=dvander) 2016-11-08 15:22:53 -08:00