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

Unified Diff: content/browser/shared_worker/shared_worker_service_impl.cc

Issue 182693002: Implement some mothods in SharedWorkerHost and SharedWorkerServiceImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added null check of instance in SharedWorkerHost Created 6 years, 10 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/shared_worker/shared_worker_service_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/shared_worker/shared_worker_service_impl.cc
diff --git a/content/browser/shared_worker/shared_worker_service_impl.cc b/content/browser/shared_worker/shared_worker_service_impl.cc
index 12c3ebbfe54696ecdc390533f7810802357f81db..d5a06b36a8a2a691c1ae363c28783c3452e832ef 100644
--- a/content/browser/shared_worker/shared_worker_service_impl.cc
+++ b/content/browser/shared_worker/shared_worker_service_impl.cc
@@ -88,10 +88,12 @@ void SharedWorkerServiceImpl::CreateWorker(
filter, params.document_id, filter->render_process_id(),
params.render_frame_route_id);
- scoped_ptr<SharedWorkerHost> worker(new SharedWorkerHost(instance.release()));
- worker->Init(filter);
- const int worker_route_id = worker->worker_route_id();
- worker_hosts_.push_back(worker.release());
+ scoped_ptr<SharedWorkerHost> host(new SharedWorkerHost(instance.release()));
+ host->Init(filter);
+ const int worker_route_id = host->worker_route_id();
+ worker_hosts_.set(std::make_pair(filter->render_process_id(),
+ worker_route_id),
+ host.Pass());
FOR_EACH_OBSERVER(
WorkerServiceObserver, observers_,
@@ -104,51 +106,66 @@ void SharedWorkerServiceImpl::CreateWorker(
void SharedWorkerServiceImpl::ForwardToWorker(
const IPC::Message& message,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ for (WorkerHostMap::const_iterator iter = worker_hosts_.begin();
+ iter != worker_hosts_.end();
+ ++iter) {
+ if (iter->second->FilterMessage(message, filter))
+ return;
+ }
}
void SharedWorkerServiceImpl::DocumentDetached(
unsigned long long document_id,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ for (WorkerHostMap::const_iterator iter = worker_hosts_.begin();
+ iter != worker_hosts_.end();
+ ++iter) {
+ iter->second->DocumentDetached(filter, document_id);
+ }
}
void SharedWorkerServiceImpl::WorkerContextClosed(
int worker_route_id,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
+ host->WorkerContextClosed();
}
void SharedWorkerServiceImpl::WorkerContextDestroyed(
int worker_route_id,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ scoped_ptr<SharedWorkerHost> host =
+ worker_hosts_.take_and_erase(std::make_pair(filter->render_process_id(),
+ worker_route_id));
+ if (!host)
+ return;
+ host->WorkerContextDestroyed();
}
void SharedWorkerServiceImpl::WorkerScriptLoaded(
int worker_route_id,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
+ host->WorkerScriptLoaded();
}
void SharedWorkerServiceImpl::WorkerScriptLoadFailed(
int worker_route_id,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ scoped_ptr<SharedWorkerHost> host =
+ worker_hosts_.take_and_erase(std::make_pair(filter->render_process_id(),
+ worker_route_id));
+ if (!host)
+ return;
+ host->WorkerScriptLoadFailed();
}
void SharedWorkerServiceImpl::WorkerConnected(
int message_port_id,
int worker_route_id,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
+ host->WorkerConnected(message_port_id);
}
void SharedWorkerServiceImpl::AllowDatabase(
@@ -159,8 +176,8 @@ void SharedWorkerServiceImpl::AllowDatabase(
unsigned long estimated_size,
bool* result,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
+ host->AllowDatabase(url, name, display_name, estimated_size, result);
}
void SharedWorkerServiceImpl::AllowFileSystem(
@@ -168,8 +185,8 @@ void SharedWorkerServiceImpl::AllowFileSystem(
const GURL& url,
bool* result,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
+ host->AllowFileSystem(url, result);
}
void SharedWorkerServiceImpl::AllowIndexedDB(
@@ -178,14 +195,29 @@ void SharedWorkerServiceImpl::AllowIndexedDB(
const base::string16& name,
bool* result,
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ if (SharedWorkerHost* host = FindSharedWorkerHost(filter, worker_route_id))
+ host->AllowIndexedDB(url, name, result);
}
void SharedWorkerServiceImpl::OnSharedWorkerMessageFilterClosing(
SharedWorkerMessageFilter* filter) {
- // TODO(horo): implement this.
- NOTIMPLEMENTED();
+ std::vector<ProcessRouteIdPair> remove_list;
+ for (WorkerHostMap::iterator iter = worker_hosts_.begin();
+ iter != worker_hosts_.end();
+ ++iter) {
+ iter->second->FilterShutdown(filter);
+ if (iter->first.first == filter->render_process_id())
+ remove_list.push_back(iter->first);
+ }
+ for (size_t i = 0; i < remove_list.size(); ++i)
+ worker_hosts_.erase(remove_list[i]);
+}
+
+SharedWorkerHost* SharedWorkerServiceImpl::FindSharedWorkerHost(
+ SharedWorkerMessageFilter* filter,
+ int worker_route_id) {
+ return worker_hosts_.get(std::make_pair(filter->render_process_id(),
+ worker_route_id));
}
SharedWorkerInstance* SharedWorkerServiceImpl::FindSharedWorkerInstance(
@@ -193,13 +225,11 @@ SharedWorkerInstance* SharedWorkerServiceImpl::FindSharedWorkerInstance(
const base::string16& name,
const WorkerStoragePartition& partition,
ResourceContext* resource_context) {
- for (ScopedVector<SharedWorkerHost>::const_iterator iter =
- worker_hosts_.begin();
+ for (WorkerHostMap::const_iterator iter = worker_hosts_.begin();
iter != worker_hosts_.end();
++iter) {
- SharedWorkerInstance* instance = (*iter)->instance();
- if (instance &&
- instance->Matches(url, name, partition, resource_context))
+ SharedWorkerInstance* instance = iter->second->instance();
+ if (instance && instance->Matches(url, name, partition, resource_context))
return instance;
}
return NULL;
« no previous file with comments | « content/browser/shared_worker/shared_worker_service_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698