OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/service_worker/service_worker_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "content/browser/service_worker/embedded_worker_instance.h" | 8 #include "content/browser/service_worker/embedded_worker_instance.h" |
9 #include "content/browser/service_worker/embedded_worker_registry.h" | 9 #include "content/browser/service_worker/embedded_worker_registry.h" |
10 #include "content/browser/service_worker/service_worker_context_core.h" | 10 #include "content/browser/service_worker/service_worker_context_core.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 | 159 |
160 } // namespace | 160 } // namespace |
161 | 161 |
162 ServiceWorkerVersion::ServiceWorkerVersion( | 162 ServiceWorkerVersion::ServiceWorkerVersion( |
163 ServiceWorkerRegistration* registration, | 163 ServiceWorkerRegistration* registration, |
164 EmbeddedWorkerRegistry* worker_registry, | 164 EmbeddedWorkerRegistry* worker_registry, |
165 int64 version_id) | 165 int64 version_id) |
166 : version_id_(version_id), | 166 : version_id_(version_id), |
167 status_(NEW), | 167 status_(NEW), |
168 is_shutdown_(false), | 168 is_shutdown_(false), |
| 169 requested_sync_events_(false), |
169 registration_(registration), | 170 registration_(registration), |
170 weak_factory_(this) { | 171 weak_factory_(this) { |
171 if (worker_registry) { | 172 if (worker_registry) { |
172 embedded_worker_ = worker_registry->CreateWorker(); | 173 embedded_worker_ = worker_registry->CreateWorker(); |
173 embedded_worker_->AddObserver(this); | 174 embedded_worker_->AddObserver(this); |
174 } | 175 } |
175 } | 176 } |
176 | 177 |
177 ServiceWorkerVersion::~ServiceWorkerVersion() { DCHECK(is_shutdown_); } | 178 ServiceWorkerVersion::~ServiceWorkerVersion() { DCHECK(is_shutdown_); } |
178 | 179 |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 const ServiceWorkerFetchRequest& request, | 337 const ServiceWorkerFetchRequest& request, |
337 const FetchCallback& callback) { | 338 const FetchCallback& callback) { |
338 DCHECK_EQ(ACTIVE, status()) << status(); | 339 DCHECK_EQ(ACTIVE, status()) << status(); |
339 SendMessageAndRegisterCallback( | 340 SendMessageAndRegisterCallback( |
340 ServiceWorkerMsg_FetchEvent(request), | 341 ServiceWorkerMsg_FetchEvent(request), |
341 base::Bind(&HandleFetchResponse, callback)); | 342 base::Bind(&HandleFetchResponse, callback)); |
342 } | 343 } |
343 | 344 |
344 void ServiceWorkerVersion::DispatchSyncEvent(const StatusCallback& callback) { | 345 void ServiceWorkerVersion::DispatchSyncEvent(const StatusCallback& callback) { |
345 DCHECK_EQ(ACTIVE, status()) << status(); | 346 DCHECK_EQ(ACTIVE, status()) << status(); |
| 347 // Don't send the event to ServiceWorkers that aren't interested. |
| 348 if (!requested_sync_events_) { |
| 349 callback.Run(SERVICE_WORKER_ERROR_ABORT); |
| 350 return; |
| 351 } |
| 352 |
346 SendMessageAndRegisterCallback( | 353 SendMessageAndRegisterCallback( |
347 ServiceWorkerMsg_SyncEvent(), | 354 ServiceWorkerMsg_SyncEvent(), |
348 base::Bind(&HandleSyncEventFinished, callback)); | 355 base::Bind(&HandleSyncEventFinished, callback)); |
349 } | 356 } |
350 | 357 |
351 void ServiceWorkerVersion::AddProcessToWorker(int process_id) { | 358 void ServiceWorkerVersion::AddProcessToWorker(int process_id) { |
352 DCHECK(!is_shutdown_); | 359 DCHECK(!is_shutdown_); |
353 embedded_worker_->AddProcessReference(process_id); | 360 embedded_worker_->AddProcessReference(process_id); |
354 } | 361 } |
355 | 362 |
(...skipping 21 matching lines...) Expand all Loading... |
377 // callbacks for events). | 384 // callbacks for events). |
378 // TODO(kinuko): Consider if we want to add queue+resend mechanism here. | 385 // TODO(kinuko): Consider if we want to add queue+resend mechanism here. |
379 IDMap<MessageCallback, IDMapOwnPointer>::iterator iter(&message_callbacks_); | 386 IDMap<MessageCallback, IDMapOwnPointer>::iterator iter(&message_callbacks_); |
380 while (!iter.IsAtEnd()) { | 387 while (!iter.IsAtEnd()) { |
381 iter.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, IPC::Message()); | 388 iter.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, IPC::Message()); |
382 iter.Advance(); | 389 iter.Advance(); |
383 } | 390 } |
384 message_callbacks_.Clear(); | 391 message_callbacks_.Clear(); |
385 } | 392 } |
386 | 393 |
387 void ServiceWorkerVersion::OnMessageReceived( | 394 void ServiceWorkerVersion::RequestSyncEvents(bool requested) { |
388 int request_id, const IPC::Message& message) { | 395 requested_sync_events_ = requested; |
| 396 } |
| 397 |
| 398 void ServiceWorkerVersion::OnMessageReceived(int request_id, |
| 399 const IPC::Message& message) { |
| 400 bool handled = true; |
| 401 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerVersion, message) |
| 402 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_RequestSyncEvents, |
| 403 RequestSyncEvents) |
| 404 IPC_MESSAGE_UNHANDLED(handled = false) |
| 405 IPC_END_MESSAGE_MAP() |
| 406 |
| 407 if (handled) |
| 408 return; |
| 409 |
389 MessageCallback* callback = message_callbacks_.Lookup(request_id); | 410 MessageCallback* callback = message_callbacks_.Lookup(request_id); |
390 if (callback) { | 411 if (callback) { |
391 callback->Run(SERVICE_WORKER_OK, message); | 412 callback->Run(SERVICE_WORKER_OK, message); |
392 message_callbacks_.Remove(request_id); | 413 message_callbacks_.Remove(request_id); |
393 return; | 414 return; |
394 } | 415 } |
395 NOTREACHED() << "Got unexpected message: " << request_id | 416 NOTREACHED() << "Got unexpected message: " << request_id << " " |
396 << " " << message.type(); | 417 << message.type(); |
397 } | 418 } |
398 | 419 |
399 } // namespace content | 420 } // namespace content |
OLD | NEW |