Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(446)

Side by Side Diff: content/browser/service_worker/service_worker_version.cc

Issue 443593002: ServiceWorker: Move worker candidate process knowledge to ServiceWorkerProcessManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "content/browser/service_worker/embedded_worker_registry.h" 11 #include "content/browser/service_worker/embedded_worker_registry.h"
12 #include "content/browser/service_worker/service_worker_context_core.h" 12 #include "content/browser/service_worker/service_worker_context_core.h"
13 #include "content/browser/service_worker/service_worker_process_manager.h"
13 #include "content/browser/service_worker/service_worker_registration.h" 14 #include "content/browser/service_worker/service_worker_registration.h"
14 #include "content/browser/service_worker/service_worker_utils.h" 15 #include "content/browser/service_worker/service_worker_utils.h"
15 #include "content/common/service_worker/service_worker_messages.h" 16 #include "content/common/service_worker/service_worker_messages.h"
16 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
17 #include "content/public/common/content_switches.h" 18 #include "content/public/common/content_switches.h"
18 19
19 namespace content { 20 namespace content {
20 21
21 typedef ServiceWorkerVersion::StatusCallback StatusCallback; 22 typedef ServiceWorkerVersion::StatusCallback StatusCallback;
22 typedef ServiceWorkerVersion::MessageCallback MessageCallback; 23 typedef ServiceWorkerVersion::MessageCallback MessageCallback;
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 return ServiceWorkerVersionInfo( 150 return ServiceWorkerVersionInfo(
150 running_status(), 151 running_status(),
151 status(), 152 status(),
152 version_id(), 153 version_id(),
153 embedded_worker()->process_id(), 154 embedded_worker()->process_id(),
154 embedded_worker()->thread_id(), 155 embedded_worker()->thread_id(),
155 embedded_worker()->worker_devtools_agent_route_id()); 156 embedded_worker()->worker_devtools_agent_route_id());
156 } 157 }
157 158
158 void ServiceWorkerVersion::StartWorker(const StatusCallback& callback) { 159 void ServiceWorkerVersion::StartWorker(const StatusCallback& callback) {
159 StartWorkerWithCandidateProcesses(std::vector<int>(), false, callback); 160 StartWorker(false, callback);
160 } 161 }
161 162
162 void ServiceWorkerVersion::StartWorkerWithCandidateProcesses( 163 void ServiceWorkerVersion::StartWorker(
163 const std::vector<int>& possible_process_ids,
164 bool pause_after_download, 164 bool pause_after_download,
165 const StatusCallback& callback) { 165 const StatusCallback& callback) {
166 switch (running_status()) { 166 switch (running_status()) {
167 case RUNNING: 167 case RUNNING:
168 RunSoon(base::Bind(callback, SERVICE_WORKER_OK)); 168 RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
169 return; 169 return;
170 case STOPPING: 170 case STOPPING:
171 RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_START_WORKER_FAILED)); 171 RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_START_WORKER_FAILED));
172 return; 172 return;
173 case STOPPED: 173 case STOPPED:
174 case STARTING: 174 case STARTING:
175 start_callbacks_.push_back(callback); 175 start_callbacks_.push_back(callback);
176 if (running_status() == STOPPED) { 176 if (running_status() == STOPPED) {
177 embedded_worker_->Start( 177 embedded_worker_->Start(
178 version_id_, 178 version_id_,
179 scope_, 179 scope_,
180 script_url_, 180 script_url_,
181 pause_after_download, 181 pause_after_download,
182 possible_process_ids,
183 base::Bind(&ServiceWorkerVersion::RunStartWorkerCallbacksOnError, 182 base::Bind(&ServiceWorkerVersion::RunStartWorkerCallbacksOnError,
184 weak_factory_.GetWeakPtr())); 183 weak_factory_.GetWeakPtr()));
185 } 184 }
186 return; 185 return;
187 } 186 }
188 } 187 }
189 188
190 void ServiceWorkerVersion::StopWorker(const StatusCallback& callback) { 189 void ServiceWorkerVersion::StopWorker(const StatusCallback& callback) {
191 if (running_status() == STOPPED) { 190 if (running_status() == STOPPED) {
192 RunSoon(base::Bind(callback, SERVICE_WORKER_OK)); 191 RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 int request_id = push_callbacks_.Add(new StatusCallback(callback)); 360 int request_id = push_callbacks_.Add(new StatusCallback(callback));
362 ServiceWorkerStatusCode status = embedded_worker_->SendMessage( 361 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(
363 ServiceWorkerMsg_PushEvent(request_id, data)); 362 ServiceWorkerMsg_PushEvent(request_id, data));
364 if (status != SERVICE_WORKER_OK) { 363 if (status != SERVICE_WORKER_OK) {
365 push_callbacks_.Remove(request_id); 364 push_callbacks_.Remove(request_id);
366 RunSoon(base::Bind(callback, status)); 365 RunSoon(base::Bind(callback, status));
367 } 366 }
368 } 367 }
369 368
370 void ServiceWorkerVersion::AddProcessToWorker(int process_id) { 369 void ServiceWorkerVersion::AddProcessToWorker(int process_id) {
371 embedded_worker_->AddProcessReference(process_id); 370 if (context_ && context_->process_manager()) {
371 context_->process_manager()->AddScopeProcessReference(
372 scope_, process_id);
373 }
372 } 374 }
373 375
374 void ServiceWorkerVersion::RemoveProcessFromWorker(int process_id) { 376 void ServiceWorkerVersion::RemoveProcessFromWorker(int process_id) {
375 embedded_worker_->ReleaseProcessReference(process_id); 377 if (context_ && context_->process_manager()) {
376 } 378 context_->process_manager()->RemoveScopeProcessReference(
377 379 scope_, process_id);
378 bool ServiceWorkerVersion::HasProcessToRun() const { 380 }
379 return embedded_worker_->HasProcessToRun();
380 } 381 }
381 382
382 void ServiceWorkerVersion::AddControllee( 383 void ServiceWorkerVersion::AddControllee(
383 ServiceWorkerProviderHost* provider_host) { 384 ServiceWorkerProviderHost* provider_host) {
384 DCHECK(!ContainsKey(controllee_map_, provider_host)); 385 DCHECK(!ContainsKey(controllee_map_, provider_host));
385 int controllee_id = controllee_by_id_.Add(provider_host); 386 int controllee_id = controllee_by_id_.Add(provider_host);
386 controllee_map_[provider_host] = controllee_id; 387 controllee_map_[provider_host] = controllee_id;
387 AddProcessToWorker(provider_host->process_id()); 388 AddProcessToWorker(provider_host->process_id());
388 if (stop_worker_timer_.IsRunning()) 389 if (stop_worker_timer_.IsRunning())
389 stop_worker_timer_.Stop(); 390 stop_worker_timer_.Stop();
(...skipping 19 matching lines...) Expand all
409 void ServiceWorkerVersion::AddPotentialControllee( 410 void ServiceWorkerVersion::AddPotentialControllee(
410 ServiceWorkerProviderHost* provider_host) { 411 ServiceWorkerProviderHost* provider_host) {
411 AddProcessToWorker(provider_host->process_id()); 412 AddProcessToWorker(provider_host->process_id());
412 } 413 }
413 414
414 void ServiceWorkerVersion::RemovePotentialControllee( 415 void ServiceWorkerVersion::RemovePotentialControllee(
415 ServiceWorkerProviderHost* provider_host) { 416 ServiceWorkerProviderHost* provider_host) {
416 RemoveProcessFromWorker(provider_host->process_id()); 417 RemoveProcessFromWorker(provider_host->process_id());
417 } 418 }
418 419
420 void ServiceWorkerVersion::AddPendingProcesses(
421 const std::vector<int>& pending_processes) {
422 if (context_ && context_->process_manager() && !pending_processes.empty()) {
423 context_->process_manager()->AddScopePendingProcesses(
424 scope_, pending_processes);
425 }
426 }
427
419 void ServiceWorkerVersion::AddListener(Listener* listener) { 428 void ServiceWorkerVersion::AddListener(Listener* listener) {
420 listeners_.AddObserver(listener); 429 listeners_.AddObserver(listener);
421 } 430 }
422 431
423 void ServiceWorkerVersion::RemoveListener(Listener* listener) { 432 void ServiceWorkerVersion::RemoveListener(Listener* listener) {
424 listeners_.RemoveObserver(listener); 433 listeners_.RemoveObserver(listener);
425 } 434 }
426 435
427 void ServiceWorkerVersion::Doom() { 436 void ServiceWorkerVersion::Doom() {
428 if (is_doomed_) 437 if (is_doomed_)
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 SetStatus(REDUNDANT); 697 SetStatus(REDUNDANT);
689 StopWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 698 StopWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
690 if (!context_) 699 if (!context_)
691 return; 700 return;
692 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; 701 std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
693 script_cache_map_.GetResources(&resources); 702 script_cache_map_.GetResources(&resources);
694 context_->storage()->PurgeResources(resources); 703 context_->storage()->PurgeResources(resources);
695 } 704 }
696 705
697 } // namespace content 706 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698