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/embedded_worker_registry.h" | 5 #include "content/browser/service_worker/embedded_worker_registry.h" |
6 | 6 |
7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "content/browser/renderer_host/render_widget_helper.h" | 9 #include "content/browser/renderer_host/render_widget_helper.h" |
10 #include "content/browser/service_worker/embedded_worker_instance.h" | 10 #include "content/browser/service_worker/embedded_worker_instance.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
46 int process_id, int embedded_worker_id) { | 46 int process_id, int embedded_worker_id) { |
47 return Send(process_id, | 47 return Send(process_id, |
48 new EmbeddedWorkerMsg_StopWorker(embedded_worker_id)); | 48 new EmbeddedWorkerMsg_StopWorker(embedded_worker_id)); |
49 } | 49 } |
50 | 50 |
51 bool EmbeddedWorkerRegistry::OnMessageReceived(const IPC::Message& message) { | 51 bool EmbeddedWorkerRegistry::OnMessageReceived(const IPC::Message& message) { |
52 // TODO(kinuko): Move all EmbeddedWorker message handling from | 52 // TODO(kinuko): Move all EmbeddedWorker message handling from |
53 // ServiceWorkerDispatcherHost. | 53 // ServiceWorkerDispatcherHost. |
54 | 54 |
55 WorkerInstanceMap::iterator found = worker_map_.find(message.routing_id()); | 55 WorkerInstanceMap::iterator found = worker_map_.find(message.routing_id()); |
56 if (found == worker_map_.end()) { | 56 DCHECK(found != worker_map_.end()); |
57 LOG(ERROR) << "Worker " << message.routing_id() << " not registered"; | 57 if (found == worker_map_.end()) |
falken
2014/11/06 02:07:54
Typically we should not have constructions of the
| |
58 return false; | 58 return false; |
59 } | |
60 return found->second->OnMessageReceived(message); | 59 return found->second->OnMessageReceived(message); |
61 } | 60 } |
62 | 61 |
63 void EmbeddedWorkerRegistry::Shutdown() { | 62 void EmbeddedWorkerRegistry::Shutdown() { |
64 for (WorkerInstanceMap::iterator it = worker_map_.begin(); | 63 for (WorkerInstanceMap::iterator it = worker_map_.begin(); |
65 it != worker_map_.end(); | 64 it != worker_map_.end(); |
66 ++it) { | 65 ++it) { |
67 it->second->Stop(); | 66 it->second->Stop(); |
68 } | 67 } |
69 } | 68 } |
70 | 69 |
71 void EmbeddedWorkerRegistry::OnWorkerReadyForInspection( | 70 void EmbeddedWorkerRegistry::OnWorkerReadyForInspection( |
72 int process_id, | 71 int process_id, |
73 int embedded_worker_id) { | 72 int embedded_worker_id) { |
74 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 73 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
75 if (found == worker_map_.end()) { | 74 DCHECK(found != worker_map_.end()); |
76 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 75 DCHECK_EQ(found->second->process_id(), process_id); |
76 if (found == worker_map_.end() || found->second->process_id() != process_id) | |
77 return; | 77 return; |
78 } | |
79 if (found->second->process_id() != process_id) { | |
80 LOG(ERROR) << "Incorrect embedded_worker_id"; | |
81 return; | |
82 } | |
83 found->second->OnReadyForInspection(); | 78 found->second->OnReadyForInspection(); |
84 } | 79 } |
85 | 80 |
86 void EmbeddedWorkerRegistry::OnWorkerScriptLoaded(int process_id, | 81 void EmbeddedWorkerRegistry::OnWorkerScriptLoaded(int process_id, |
87 int embedded_worker_id) { | 82 int embedded_worker_id) { |
88 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 83 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
89 if (found == worker_map_.end()) { | 84 DCHECK(found != worker_map_.end()); |
90 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 85 DCHECK_EQ(found->second->process_id(), process_id); |
86 if (found == worker_map_.end() || found->second->process_id() != process_id) | |
91 return; | 87 return; |
92 } | |
93 if (found->second->process_id() != process_id) { | |
94 LOG(ERROR) << "Incorrect embedded_worker_id"; | |
95 return; | |
96 } | |
97 found->second->OnScriptLoaded(); | 88 found->second->OnScriptLoaded(); |
98 } | 89 } |
99 | 90 |
100 void EmbeddedWorkerRegistry::OnWorkerScriptLoadFailed(int process_id, | 91 void EmbeddedWorkerRegistry::OnWorkerScriptLoadFailed(int process_id, |
101 int embedded_worker_id) { | 92 int embedded_worker_id) { |
102 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 93 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
103 if (found == worker_map_.end()) { | 94 DCHECK(found != worker_map_.end()); |
104 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 95 DCHECK_EQ(found->second->process_id(), process_id); |
96 if (found == worker_map_.end() || found->second->process_id() != process_id) | |
105 return; | 97 return; |
106 } | |
107 if (found->second->process_id() != process_id) { | |
108 LOG(ERROR) << "Incorrect embedded_worker_id"; | |
109 return; | |
110 } | |
111 found->second->OnScriptLoadFailed(); | 98 found->second->OnScriptLoadFailed(); |
112 } | 99 } |
113 | 100 |
114 void EmbeddedWorkerRegistry::OnWorkerStarted( | 101 void EmbeddedWorkerRegistry::OnWorkerStarted( |
115 int process_id, int thread_id, int embedded_worker_id) { | 102 int process_id, int thread_id, int embedded_worker_id) { |
116 DCHECK(!ContainsKey(worker_process_map_, process_id) || | 103 DCHECK(!ContainsKey(worker_process_map_, process_id) || |
117 worker_process_map_[process_id].count(embedded_worker_id) == 0); | 104 worker_process_map_[process_id].count(embedded_worker_id) == 0); |
118 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 105 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
119 if (found == worker_map_.end()) { | 106 DCHECK(found != worker_map_.end()); |
120 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 107 DCHECK_EQ(found->second->process_id(), process_id); |
108 if (found == worker_map_.end() || found->second->process_id() != process_id) | |
121 return; | 109 return; |
122 } | |
123 if (found->second->process_id() != process_id) { | |
124 LOG(ERROR) << "Incorrect embedded_worker_id"; | |
125 return; | |
126 } | |
127 worker_process_map_[process_id].insert(embedded_worker_id); | 110 worker_process_map_[process_id].insert(embedded_worker_id); |
128 found->second->OnStarted(thread_id); | 111 found->second->OnStarted(thread_id); |
129 } | 112 } |
130 | 113 |
131 void EmbeddedWorkerRegistry::OnWorkerStopped( | 114 void EmbeddedWorkerRegistry::OnWorkerStopped( |
132 int process_id, int embedded_worker_id) { | 115 int process_id, int embedded_worker_id) { |
133 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 116 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
134 if (found == worker_map_.end()) { | 117 DCHECK(found != worker_map_.end()); |
135 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 118 DCHECK_EQ(found->second->process_id(), process_id); |
119 if (found == worker_map_.end() || found->second->process_id() != process_id) | |
136 return; | 120 return; |
137 } | |
138 if (found->second->process_id() != process_id) { | |
139 LOG(ERROR) << "Incorrect embedded_worker_id"; | |
140 return; | |
141 } | |
142 worker_process_map_[process_id].erase(embedded_worker_id); | 121 worker_process_map_[process_id].erase(embedded_worker_id); |
143 found->second->OnStopped(); | 122 found->second->OnStopped(); |
144 } | 123 } |
145 | 124 |
146 void EmbeddedWorkerRegistry::OnPausedAfterDownload( | 125 void EmbeddedWorkerRegistry::OnPausedAfterDownload( |
147 int process_id, int embedded_worker_id) { | 126 int process_id, int embedded_worker_id) { |
148 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 127 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
149 if (found == worker_map_.end()) { | 128 DCHECK(found != worker_map_.end()); |
150 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 129 DCHECK_EQ(found->second->process_id(), process_id); |
130 if (found == worker_map_.end() || found->second->process_id() != process_id) | |
151 return; | 131 return; |
152 } | |
153 if (found->second->process_id() != process_id) { | |
154 LOG(ERROR) << "Incorrect embedded_worker_id"; | |
155 return; | |
156 } | |
157 found->second->OnPausedAfterDownload(); | 132 found->second->OnPausedAfterDownload(); |
158 } | 133 } |
159 | 134 |
160 void EmbeddedWorkerRegistry::OnReportException( | 135 void EmbeddedWorkerRegistry::OnReportException( |
161 int embedded_worker_id, | 136 int embedded_worker_id, |
162 const base::string16& error_message, | 137 const base::string16& error_message, |
163 int line_number, | 138 int line_number, |
164 int column_number, | 139 int column_number, |
165 const GURL& source_url) { | 140 const GURL& source_url) { |
166 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 141 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
167 if (found == worker_map_.end()) { | 142 DCHECK(found != worker_map_.end()); |
168 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 143 if (found == worker_map_.end()) |
169 return; | 144 return; |
170 } | |
171 found->second->OnReportException( | 145 found->second->OnReportException( |
172 error_message, line_number, column_number, source_url); | 146 error_message, line_number, column_number, source_url); |
173 } | 147 } |
174 | 148 |
175 void EmbeddedWorkerRegistry::OnReportConsoleMessage( | 149 void EmbeddedWorkerRegistry::OnReportConsoleMessage( |
176 int embedded_worker_id, | 150 int embedded_worker_id, |
177 int source_identifier, | 151 int source_identifier, |
178 int message_level, | 152 int message_level, |
179 const base::string16& message, | 153 const base::string16& message, |
180 int line_number, | 154 int line_number, |
181 const GURL& source_url) { | 155 const GURL& source_url) { |
182 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); | 156 WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
183 if (found == worker_map_.end()) { | 157 DCHECK(found != worker_map_.end()); |
184 LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; | 158 if (found == worker_map_.end()) |
185 return; | 159 return; |
186 } | |
187 found->second->OnReportConsoleMessage( | 160 found->second->OnReportConsoleMessage( |
188 source_identifier, message_level, message, line_number, source_url); | 161 source_identifier, message_level, message, line_number, source_url); |
189 } | 162 } |
190 | 163 |
191 void EmbeddedWorkerRegistry::AddChildProcessSender( | 164 void EmbeddedWorkerRegistry::AddChildProcessSender( |
192 int process_id, IPC::Sender* sender) { | 165 int process_id, IPC::Sender* sender) { |
193 process_sender_map_[process_id] = sender; | 166 process_sender_map_[process_id] = sender; |
194 DCHECK(!ContainsKey(worker_process_map_, process_id)); | 167 DCHECK(!ContainsKey(worker_process_map_, process_id)); |
195 } | 168 } |
196 | 169 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
264 } | 237 } |
265 | 238 |
266 void EmbeddedWorkerRegistry::RemoveWorker(int process_id, | 239 void EmbeddedWorkerRegistry::RemoveWorker(int process_id, |
267 int embedded_worker_id) { | 240 int embedded_worker_id) { |
268 DCHECK(ContainsKey(worker_map_, embedded_worker_id)); | 241 DCHECK(ContainsKey(worker_map_, embedded_worker_id)); |
269 worker_map_.erase(embedded_worker_id); | 242 worker_map_.erase(embedded_worker_id); |
270 worker_process_map_.erase(process_id); | 243 worker_process_map_.erase(process_id); |
271 } | 244 } |
272 | 245 |
273 } // namespace content | 246 } // namespace content |
OLD | NEW |