Bug 1283609 - Part 1: Add an IToplevelProtocol::Open overload that takes an nsIEventTarget; r=billm

This commit is contained in:
Jan Varga 2017-08-03 11:21:44 +02:00
parent 1b714b3485
commit 72d235da4a
4 changed files with 20 additions and 5 deletions

View File

@ -768,7 +768,7 @@ MessageChannel::Open(Transport* aTransport, MessageLoop* aIOLoop, Side aSide)
}
bool
MessageChannel::Open(MessageChannel *aTargetChan, MessageLoop *aTargetLoop, Side aSide)
MessageChannel::Open(MessageChannel *aTargetChan, nsIEventTarget *aEventTarget, Side aSide)
{
// Opens a connection to another thread in the same process.
@ -801,12 +801,12 @@ MessageChannel::Open(MessageChannel *aTargetChan, MessageLoop *aTargetLoop, Side
MonitorAutoLock lock(*mMonitor);
mChannelState = ChannelOpening;
aTargetLoop->PostTask(NewNonOwningRunnableMethod<MessageChannel*, Side>(
MOZ_ALWAYS_SUCCEEDS(aEventTarget->Dispatch(NewNonOwningRunnableMethod<MessageChannel*, Side>(
"ipc::MessageChannel::OnOpenAsSlave",
aTargetChan,
&MessageChannel::OnOpenAsSlave,
this,
oppSide));
oppSide)));
while (ChannelOpening == mChannelState)
mMonitor->Wait();

View File

@ -35,6 +35,8 @@
#include <stack>
#include <vector>
class nsIEventTarget;
namespace mozilla {
namespace ipc {
@ -146,7 +148,7 @@ class MessageChannel : HasResultCodes, MessageLoop::DestructionObserver
// For more details on the process of opening a channel between
// threads, see the extended comment on this function
// in MessageChannel.cpp.
bool Open(MessageChannel *aTargetChan, MessageLoop *aTargetLoop, Side aSide);
bool Open(MessageChannel *aTargetChan, nsIEventTarget *aEventTarget, Side aSide);
// Close the underlying transport channel.
void Close();

View File

@ -644,7 +644,16 @@ IToplevelProtocol::Open(MessageChannel* aChannel,
mozilla::ipc::Side aSide)
{
SetOtherProcessId(base::GetCurrentProcId());
return GetIPCChannel()->Open(aChannel, aMessageLoop, aSide);
return GetIPCChannel()->Open(aChannel, aMessageLoop->SerialEventTarget(), aSide);
}
bool
IToplevelProtocol::Open(MessageChannel* aChannel,
nsIEventTarget* aEventTarget,
mozilla::ipc::Side aSide)
{
SetOtherProcessId(base::GetCurrentProcId());
return GetIPCChannel()->Open(aChannel, aEventTarget, aSide);
}
void

View File

@ -294,6 +294,10 @@ public:
MessageLoop* aMessageLoop,
mozilla::ipc::Side aSide = mozilla::ipc::UnknownSide);
bool Open(MessageChannel* aChannel,
nsIEventTarget* aEventTarget,
mozilla::ipc::Side aSide = mozilla::ipc::UnknownSide);
void Close();
void SetReplyTimeoutMs(int32_t aTimeoutMs);