| 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/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
| 10 #include "content/browser/service_worker/embedded_worker_instance.h" | 10 #include "content/browser/service_worker/embedded_worker_instance.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 } // namespace | 81 } // namespace |
| 82 | 82 |
| 83 ServiceWorkerVersion::ServiceWorkerVersion( | 83 ServiceWorkerVersion::ServiceWorkerVersion( |
| 84 ServiceWorkerRegistration* registration, | 84 ServiceWorkerRegistration* registration, |
| 85 int64 version_id, | 85 int64 version_id, |
| 86 base::WeakPtr<ServiceWorkerContextCore> context) | 86 base::WeakPtr<ServiceWorkerContextCore> context) |
| 87 : version_id_(version_id), | 87 : version_id_(version_id), |
| 88 registration_id_(kInvalidServiceWorkerVersionId), | 88 registration_id_(kInvalidServiceWorkerVersionId), |
| 89 status_(NEW), | 89 status_(NEW), |
| 90 context_(context), | 90 context_(context), |
| 91 script_cache_map_(this), |
| 91 weak_factory_(this) { | 92 weak_factory_(this) { |
| 92 DCHECK(context_); | 93 DCHECK(context_); |
| 94 DCHECK(registration); |
| 93 if (registration) { | 95 if (registration) { |
| 94 registration_id_ = registration->id(); | 96 registration_id_ = registration->id(); |
| 95 script_url_ = registration->script_url(); | 97 script_url_ = registration->script_url(); |
| 96 scope_ = registration->pattern(); | 98 scope_ = registration->pattern(); |
| 97 } | 99 } |
| 98 context_->AddLiveVersion(this); | 100 context_->AddLiveVersion(this); |
| 99 embedded_worker_ = context_->embedded_worker_registry()->CreateWorker(); | 101 embedded_worker_ = context_->embedded_worker_registry()->CreateWorker(); |
| 100 embedded_worker_->AddListener(this); | 102 embedded_worker_->AddListener(this); |
| 101 } | 103 } |
| 102 | 104 |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 } | 346 } |
| 345 | 347 |
| 346 void ServiceWorkerVersion::AddListener(Listener* listener) { | 348 void ServiceWorkerVersion::AddListener(Listener* listener) { |
| 347 listeners_.AddObserver(listener); | 349 listeners_.AddObserver(listener); |
| 348 } | 350 } |
| 349 | 351 |
| 350 void ServiceWorkerVersion::RemoveListener(Listener* listener) { | 352 void ServiceWorkerVersion::RemoveListener(Listener* listener) { |
| 351 listeners_.RemoveObserver(listener); | 353 listeners_.RemoveObserver(listener); |
| 352 } | 354 } |
| 353 | 355 |
| 356 void ServiceWorkerVersion::NotifyMainScriptCached(bool success) { |
| 357 FOR_EACH_OBSERVER(Listener, listeners_, OnMainScriptCached(this, success)); |
| 358 } |
| 359 |
| 360 void ServiceWorkerVersion::NotifyAllScriptsCached(bool success) { |
| 361 FOR_EACH_OBSERVER(Listener, listeners_, OnAllScriptsCached(this, success)); |
| 362 } |
| 363 |
| 354 void ServiceWorkerVersion::OnStarted() { | 364 void ServiceWorkerVersion::OnStarted() { |
| 355 DCHECK_EQ(RUNNING, running_status()); | 365 DCHECK_EQ(RUNNING, running_status()); |
| 356 // Fire all start callbacks. | 366 // Fire all start callbacks. |
| 357 RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_OK); | 367 RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_OK); |
| 358 FOR_EACH_OBSERVER(Listener, listeners_, OnWorkerStarted(this)); | 368 FOR_EACH_OBSERVER(Listener, listeners_, OnWorkerStarted(this)); |
| 359 } | 369 } |
| 360 | 370 |
| 361 void ServiceWorkerVersion::OnStopped() { | 371 void ServiceWorkerVersion::OnStopped() { |
| 362 DCHECK_EQ(STOPPED, running_status()); | 372 DCHECK_EQ(STOPPED, running_status()); |
| 363 scoped_refptr<ServiceWorkerVersion> protect(this); | 373 scoped_refptr<ServiceWorkerVersion> protect(this); |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 543 if (!callback) { | 553 if (!callback) { |
| 544 NOTREACHED() << "Got unexpected message: " << request_id; | 554 NOTREACHED() << "Got unexpected message: " << request_id; |
| 545 return; | 555 return; |
| 546 } | 556 } |
| 547 | 557 |
| 548 scoped_refptr<ServiceWorkerVersion> protect(this); | 558 scoped_refptr<ServiceWorkerVersion> protect(this); |
| 549 callback->Run(SERVICE_WORKER_OK); | 559 callback->Run(SERVICE_WORKER_OK); |
| 550 sync_callbacks_.Remove(request_id); | 560 sync_callbacks_.Remove(request_id); |
| 551 } | 561 } |
| 552 | 562 |
| 553 void ServiceWorkerVersion::AddToScriptCache( | |
| 554 const GURL& url, int64 resource_id) { | |
| 555 DCHECK_EQ(kInvalidServiceWorkerResponseId, LookupInScriptCache(url)); | |
| 556 DCHECK_EQ(NEW, status_); | |
| 557 script_cache_map_[url] = resource_id; | |
| 558 } | |
| 559 | |
| 560 int64 ServiceWorkerVersion::LookupInScriptCache(const GURL& url) { | |
| 561 ResourceIDMap::const_iterator found = script_cache_map_.find(url); | |
| 562 if (found == script_cache_map_.end()) | |
| 563 return kInvalidServiceWorkerResponseId; | |
| 564 return found->second; | |
| 565 } | |
| 566 | |
| 567 void ServiceWorkerVersion::OnPostMessageToDocument( | 563 void ServiceWorkerVersion::OnPostMessageToDocument( |
| 568 int client_id, | 564 int client_id, |
| 569 const base::string16& message, | 565 const base::string16& message, |
| 570 const std::vector<int>& sent_message_port_ids) { | 566 const std::vector<int>& sent_message_port_ids) { |
| 571 ServiceWorkerProviderHost* provider_host = | 567 ServiceWorkerProviderHost* provider_host = |
| 572 controllee_by_id_.Lookup(client_id); | 568 controllee_by_id_.Lookup(client_id); |
| 573 if (!provider_host) { | 569 if (!provider_host) { |
| 574 // The client may already have been closed, just ignore. | 570 // The client may already have been closed, just ignore. |
| 575 return; | 571 return; |
| 576 } | 572 } |
| 577 provider_host->PostMessage(message, sent_message_port_ids); | 573 provider_host->PostMessage(message, sent_message_port_ids); |
| 578 } | 574 } |
| 579 | 575 |
| 580 } // namespace content | 576 } // namespace content |
| OLD | NEW |