Chromium Code Reviews| Index: content/browser/service_worker/service_worker_dispatcher_host.cc |
| diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc |
| index 562fc9571cafa89b4f368e976f77d64af40dc6fe..ec6a8396914b9b9dfc235d4c2973855458566018 100644 |
| --- a/content/browser/service_worker/service_worker_dispatcher_host.cc |
| +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc |
| @@ -44,7 +44,9 @@ ServiceWorkerDispatcherHost::ServiceWorkerDispatcherHost( |
| : BrowserMessageFilter(kFilteredMessageClasses, |
| arraysize(kFilteredMessageClasses)), |
| render_process_id_(render_process_id), |
| - message_port_message_filter_(message_port_message_filter) {} |
| + message_port_message_filter_(message_port_message_filter), |
| + channel_ready_(false) { |
| +} |
| ServiceWorkerDispatcherHost::~ServiceWorkerDispatcherHost() { |
| if (context_) { |
| @@ -68,6 +70,16 @@ void ServiceWorkerDispatcherHost::Init( |
| render_process_id_, this); |
| } |
| +void ServiceWorkerDispatcherHost::OnFilterAdded(IPC::Channel* channel) { |
| + BrowserMessageFilter::OnFilterAdded(channel); |
| + channel_ready_ = true; |
| + std::vector<IPC::Message*> messages; |
| + pending_messages_.release(&messages); |
| + for (size_t i = 0; i < messages.size(); ++i) { |
| + BrowserMessageFilter::Send(messages[i]); |
| + } |
|
kinuko
2014/04/25 13:46:35
Thanks for fixing this part... (should all message
Jeffrey Yasskin
2014/04/26 03:52:19
According to jam@, "historically, message filters
|
| +} |
| + |
| void ServiceWorkerDispatcherHost::OnDestruct() const { |
| BrowserThread::DeleteOnIOThread::Destruct(this); |
| } |
| @@ -116,6 +128,17 @@ bool ServiceWorkerDispatcherHost::OnMessageReceived( |
| return handled; |
| } |
| +bool ServiceWorkerDispatcherHost::Send(IPC::Message* message) { |
| + if (channel_ready_) { |
| + BrowserMessageFilter::Send(message); |
| + // Don't bother passing through Send()'s result: it's not reliable. |
| + return true; |
| + } |
| + |
| + pending_messages_.push_back(message); |
| + return true; |
| +} |
| + |
| void ServiceWorkerDispatcherHost::RegisterServiceWorkerHandle( |
| scoped_ptr<ServiceWorkerHandle> handle) { |
| int handle_id = handle->handle_id(); |