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

Unified Diff: content/browser/worker_host/worker_service.cc

Issue 8399007: Removing dedicated worker-related IPC codei (first round). (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: CR feedback Created 9 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/worker_host/worker_process_host.cc ('k') | content/common/worker_messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/worker_host/worker_service.cc
diff --git a/content/browser/worker_host/worker_service.cc b/content/browser/worker_host/worker_service.cc
index d33ebcca5ad86b5267f34032184a1ceee1aa9b0a..b82a78c9e440377acc42db069b914dff33257124 100644
--- a/content/browser/worker_host/worker_service.cc
+++ b/content/browser/worker_host/worker_service.cc
@@ -84,12 +84,10 @@ void WorkerService::CreateWorker(
// it to.
WorkerProcessHost::WorkerInstance instance(
params.url,
- params.is_shared,
params.name,
next_worker_route_id(),
- params.is_shared ? 0 : filter->render_process_id(),
- params.is_shared ? 0 : params.parent_appcache_host_id,
- params.is_shared ? params.script_resource_appcache_id : 0,
+ 0,
+ params.script_resource_appcache_id,
&resource_context);
instance.AddFilter(filter, route_id);
instance.worker_document_set()->Add(
@@ -144,35 +142,8 @@ void WorkerService::LookupSharedWorker(
void WorkerService::CancelCreateDedicatedWorker(
int route_id,
WorkerMessageFilter* filter) {
- for (WorkerProcessHost::Instances::iterator i = queued_workers_.begin();
- i != queued_workers_.end(); ++i) {
- if (i->HasFilter(filter, route_id)) {
- DCHECK(!i->shared());
- queued_workers_.erase(i);
- return;
- }
- }
- // There could be a race condition where the WebWorkerProxy told us to cancel
- // the worker right as we sent it a message say it's been created. Look at
- // the running workers.
- for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
- !iter.Done(); ++iter) {
- WorkerProcessHost* worker = static_cast<WorkerProcessHost*>(*iter);
- for (WorkerProcessHost::Instances::const_iterator instance =
- worker->instances().begin();
- instance != worker->instances().end(); ++instance) {
- if (instance->HasFilter(filter, route_id)) {
- // Fake a worker destroyed message so that WorkerProcessHost cleans up
- // properly.
- WorkerMsg_TerminateWorkerContext message(route_id);
- ForwardToWorker(message, filter);
- return;
- }
- }
- }
-
- DCHECK(false) << "Couldn't find worker to cancel";
+ NOTREACHED();
}
void WorkerService::ForwardToWorker(const IPC::Message& message,
@@ -199,12 +170,11 @@ void WorkerService::DocumentDetached(unsigned long long document_id,
// Remove any queued shared workers for this document.
for (WorkerProcessHost::Instances::iterator iter = queued_workers_.begin();
iter != queued_workers_.end();) {
- if (iter->shared()) {
- iter->worker_document_set()->Remove(filter, document_id);
- if (iter->worker_document_set()->IsEmpty()) {
- iter = queued_workers_.erase(iter);
- continue;
- }
+
+ iter->worker_document_set()->Remove(filter, document_id);
+ if (iter->worker_document_set()->IsEmpty()) {
+ iter = queued_workers_.erase(iter);
+ continue;
}
++iter;
}
@@ -244,65 +214,63 @@ bool WorkerService::CreateWorkerFromInstance(
// Check to see if this shared worker is already running (two pages may have
// tried to start up the worker simultaneously).
- if (instance.shared()) {
- // See if a worker with this name already exists.
- WorkerProcessHost::WorkerInstance* existing_instance =
- FindSharedWorkerInstance(
- instance.url(), instance.name(), instance.resource_context());
- WorkerProcessHost::WorkerInstance::FilterInfo filter_info =
- instance.GetFilter();
- // If this worker is already running, no need to create a new copy. Just
- // inform the caller that the worker has been created.
- if (existing_instance) {
- // Walk the worker's filter list to see if this client is listed. If not,
- // then it means that the worker started by the client already exited so
- // we should not attach to this new one (http://crbug.com/29243).
- if (!existing_instance->HasFilter(filter_info.first, filter_info.second))
- return false;
- filter_info.first->Send(new ViewMsg_WorkerCreated(filter_info.second));
- return true;
- }
-
- // Look to see if there's a pending instance.
- WorkerProcessHost::WorkerInstance* pending = FindPendingInstance(
- instance.url(), instance.name(), instance.resource_context());
- // If there's no instance *and* no pending instance (or there is a pending
- // instance but it does not contain our filter info), then it means the
- // worker started up and exited already. Log a warning because this should
- // be a very rare occurrence and is probably a bug, but it *can* happen so
- // handle it gracefully.
- if (!pending ||
- !pending->HasFilter(filter_info.first, filter_info.second)) {
- DLOG(WARNING) << "Pending worker already exited";
+ // See if a worker with this name already exists.
+ WorkerProcessHost::WorkerInstance* existing_instance =
+ FindSharedWorkerInstance(
+ instance.url(), instance.name(), instance.resource_context());
+ WorkerProcessHost::WorkerInstance::FilterInfo filter_info =
+ instance.GetFilter();
+ // If this worker is already running, no need to create a new copy. Just
+ // inform the caller that the worker has been created.
+ if (existing_instance) {
+ // Walk the worker's filter list to see if this client is listed. If not,
+ // then it means that the worker started by the client already exited so
+ // we should not attach to this new one (http://crbug.com/29243).
+ if (!existing_instance->HasFilter(filter_info.first, filter_info.second))
return false;
- }
+ filter_info.first->Send(new ViewMsg_WorkerCreated(filter_info.second));
+ return true;
+ }
- // Assign the accumulated document set and filter list for this pending
- // worker to the new instance.
- DCHECK(!pending->worker_document_set()->IsEmpty());
- instance.ShareDocumentSet(*pending);
- for (WorkerProcessHost::WorkerInstance::FilterList::const_iterator i =
- pending->filters().begin();
- i != pending->filters().end(); ++i) {
- instance.AddFilter(i->first, i->second);
- }
- RemovePendingInstances(
- instance.url(), instance.name(), instance.resource_context());
-
- // Remove any queued instances of this worker and copy over the filter to
- // this instance.
- for (WorkerProcessHost::Instances::iterator iter = queued_workers_.begin();
- iter != queued_workers_.end();) {
- if (iter->Matches(instance.url(), instance.name(),
- instance.resource_context())) {
- DCHECK(iter->NumFilters() == 1);
- WorkerProcessHost::WorkerInstance::FilterInfo filter_info =
- iter->GetFilter();
- instance.AddFilter(filter_info.first, filter_info.second);
- iter = queued_workers_.erase(iter);
- } else {
- ++iter;
- }
+ // Look to see if there's a pending instance.
+ WorkerProcessHost::WorkerInstance* pending = FindPendingInstance(
+ instance.url(), instance.name(), instance.resource_context());
+ // If there's no instance *and* no pending instance (or there is a pending
+ // instance but it does not contain our filter info), then it means the
+ // worker started up and exited already. Log a warning because this should
+ // be a very rare occurrence and is probably a bug, but it *can* happen so
+ // handle it gracefully.
+ if (!pending ||
+ !pending->HasFilter(filter_info.first, filter_info.second)) {
+ DLOG(WARNING) << "Pending worker already exited";
+ return false;
+ }
+
+ // Assign the accumulated document set and filter list for this pending
+ // worker to the new instance.
+ DCHECK(!pending->worker_document_set()->IsEmpty());
+ instance.ShareDocumentSet(*pending);
+ for (WorkerProcessHost::WorkerInstance::FilterList::const_iterator i =
+ pending->filters().begin();
+ i != pending->filters().end(); ++i) {
+ instance.AddFilter(i->first, i->second);
+ }
+ RemovePendingInstances(
+ instance.url(), instance.name(), instance.resource_context());
+
+ // Remove any queued instances of this worker and copy over the filter to
+ // this instance.
+ for (WorkerProcessHost::Instances::iterator iter = queued_workers_.begin();
+ iter != queued_workers_.end();) {
+ if (iter->Matches(instance.url(), instance.name(),
+ instance.resource_context())) {
+ DCHECK(iter->NumFilters() == 1);
+ WorkerProcessHost::WorkerInstance::FilterInfo filter_info =
+ iter->GetFilter();
+ instance.AddFilter(filter_info.first, filter_info.second);
+ iter = queued_workers_.erase(iter);
+ } else {
+ ++iter;
}
}
« no previous file with comments | « content/browser/worker_host/worker_process_host.cc ('k') | content/common/worker_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698