Commit b2eaaaf0 authored by lazyboy's avatar lazyboy Committed by Commit bot

Fix a race where backgroud page might ack an event before we're ready

    to receive the ack on browser/.

We perform a sanity check upon background page ACKing an event,
    by checking whether the ACKed message is expected to
    be ACKed. We store the pending ACK message IDs into a set
    |unacked_messages_|, but due to PostTask call to
    IncrementInFlightEventsOnUI, the event ack might arrive earlier
    than storing the pending message's ID. This results in incorectly
    kill the renderer process.

BUG=485440, 473821
Test=Rise Vision chrome app shouldn't crash anymore.

Review URL: https://codereview.chromium.org/1138643010

Cr-Commit-Position: refs/heads/master@{#330301}
parent 42b09087
...@@ -155,14 +155,21 @@ void EventRouter::DispatchEvent(IPC::Sender* ipc_sender, ...@@ -155,14 +155,21 @@ void EventRouter::DispatchEvent(IPC::Sender* ipc_sender,
const EventFilteringInfo& info) { const EventFilteringInfo& info) {
int event_id = g_extension_event_id.GetNext(); int event_id = g_extension_event_id.GetNext();
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
// This is called from WebRequest API.
// TODO(lazyboy): Skip this entirely: http://crbug.com/488747.
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&EventRouter::IncrementInFlightEventsOnUI,
browser_context_id, extension_id, event_id, event_name));
} else {
IncrementInFlightEventsOnUI(browser_context_id, extension_id, event_id,
event_name);
}
DispatchExtensionMessage(ipc_sender, browser_context_id, extension_id, DispatchExtensionMessage(ipc_sender, browser_context_id, extension_id,
event_id, event_name, event_args.get(), user_gesture, event_id, event_name, event_args.get(), user_gesture,
info); info);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&EventRouter::IncrementInFlightEventsOnUI, browser_context_id,
extension_id, event_id, event_name));
} }
EventRouter::EventRouter(BrowserContext* browser_context, EventRouter::EventRouter(BrowserContext* browser_context,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment