| 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]);
|
| + }
|
| +}
|
| +
|
| 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();
|
|
|