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_provider_host.h" | 5 #include "content/browser/service_worker/service_worker_provider_host.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "content/browser/service_worker/service_worker_context_core.h" | 8 #include "content/browser/service_worker/service_worker_context_core.h" |
| 9 #include "content/browser/service_worker/service_worker_dispatcher_host.h" |
| 10 #include "content/browser/service_worker/service_worker_handle.h" |
9 #include "content/browser/service_worker/service_worker_utils.h" | 11 #include "content/browser/service_worker/service_worker_utils.h" |
10 #include "content/browser/service_worker/service_worker_version.h" | 12 #include "content/browser/service_worker/service_worker_version.h" |
11 | 13 |
12 namespace content { | 14 namespace content { |
13 | 15 |
14 ServiceWorkerProviderHost::ServiceWorkerProviderHost( | 16 ServiceWorkerProviderHost::ServiceWorkerProviderHost( |
15 int process_id, int provider_id, | 17 int process_id, int provider_id, |
16 base::WeakPtr<ServiceWorkerContextCore> context) | 18 base::WeakPtr<ServiceWorkerContextCore> context, |
| 19 ServiceWorkerDispatcherHost* dispatcher_host) |
17 : process_id_(process_id), | 20 : process_id_(process_id), |
18 provider_id_(provider_id), | 21 provider_id_(provider_id), |
19 context_(context) { | 22 context_(context), |
| 23 dispatcher_host_(dispatcher_host) { |
20 } | 24 } |
21 | 25 |
22 ServiceWorkerProviderHost::~ServiceWorkerProviderHost() { | 26 ServiceWorkerProviderHost::~ServiceWorkerProviderHost() { |
23 if (active_version_) | 27 if (active_version_) |
24 active_version_->RemoveControllee(this); | 28 active_version_->RemoveControllee(this); |
25 } | 29 } |
26 | 30 |
27 void ServiceWorkerProviderHost::AddScriptClient(int thread_id) { | 31 void ServiceWorkerProviderHost::AddScriptClient(int thread_id) { |
28 DCHECK(!ContainsKey(script_client_thread_ids_, thread_id)); | 32 DCHECK(!ContainsKey(script_client_thread_ids_, thread_id)); |
29 script_client_thread_ids_.insert(thread_id); | 33 script_client_thread_ids_.insert(thread_id); |
30 } | 34 } |
31 | 35 |
32 void ServiceWorkerProviderHost::RemoveScriptClient(int thread_id) { | 36 void ServiceWorkerProviderHost::RemoveScriptClient(int thread_id) { |
33 DCHECK(ContainsKey(script_client_thread_ids_, thread_id)); | 37 DCHECK(ContainsKey(script_client_thread_ids_, thread_id)); |
34 script_client_thread_ids_.erase(thread_id); | 38 script_client_thread_ids_.erase(thread_id); |
35 } | 39 } |
36 | 40 |
37 void ServiceWorkerProviderHost::SetActiveVersion( | 41 void ServiceWorkerProviderHost::SetActiveVersion( |
38 ServiceWorkerVersion* version) { | 42 ServiceWorkerVersion* version) { |
39 scoped_refptr<ServiceWorkerVersion> previous_version = active_version_; | 43 scoped_refptr<ServiceWorkerVersion> previous_version = active_version_; |
40 active_version_ = version; | 44 active_version_ = version; |
41 if (version) | 45 if (version) |
42 version->AddControllee(this); | 46 version->AddControllee(this); |
43 if (previous_version) | 47 if (previous_version) |
44 previous_version->RemoveControllee(this); | 48 previous_version->RemoveControllee(this); |
| 49 |
| 50 dispatcher_host_->RegisterServiceWorkerHandle( |
| 51 ServiceWorkerHandle::Create(context_, dispatcher_host_, version)); |
45 // TODO(kinuko): dispatch activechange event to the script clients. | 52 // TODO(kinuko): dispatch activechange event to the script clients. |
| 53 // dispatcher_host_->Send(ServiceWorkerMsg_ActiveChangeEvent(...)); |
46 } | 54 } |
47 | 55 |
48 void ServiceWorkerProviderHost::SetPendingVersion( | 56 void ServiceWorkerProviderHost::SetPendingVersion( |
49 ServiceWorkerVersion* version) { | 57 ServiceWorkerVersion* version) { |
50 pending_version_ = version; | 58 pending_version_ = version; |
| 59 |
| 60 dispatcher_host_->RegisterServiceWorkerHandle( |
| 61 ServiceWorkerHandle::Create(context_, dispatcher_host_, version)); |
51 // TODO(kinuko): dispatch pendingchange event to the script clients. | 62 // TODO(kinuko): dispatch pendingchange event to the script clients. |
| 63 // dispatcher_host_->Send(ServiceWorkerMsg_PendingChangeEvent(...)); |
52 } | 64 } |
53 | 65 |
54 bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) { | 66 bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) { |
55 if (!context_) | 67 if (!context_) |
56 return true; // System is shutting down. | 68 return true; // System is shutting down. |
57 if (active_version_) | 69 if (active_version_) |
58 return false; // Unexpected bad message. | 70 return false; // Unexpected bad message. |
59 | 71 |
60 ServiceWorkerVersion* live_version = context_->GetLiveVersion(version_id); | 72 ServiceWorkerVersion* live_version = context_->GetLiveVersion(version_id); |
61 if (!live_version) | 73 if (!live_version) |
(...skipping 20 matching lines...) Expand all Loading... |
82 return true; | 94 return true; |
83 | 95 |
84 // TODO(kinuko): Handle ServiceWorker cases. | 96 // TODO(kinuko): Handle ServiceWorker cases. |
85 // For now we always return false here, so that we don't handle | 97 // For now we always return false here, so that we don't handle |
86 // requests for ServiceWorker (either for the main or sub resources). | 98 // requests for ServiceWorker (either for the main or sub resources). |
87 | 99 |
88 return false; | 100 return false; |
89 } | 101 } |
90 | 102 |
91 } // namespace content | 103 } // namespace content |
OLD | NEW |