mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Backed out changeset efa6394f2a4a (bug 1453925) for mochitest failures on test_broadcastchannel_worker_alive.html. a=backout
This commit is contained in:
parent
6c47714197
commit
5748e6f517
@ -125,6 +125,48 @@ private:
|
||||
ErrorResult& mRv;
|
||||
};
|
||||
|
||||
class BCPostMessageRunnable final : public nsIRunnable,
|
||||
public nsICancelableRunnable
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
BCPostMessageRunnable(BroadcastChannelChild* aActor,
|
||||
BroadcastChannelMessage* aData)
|
||||
: mActor(aActor)
|
||||
, mData(aData)
|
||||
{
|
||||
MOZ_ASSERT(mActor);
|
||||
}
|
||||
|
||||
NS_IMETHOD Run() override
|
||||
{
|
||||
MOZ_ASSERT(mActor);
|
||||
if (mActor->IsActorDestroyed()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
ClonedMessageData message;
|
||||
mData->BuildClonedMessageDataForBackgroundChild(mActor->Manager(), message);
|
||||
mActor->SendPostMessage(message);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult Cancel() override
|
||||
{
|
||||
mActor = nullptr;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
~BCPostMessageRunnable() {}
|
||||
|
||||
RefPtr<BroadcastChannelChild> mActor;
|
||||
RefPtr<BroadcastChannelMessage> mData;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(BCPostMessageRunnable, nsICancelableRunnable, nsIRunnable)
|
||||
|
||||
class CloseRunnable final : public nsIRunnable,
|
||||
public nsICancelableRunnable
|
||||
{
|
||||
@ -356,6 +398,14 @@ BroadcastChannel::PostMessage(JSContext* aCx, JS::Handle<JS::Value> aMessage,
|
||||
return;
|
||||
}
|
||||
|
||||
PostMessageInternal(aCx, aMessage, aRv);
|
||||
}
|
||||
|
||||
void
|
||||
BroadcastChannel::PostMessageInternal(JSContext* aCx,
|
||||
JS::Handle<JS::Value> aMessage,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
RefPtr<BroadcastChannelMessage> data = new BroadcastChannelMessage();
|
||||
|
||||
data->Write(aCx, aMessage, aRv);
|
||||
@ -363,11 +413,20 @@ BroadcastChannel::PostMessage(JSContext* aCx, JS::Handle<JS::Value> aMessage,
|
||||
return;
|
||||
}
|
||||
|
||||
PostMessageData(data);
|
||||
}
|
||||
|
||||
void
|
||||
BroadcastChannel::PostMessageData(BroadcastChannelMessage* aData)
|
||||
{
|
||||
RemoveDocFromBFCache();
|
||||
|
||||
ClonedMessageData message;
|
||||
data->BuildClonedMessageDataForBackgroundChild(mActor->Manager(), message);
|
||||
mActor->SendPostMessage(message);
|
||||
RefPtr<BCPostMessageRunnable> runnable =
|
||||
new BCPostMessageRunnable(mActor, aData);
|
||||
|
||||
if (NS_FAILED(NS_DispatchToCurrentThread(runnable))) {
|
||||
NS_WARNING("Failed to dispatch to the current thread!");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -23,10 +23,10 @@ async function useBroadcastChannel(contentWindow) {
|
||||
count += 1;
|
||||
const name = `test_event_listener_leaks-${count}`;
|
||||
|
||||
let bc = new contentWindow.BroadcastChannel(name);
|
||||
let outer = new BroadcastChannel(name);
|
||||
outer.postMessage('foo');
|
||||
|
||||
let bc = new contentWindow.BroadcastChannel(name);
|
||||
await new Promise(resolve => {
|
||||
bc.onmessage = e => {
|
||||
contentWindow.messageCount += 1;
|
||||
|
Loading…
Reference in New Issue
Block a user