| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/worker_host/worker_service_impl.h" | 5 #include "content/browser/worker_host/worker_service_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 params.url, | 313 params.url, |
| 314 params.name, | 314 params.name, |
| 315 next_worker_route_id(), | 315 next_worker_route_id(), |
| 316 0, | 316 0, |
| 317 params.script_resource_appcache_id, | 317 params.script_resource_appcache_id, |
| 318 resource_context, | 318 resource_context, |
| 319 partition); | 319 partition); |
| 320 instance.AddFilter(filter, route_id); | 320 instance.AddFilter(filter, route_id); |
| 321 instance.worker_document_set()->Add( | 321 instance.worker_document_set()->Add( |
| 322 filter, params.document_id, filter->render_process_id(), | 322 filter, params.document_id, filter->render_process_id(), |
| 323 params.render_view_route_id, params.render_frame_route_id); | 323 params.render_frame_route_id); |
| 324 | 324 |
| 325 CreateWorkerFromInstance(instance); | 325 CreateWorkerFromInstance(instance); |
| 326 } | 326 } |
| 327 | 327 |
| 328 void WorkerServiceImpl::LookupSharedWorker( | 328 void WorkerServiceImpl::LookupSharedWorker( |
| 329 const ViewHostMsg_CreateWorker_Params& params, | 329 const ViewHostMsg_CreateWorker_Params& params, |
| 330 int route_id, | 330 int route_id, |
| 331 WorkerMessageFilter* filter, | 331 WorkerMessageFilter* filter, |
| 332 ResourceContext* resource_context, | 332 ResourceContext* resource_context, |
| 333 const WorkerStoragePartition& partition, | 333 const WorkerStoragePartition& partition, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 358 // Add our route ID to the existing instance so we can send messages to it. | 358 // Add our route ID to the existing instance so we can send messages to it. |
| 359 instance->AddFilter(filter, route_id); | 359 instance->AddFilter(filter, route_id); |
| 360 | 360 |
| 361 // Add the passed filter/document_id to the worker instance. | 361 // Add the passed filter/document_id to the worker instance. |
| 362 // TODO(atwilson): This won't work if the message is from a worker process. | 362 // TODO(atwilson): This won't work if the message is from a worker process. |
| 363 // We don't support that yet though (this message is only sent from | 363 // We don't support that yet though (this message is only sent from |
| 364 // renderers) but when we do, we'll need to add code to pass in the current | 364 // renderers) but when we do, we'll need to add code to pass in the current |
| 365 // worker's document set for nested workers. | 365 // worker's document set for nested workers. |
| 366 instance->worker_document_set()->Add( | 366 instance->worker_document_set()->Add( |
| 367 filter, params.document_id, filter->render_process_id(), | 367 filter, params.document_id, filter->render_process_id(), |
| 368 params.render_view_route_id, params.render_frame_route_id); | 368 params.render_frame_route_id); |
| 369 } | 369 } |
| 370 } | 370 } |
| 371 | 371 |
| 372 void WorkerServiceImpl::ForwardToWorker(const IPC::Message& message, | 372 void WorkerServiceImpl::ForwardToWorker(const IPC::Message& message, |
| 373 WorkerMessageFilter* filter) { | 373 WorkerMessageFilter* filter) { |
| 374 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) { | 374 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) { |
| 375 if (iter->FilterMessage(message, filter)) | 375 if (iter->FilterMessage(message, filter)) |
| 376 return; | 376 return; |
| 377 } | 377 } |
| 378 | 378 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 // rare in practice so the list will be small. | 572 // rare in practice so the list will be small. |
| 573 i = queued_workers_.begin(); | 573 i = queued_workers_.begin(); |
| 574 } else { | 574 } else { |
| 575 ++i; | 575 ++i; |
| 576 } | 576 } |
| 577 } | 577 } |
| 578 } | 578 } |
| 579 | 579 |
| 580 bool WorkerServiceImpl::GetRendererForWorker(int worker_process_id, | 580 bool WorkerServiceImpl::GetRendererForWorker(int worker_process_id, |
| 581 int* render_process_id, | 581 int* render_process_id, |
| 582 int* render_view_id, | |
| 583 int* render_frame_id) const { | 582 int* render_frame_id) const { |
| 584 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) { | 583 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) { |
| 585 if (iter.GetData().id != worker_process_id) | 584 if (iter.GetData().id != worker_process_id) |
| 586 continue; | 585 continue; |
| 587 | 586 |
| 588 // This code assumes one worker per process, see function comment in header! | 587 // This code assumes one worker per process, see function comment in header! |
| 589 WorkerProcessHost::Instances::const_iterator first_instance = | 588 WorkerProcessHost::Instances::const_iterator first_instance = |
| 590 iter->instances().begin(); | 589 iter->instances().begin(); |
| 591 if (first_instance == iter->instances().end()) | 590 if (first_instance == iter->instances().end()) |
| 592 return false; | 591 return false; |
| 593 | 592 |
| 594 WorkerDocumentSet::DocumentInfoSet::const_iterator info = | 593 WorkerDocumentSet::DocumentInfoSet::const_iterator info = |
| 595 first_instance->worker_document_set()->documents().begin(); | 594 first_instance->worker_document_set()->documents().begin(); |
| 596 *render_process_id = info->render_process_id(); | 595 *render_process_id = info->render_process_id(); |
| 597 *render_view_id = info->render_view_id(); | |
| 598 *render_frame_id = info->render_frame_id(); | 596 *render_frame_id = info->render_frame_id(); |
| 599 return true; | 597 return true; |
| 600 } | 598 } |
| 601 return false; | 599 return false; |
| 602 } | 600 } |
| 603 | 601 |
| 604 const WorkerProcessHost::WorkerInstance* WorkerServiceImpl::FindWorkerInstance( | 602 const WorkerProcessHost::WorkerInstance* WorkerServiceImpl::FindWorkerInstance( |
| 605 int worker_process_id) { | 603 int worker_process_id) { |
| 606 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) { | 604 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) { |
| 607 if (iter.GetData().id != worker_process_id) | 605 if (iter.GetData().id != worker_process_id) |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 return instance; | 726 return instance; |
| 729 | 727 |
| 730 // No existing pending worker - create a new one. | 728 // No existing pending worker - create a new one. |
| 731 WorkerProcessHost::WorkerInstance pending( | 729 WorkerProcessHost::WorkerInstance pending( |
| 732 url, true, name, resource_context, partition); | 730 url, true, name, resource_context, partition); |
| 733 pending_shared_workers_.push_back(pending); | 731 pending_shared_workers_.push_back(pending); |
| 734 return &pending_shared_workers_.back(); | 732 return &pending_shared_workers_.back(); |
| 735 } | 733 } |
| 736 | 734 |
| 737 } // namespace content | 735 } // namespace content |
| OLD | NEW |