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

Side by Side Diff: content/browser/shared_worker/shared_worker_service_impl.cc

Issue 1874893002: Convert //content/browser from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/shared_worker/shared_worker_service_impl.h" 5 #include "content/browser/shared_worker/shared_worker_service_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8
8 #include <algorithm> 9 #include <algorithm>
9 #include <iterator> 10 #include <iterator>
10 #include <set> 11 #include <set>
11 #include <utility> 12 #include <utility>
12 #include <vector> 13 #include <vector>
13 14
14 #include "base/callback.h" 15 #include "base/callback.h"
15 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/memory/ptr_util.h"
16 #include "base/memory/ref_counted.h" 18 #include "base/memory/ref_counted.h"
17 #include "content/browser/devtools/shared_worker_devtools_manager.h" 19 #include "content/browser/devtools/shared_worker_devtools_manager.h"
18 #include "content/browser/renderer_host/render_process_host_impl.h" 20 #include "content/browser/renderer_host/render_process_host_impl.h"
19 #include "content/browser/shared_worker/shared_worker_host.h" 21 #include "content/browser/shared_worker/shared_worker_host.h"
20 #include "content/browser/shared_worker/shared_worker_instance.h" 22 #include "content/browser/shared_worker/shared_worker_instance.h"
21 #include "content/browser/shared_worker/shared_worker_message_filter.h" 23 #include "content/browser/shared_worker/shared_worker_message_filter.h"
22 #include "content/browser/shared_worker/worker_document_set.h" 24 #include "content/browser/shared_worker/worker_document_set.h"
23 #include "content/common/view_messages.h" 25 #include "content/common/view_messages.h"
24 #include "content/common/worker_messages.h" 26 #include "content/common/worker_messages.h"
25 #include "content/public/browser/browser_thread.h" 27 #include "content/public/browser/browser_thread.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 SharedWorkerMessageFilter* const filter; 124 SharedWorkerMessageFilter* const filter;
123 const int route_id; 125 const int route_id;
124 const unsigned long long document_id; 126 const unsigned long long document_id;
125 const int render_process_id; 127 const int render_process_id;
126 const int render_frame_route_id; 128 const int render_frame_route_id;
127 }; 129 };
128 130
129 typedef ScopedVector<SharedWorkerPendingRequest> SharedWorkerPendingRequests; 131 typedef ScopedVector<SharedWorkerPendingRequest> SharedWorkerPendingRequests;
130 132
131 explicit SharedWorkerPendingInstance( 133 explicit SharedWorkerPendingInstance(
132 scoped_ptr<SharedWorkerInstance> instance) 134 std::unique_ptr<SharedWorkerInstance> instance)
133 : instance_(std::move(instance)) {} 135 : instance_(std::move(instance)) {}
134 ~SharedWorkerPendingInstance() {} 136 ~SharedWorkerPendingInstance() {}
135 SharedWorkerInstance* instance() { return instance_.get(); } 137 SharedWorkerInstance* instance() { return instance_.get(); }
136 SharedWorkerInstance* release_instance() { return instance_.release(); } 138 SharedWorkerInstance* release_instance() { return instance_.release(); }
137 SharedWorkerPendingRequests* requests() { return &requests_; } 139 SharedWorkerPendingRequests* requests() { return &requests_; }
138 SharedWorkerMessageFilter* FindFilter(int process_id) { 140 SharedWorkerMessageFilter* FindFilter(int process_id) {
139 for (size_t i = 0; i < requests_.size(); ++i) { 141 for (size_t i = 0; i < requests_.size(); ++i) {
140 if (requests_[i]->render_process_id == process_id) 142 if (requests_[i]->render_process_id == process_id)
141 return requests_[i]->filter; 143 return requests_[i]->filter;
142 } 144 }
143 return NULL; 145 return NULL;
144 } 146 }
145 void AddRequest(scoped_ptr<SharedWorkerPendingRequest> request_info) { 147 void AddRequest(std::unique_ptr<SharedWorkerPendingRequest> request_info) {
146 requests_.push_back(request_info.release()); 148 requests_.push_back(request_info.release());
147 } 149 }
148 void RemoveRequest(int process_id) { 150 void RemoveRequest(int process_id) {
149 for (SharedWorkerPendingRequests::iterator request_itr = requests_.begin(); 151 for (SharedWorkerPendingRequests::iterator request_itr = requests_.begin();
150 request_itr != requests_.end();) { 152 request_itr != requests_.end();) {
151 if ((*request_itr)->render_process_id == process_id) 153 if ((*request_itr)->render_process_id == process_id)
152 request_itr = requests_.erase(request_itr); 154 request_itr = requests_.erase(request_itr);
153 else 155 else
154 ++request_itr; 156 ++request_itr;
155 } 157 }
156 } 158 }
157 void RegisterToSharedWorkerHost(SharedWorkerHost* host) { 159 void RegisterToSharedWorkerHost(SharedWorkerHost* host) {
158 for (size_t i = 0; i < requests_.size(); ++i) { 160 for (size_t i = 0; i < requests_.size(); ++i) {
159 SharedWorkerPendingRequest* request = requests_[i]; 161 SharedWorkerPendingRequest* request = requests_[i];
160 host->AddFilter(request->filter, request->route_id); 162 host->AddFilter(request->filter, request->route_id);
161 host->worker_document_set()->Add(request->filter, 163 host->worker_document_set()->Add(request->filter,
162 request->document_id, 164 request->document_id,
163 request->render_process_id, 165 request->render_process_id,
164 request->render_frame_route_id); 166 request->render_frame_route_id);
165 } 167 }
166 } 168 }
167 void SendWorkerCreatedMessages() { 169 void SendWorkerCreatedMessages() {
168 for (size_t i = 0; i < requests_.size(); ++i) { 170 for (size_t i = 0; i < requests_.size(); ++i) {
169 SharedWorkerPendingRequest* request = requests_[i]; 171 SharedWorkerPendingRequest* request = requests_[i];
170 request->filter->Send(new ViewMsg_WorkerCreated(request->route_id)); 172 request->filter->Send(new ViewMsg_WorkerCreated(request->route_id));
171 } 173 }
172 } 174 }
173 175
174 private: 176 private:
175 scoped_ptr<SharedWorkerInstance> instance_; 177 std::unique_ptr<SharedWorkerInstance> instance_;
176 SharedWorkerPendingRequests requests_; 178 SharedWorkerPendingRequests requests_;
177 DISALLOW_COPY_AND_ASSIGN(SharedWorkerPendingInstance); 179 DISALLOW_COPY_AND_ASSIGN(SharedWorkerPendingInstance);
178 }; 180 };
179 181
180 class SharedWorkerServiceImpl::SharedWorkerReserver 182 class SharedWorkerServiceImpl::SharedWorkerReserver
181 : public base::RefCountedThreadSafe<SharedWorkerReserver> { 183 : public base::RefCountedThreadSafe<SharedWorkerReserver> {
182 public: 184 public:
183 SharedWorkerReserver(int pending_instance_id, 185 SharedWorkerReserver(int pending_instance_id,
184 int worker_process_id, 186 int worker_process_id,
185 int worker_route_id, 187 int worker_route_id,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 285
284 void SharedWorkerServiceImpl::CreateWorker( 286 void SharedWorkerServiceImpl::CreateWorker(
285 const ViewHostMsg_CreateWorker_Params& params, 287 const ViewHostMsg_CreateWorker_Params& params,
286 int route_id, 288 int route_id,
287 SharedWorkerMessageFilter* filter, 289 SharedWorkerMessageFilter* filter,
288 ResourceContext* resource_context, 290 ResourceContext* resource_context,
289 const WorkerStoragePartitionId& partition_id, 291 const WorkerStoragePartitionId& partition_id,
290 blink::WebWorkerCreationError* creation_error) { 292 blink::WebWorkerCreationError* creation_error) {
291 DCHECK_CURRENTLY_ON(BrowserThread::IO); 293 DCHECK_CURRENTLY_ON(BrowserThread::IO);
292 *creation_error = blink::WebWorkerCreationErrorNone; 294 *creation_error = blink::WebWorkerCreationErrorNone;
293 scoped_ptr<SharedWorkerInstance> instance(new SharedWorkerInstance( 295 std::unique_ptr<SharedWorkerInstance> instance(new SharedWorkerInstance(
294 params.url, params.name, params.content_security_policy, 296 params.url, params.name, params.content_security_policy,
295 params.security_policy_type, params.creation_address_space, 297 params.security_policy_type, params.creation_address_space,
296 resource_context, partition_id, params.creation_context_type)); 298 resource_context, partition_id, params.creation_context_type));
297 scoped_ptr<SharedWorkerPendingInstance::SharedWorkerPendingRequest> request( 299 std::unique_ptr<SharedWorkerPendingInstance::SharedWorkerPendingRequest>
298 new SharedWorkerPendingInstance::SharedWorkerPendingRequest( 300 request(new SharedWorkerPendingInstance::SharedWorkerPendingRequest(
299 filter, 301 filter, route_id, params.document_id, filter->render_process_id(),
300 route_id,
301 params.document_id,
302 filter->render_process_id(),
303 params.render_frame_route_id)); 302 params.render_frame_route_id));
304 if (SharedWorkerPendingInstance* pending = FindPendingInstance(*instance)) { 303 if (SharedWorkerPendingInstance* pending = FindPendingInstance(*instance)) {
305 if (params.url != pending->instance()->url()) { 304 if (params.url != pending->instance()->url()) {
306 *creation_error = blink::WebWorkerCreationErrorURLMismatch; 305 *creation_error = blink::WebWorkerCreationErrorURLMismatch;
307 return; 306 return;
308 } 307 }
309 if (params.creation_context_type != 308 if (params.creation_context_type !=
310 pending->instance()->creation_context_type()) { 309 pending->instance()->creation_context_type()) {
311 *creation_error = blink::WebWorkerCreationErrorSecureContextMismatch; 310 *creation_error = blink::WebWorkerCreationErrorSecureContextMismatch;
312 } 311 }
313 pending->AddRequest(std::move(request)); 312 pending->AddRequest(std::move(request));
314 return; 313 return;
315 } 314 }
316 scoped_ptr<SharedWorkerPendingInstance> pending_instance( 315 std::unique_ptr<SharedWorkerPendingInstance> pending_instance(
317 new SharedWorkerPendingInstance(std::move(instance))); 316 new SharedWorkerPendingInstance(std::move(instance)));
318 pending_instance->AddRequest(std::move(request)); 317 pending_instance->AddRequest(std::move(request));
319 ReserveRenderProcessToCreateWorker(std::move(pending_instance), 318 ReserveRenderProcessToCreateWorker(std::move(pending_instance),
320 creation_error); 319 creation_error);
321 } 320 }
322 321
323 void SharedWorkerServiceImpl::ForwardToWorker( 322 void SharedWorkerServiceImpl::ForwardToWorker(
324 const IPC::Message& message, 323 const IPC::Message& message,
325 SharedWorkerMessageFilter* filter) { 324 SharedWorkerMessageFilter* filter) {
326 for (WorkerHostMap::const_iterator iter = worker_hosts_.begin(); 325 for (WorkerHostMap::const_iterator iter = worker_hosts_.begin();
(...skipping 20 matching lines...) Expand all
347 SharedWorkerMessageFilter* filter) { 346 SharedWorkerMessageFilter* filter) {
348 ScopedWorkerDependencyChecker checker(this); 347 ScopedWorkerDependencyChecker checker(this);
349 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id)) 348 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
350 host->WorkerContextClosed(); 349 host->WorkerContextClosed();
351 } 350 }
352 351
353 void SharedWorkerServiceImpl::WorkerContextDestroyed( 352 void SharedWorkerServiceImpl::WorkerContextDestroyed(
354 int worker_route_id, 353 int worker_route_id,
355 SharedWorkerMessageFilter* filter) { 354 SharedWorkerMessageFilter* filter) {
356 ScopedWorkerDependencyChecker checker(this); 355 ScopedWorkerDependencyChecker checker(this);
357 scoped_ptr<SharedWorkerHost> host = 356 std::unique_ptr<SharedWorkerHost> host = worker_hosts_.take_and_erase(
358 worker_hosts_.take_and_erase(std::make_pair(filter->render_process_id(), 357 std::make_pair(filter->render_process_id(), worker_route_id));
359 worker_route_id));
360 if (!host) 358 if (!host)
361 return; 359 return;
362 host->WorkerContextDestroyed(); 360 host->WorkerContextDestroyed();
363 } 361 }
364 362
365 void SharedWorkerServiceImpl::WorkerReadyForInspection( 363 void SharedWorkerServiceImpl::WorkerReadyForInspection(
366 int worker_route_id, 364 int worker_route_id,
367 SharedWorkerMessageFilter* filter) { 365 SharedWorkerMessageFilter* filter) {
368 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id)) 366 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
369 host->WorkerReadyForInspection(); 367 host->WorkerReadyForInspection();
370 } 368 }
371 369
372 void SharedWorkerServiceImpl::WorkerScriptLoaded( 370 void SharedWorkerServiceImpl::WorkerScriptLoaded(
373 int worker_route_id, 371 int worker_route_id,
374 SharedWorkerMessageFilter* filter) { 372 SharedWorkerMessageFilter* filter) {
375 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id)) 373 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
376 host->WorkerScriptLoaded(); 374 host->WorkerScriptLoaded();
377 } 375 }
378 376
379 void SharedWorkerServiceImpl::WorkerScriptLoadFailed( 377 void SharedWorkerServiceImpl::WorkerScriptLoadFailed(
380 int worker_route_id, 378 int worker_route_id,
381 SharedWorkerMessageFilter* filter) { 379 SharedWorkerMessageFilter* filter) {
382 ScopedWorkerDependencyChecker checker(this); 380 ScopedWorkerDependencyChecker checker(this);
383 scoped_ptr<SharedWorkerHost> host = 381 std::unique_ptr<SharedWorkerHost> host = worker_hosts_.take_and_erase(
384 worker_hosts_.take_and_erase(std::make_pair(filter->render_process_id(), 382 std::make_pair(filter->render_process_id(), worker_route_id));
385 worker_route_id));
386 if (!host) 383 if (!host)
387 return; 384 return;
388 host->WorkerScriptLoadFailed(); 385 host->WorkerScriptLoadFailed();
389 } 386 }
390 387
391 void SharedWorkerServiceImpl::WorkerConnected( 388 void SharedWorkerServiceImpl::WorkerConnected(
392 int message_port_id, 389 int message_port_id,
393 int worker_route_id, 390 int worker_route_id,
394 SharedWorkerMessageFilter* filter) { 391 SharedWorkerMessageFilter* filter) {
395 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id)) 392 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
396 host->WorkerConnected(message_port_id); 393 host->WorkerConnected(message_port_id);
397 } 394 }
398 395
399 void SharedWorkerServiceImpl::AllowFileSystem( 396 void SharedWorkerServiceImpl::AllowFileSystem(
400 int worker_route_id, 397 int worker_route_id,
401 const GURL& url, 398 const GURL& url,
402 IPC::Message* reply_msg, 399 IPC::Message* reply_msg,
403 SharedWorkerMessageFilter* filter) { 400 SharedWorkerMessageFilter* filter) {
404 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id)) { 401 if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id)) {
405 host->AllowFileSystem(url, make_scoped_ptr(reply_msg)); 402 host->AllowFileSystem(url, base::WrapUnique(reply_msg));
406 } else { 403 } else {
407 filter->Send(reply_msg); 404 filter->Send(reply_msg);
408 return; 405 return;
409 } 406 }
410 } 407 }
411 408
412 void SharedWorkerServiceImpl::AllowIndexedDB( 409 void SharedWorkerServiceImpl::AllowIndexedDB(
413 int worker_route_id, 410 int worker_route_id,
414 const GURL& url, 411 const GURL& url,
415 const base::string16& name, 412 const base::string16& name,
(...skipping 10 matching lines...) Expand all
426 ScopedWorkerDependencyChecker checker(this); 423 ScopedWorkerDependencyChecker checker(this);
427 std::vector<ProcessRouteIdPair> remove_list; 424 std::vector<ProcessRouteIdPair> remove_list;
428 for (WorkerHostMap::iterator iter = worker_hosts_.begin(); 425 for (WorkerHostMap::iterator iter = worker_hosts_.begin();
429 iter != worker_hosts_.end(); 426 iter != worker_hosts_.end();
430 ++iter) { 427 ++iter) {
431 iter->second->FilterShutdown(filter); 428 iter->second->FilterShutdown(filter);
432 if (iter->first.first == filter->render_process_id()) 429 if (iter->first.first == filter->render_process_id())
433 remove_list.push_back(iter->first); 430 remove_list.push_back(iter->first);
434 } 431 }
435 for (size_t i = 0; i < remove_list.size(); ++i) { 432 for (size_t i = 0; i < remove_list.size(); ++i) {
436 scoped_ptr<SharedWorkerHost> host = 433 std::unique_ptr<SharedWorkerHost> host =
437 worker_hosts_.take_and_erase(remove_list[i]); 434 worker_hosts_.take_and_erase(remove_list[i]);
438 } 435 }
439 436
440 std::vector<int> remove_pending_instance_list; 437 std::vector<int> remove_pending_instance_list;
441 for (PendingInstanceMap::iterator iter = pending_instances_.begin(); 438 for (PendingInstanceMap::iterator iter = pending_instances_.begin();
442 iter != pending_instances_.end(); ++iter) { 439 iter != pending_instances_.end(); ++iter) {
443 iter->second->RemoveRequest(filter->render_process_id()); 440 iter->second->RemoveRequest(filter->render_process_id());
444 if (!iter->second->requests()->size()) 441 if (!iter->second->requests()->size())
445 remove_pending_instance_list.push_back(iter->first); 442 remove_pending_instance_list.push_back(iter->first);
446 } 443 }
447 for (size_t i = 0; i < remove_pending_instance_list.size(); ++i) 444 for (size_t i = 0; i < remove_pending_instance_list.size(); ++i)
448 pending_instances_.take_and_erase(remove_pending_instance_list[i]); 445 pending_instances_.take_and_erase(remove_pending_instance_list[i]);
449 } 446 }
450 447
451 void SharedWorkerServiceImpl::NotifyWorkerDestroyed(int worker_process_id, 448 void SharedWorkerServiceImpl::NotifyWorkerDestroyed(int worker_process_id,
452 int worker_route_id) { 449 int worker_route_id) {
453 FOR_EACH_OBSERVER(WorkerServiceObserver, 450 FOR_EACH_OBSERVER(WorkerServiceObserver,
454 observers_, 451 observers_,
455 WorkerDestroyed(worker_process_id, worker_route_id)); 452 WorkerDestroyed(worker_process_id, worker_route_id));
456 } 453 }
457 454
458 void SharedWorkerServiceImpl::ReserveRenderProcessToCreateWorker( 455 void SharedWorkerServiceImpl::ReserveRenderProcessToCreateWorker(
459 scoped_ptr<SharedWorkerPendingInstance> pending_instance, 456 std::unique_ptr<SharedWorkerPendingInstance> pending_instance,
460 blink::WebWorkerCreationError* creation_error) { 457 blink::WebWorkerCreationError* creation_error) {
461 DCHECK_CURRENTLY_ON(BrowserThread::IO); 458 DCHECK_CURRENTLY_ON(BrowserThread::IO);
462 DCHECK(!FindPendingInstance(*pending_instance->instance())); 459 DCHECK(!FindPendingInstance(*pending_instance->instance()));
463 if (creation_error) 460 if (creation_error)
464 *creation_error = blink::WebWorkerCreationErrorNone; 461 *creation_error = blink::WebWorkerCreationErrorNone;
465 if (!pending_instance->requests()->size()) 462 if (!pending_instance->requests()->size())
466 return; 463 return;
467 int worker_process_id = -1; 464 int worker_process_id = -1;
468 int worker_route_id = MSG_ROUTING_NONE; 465 int worker_route_id = MSG_ROUTING_NONE;
469 bool is_new_worker = true; 466 bool is_new_worker = true;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 int worker_process_id, 520 int worker_process_id,
524 int worker_route_id, 521 int worker_route_id,
525 bool is_new_worker, 522 bool is_new_worker,
526 bool pause_on_start) { 523 bool pause_on_start) {
527 DCHECK_CURRENTLY_ON(BrowserThread::IO); 524 DCHECK_CURRENTLY_ON(BrowserThread::IO);
528 // To offset the TryIncrementWorkerRefCount called for the reservation, 525 // To offset the TryIncrementWorkerRefCount called for the reservation,
529 // calls DecrementWorkerRefCount after CheckWorkerDependency in 526 // calls DecrementWorkerRefCount after CheckWorkerDependency in
530 // ScopeWorkerDependencyChecker's destructor. 527 // ScopeWorkerDependencyChecker's destructor.
531 ScopedWorkerDependencyChecker checker( 528 ScopedWorkerDependencyChecker checker(
532 this, base::Bind(&DecrementWorkerRefCount, worker_process_id)); 529 this, base::Bind(&DecrementWorkerRefCount, worker_process_id));
533 scoped_ptr<SharedWorkerPendingInstance> pending_instance = 530 std::unique_ptr<SharedWorkerPendingInstance> pending_instance =
534 pending_instances_.take_and_erase(pending_instance_id); 531 pending_instances_.take_and_erase(pending_instance_id);
535 if (!pending_instance) 532 if (!pending_instance)
536 return; 533 return;
537 if (!is_new_worker) { 534 if (!is_new_worker) {
538 SharedWorkerHost* existing_host = 535 SharedWorkerHost* existing_host =
539 worker_hosts_.get(std::make_pair(worker_process_id, worker_route_id)); 536 worker_hosts_.get(std::make_pair(worker_process_id, worker_route_id));
540 if (!existing_host) { 537 if (!existing_host) {
541 // Retry reserving a renderer process if the existed Shared Worker was 538 // Retry reserving a renderer process if the existed Shared Worker was
542 // destroyed on IO thread while reserving the renderer process on UI 539 // destroyed on IO thread while reserving the renderer process on UI
543 // thread. 540 // thread.
544 ReserveRenderProcessToCreateWorker(std::move(pending_instance), NULL); 541 ReserveRenderProcessToCreateWorker(std::move(pending_instance), NULL);
545 return; 542 return;
546 } 543 }
547 pending_instance->RegisterToSharedWorkerHost(existing_host); 544 pending_instance->RegisterToSharedWorkerHost(existing_host);
548 pending_instance->SendWorkerCreatedMessages(); 545 pending_instance->SendWorkerCreatedMessages();
549 return; 546 return;
550 } 547 }
551 SharedWorkerMessageFilter* filter = 548 SharedWorkerMessageFilter* filter =
552 pending_instance->FindFilter(worker_process_id); 549 pending_instance->FindFilter(worker_process_id);
553 if (!filter) { 550 if (!filter) {
554 pending_instance->RemoveRequest(worker_process_id); 551 pending_instance->RemoveRequest(worker_process_id);
555 // Retry reserving a renderer process if the requested renderer process was 552 // Retry reserving a renderer process if the requested renderer process was
556 // destroyed on IO thread while reserving the renderer process on UI thread. 553 // destroyed on IO thread while reserving the renderer process on UI thread.
557 ReserveRenderProcessToCreateWorker(std::move(pending_instance), NULL); 554 ReserveRenderProcessToCreateWorker(std::move(pending_instance), NULL);
558 return; 555 return;
559 } 556 }
560 scoped_ptr<SharedWorkerHost> host(new SharedWorkerHost( 557 std::unique_ptr<SharedWorkerHost> host(new SharedWorkerHost(
561 pending_instance->release_instance(), filter, worker_route_id)); 558 pending_instance->release_instance(), filter, worker_route_id));
562 pending_instance->RegisterToSharedWorkerHost(host.get()); 559 pending_instance->RegisterToSharedWorkerHost(host.get());
563 const GURL url = host->instance()->url(); 560 const GURL url = host->instance()->url();
564 const base::string16 name = host->instance()->name(); 561 const base::string16 name = host->instance()->name();
565 host->Start(pause_on_start); 562 host->Start(pause_on_start);
566 worker_hosts_.set(std::make_pair(worker_process_id, worker_route_id), 563 worker_hosts_.set(std::make_pair(worker_process_id, worker_route_id),
567 std::move(host)); 564 std::move(host));
568 FOR_EACH_OBSERVER( 565 FOR_EACH_OBSERVER(
569 WorkerServiceObserver, 566 WorkerServiceObserver,
570 observers_, 567 observers_,
571 WorkerCreated(url, name, worker_process_id, worker_route_id)); 568 WorkerCreated(url, name, worker_process_id, worker_route_id));
572 } 569 }
573 570
574 void SharedWorkerServiceImpl::RenderProcessReserveFailedCallback( 571 void SharedWorkerServiceImpl::RenderProcessReserveFailedCallback(
575 int pending_instance_id, 572 int pending_instance_id,
576 int worker_process_id, 573 int worker_process_id,
577 int worker_route_id, 574 int worker_route_id,
578 bool is_new_worker) { 575 bool is_new_worker) {
579 worker_hosts_.take_and_erase( 576 worker_hosts_.take_and_erase(
580 std::make_pair(worker_process_id, worker_route_id)); 577 std::make_pair(worker_process_id, worker_route_id));
581 scoped_ptr<SharedWorkerPendingInstance> pending_instance = 578 std::unique_ptr<SharedWorkerPendingInstance> pending_instance =
582 pending_instances_.take_and_erase(pending_instance_id); 579 pending_instances_.take_and_erase(pending_instance_id);
583 if (!pending_instance) 580 if (!pending_instance)
584 return; 581 return;
585 pending_instance->RemoveRequest(worker_process_id); 582 pending_instance->RemoveRequest(worker_process_id);
586 // Retry reserving a renderer process. 583 // Retry reserving a renderer process.
587 ReserveRenderProcessToCreateWorker(std::move(pending_instance), NULL); 584 ReserveRenderProcessToCreateWorker(std::move(pending_instance), NULL);
588 } 585 }
589 586
590 SharedWorkerHost* SharedWorkerServiceImpl::FindSharedWorkerHost( 587 SharedWorkerHost* SharedWorkerServiceImpl::FindSharedWorkerHost(
591 SharedWorkerMessageFilter* filter, 588 SharedWorkerMessageFilter* filter,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 UpdateWorkerDependencyFunc new_func) { 649 UpdateWorkerDependencyFunc new_func) {
653 update_worker_dependency_ = new_func; 650 update_worker_dependency_ = new_func;
654 } 651 }
655 652
656 void SharedWorkerServiceImpl::ChangeTryIncrementWorkerRefCountFuncForTesting( 653 void SharedWorkerServiceImpl::ChangeTryIncrementWorkerRefCountFuncForTesting(
657 bool (*new_func)(int)) { 654 bool (*new_func)(int)) {
658 s_try_increment_worker_ref_count_ = new_func; 655 s_try_increment_worker_ref_count_ = new_func;
659 } 656 }
660 657
661 } // namespace content 658 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698