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

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

Issue 6825038: Create a content::ResourceContext. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix dependencies. Created 9 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 side-by-side diff with in-line comments
Download patch
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 dd30448d2a2ccc96f39d615fc3deafbd61e7f2c4..fa74a39119286341562b4a9095289fb6152e8834 100644
--- a/content/browser/worker_host/worker_service.cc
+++ b/content/browser/worker_host/worker_service.cc
@@ -7,6 +7,7 @@
#include <string>
#include "base/command_line.h"
+#include "base/logging.h"
#include "base/sys_info.h"
#include "base/threading/thread.h"
#include "chrome/common/chrome_switches.h"
@@ -21,6 +22,7 @@ const int WorkerService::kMaxWorkersWhenSeparate = 64;
const int WorkerService::kMaxWorkersPerTabWhenSeparate = 16;
WorkerService* WorkerService::GetInstance() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
return Singleton<WorkerService>::get();
}
@@ -28,9 +30,12 @@ WorkerService::WorkerService() : next_worker_route_id_(0) {
}
WorkerService::~WorkerService() {
+ // Since we're a Singleton, we are deleted on the UI thread instead.
+ DetachFromThread();
}
void WorkerService::OnWorkerMessageFilterClosing(WorkerMessageFilter* filter) {
+ DCHECK(CalledOnValidThread());
for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
!iter.Done(); ++iter) {
WorkerProcessHost* worker = static_cast<WorkerProcessHost*>(*iter);
@@ -71,10 +76,12 @@ void WorkerService::CreateWorker(
const ViewHostMsg_CreateWorker_Params& params,
int route_id,
WorkerMessageFilter* filter,
- net::URLRequestContextGetter* request_context) {
-
+ net::URLRequestContextGetter* request_context_getter,
+ const content::ResourceContext& resource_context) {
+ DCHECK(CalledOnValidThread());
+ // TODO(willchan): Eliminate the need for this downcast.
ChromeURLRequestContext* context = static_cast<ChromeURLRequestContext*>(
- request_context->GetURLRequestContext());
+ request_context_getter->GetURLRequestContext());
// Generate a unique route id for the browser-worker communication that's
// unique among all worker processes. That way when the worker process sends
@@ -89,7 +96,8 @@ void WorkerService::CreateWorker(
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,
- request_context);
+ request_context_getter,
+ resource_context);
instance.AddFilter(filter, route_id);
instance.worker_document_set()->Add(
filter, params.document_id, filter->render_process_id(),
@@ -105,7 +113,7 @@ void WorkerService::LookupSharedWorker(
bool incognito,
bool* exists,
bool* url_mismatch) {
-
+ DCHECK(CalledOnValidThread());
*exists = true;
WorkerProcessHost::WorkerInstance* instance = FindSharedWorkerInstance(
params.url, params.name, incognito);
@@ -144,6 +152,7 @@ void WorkerService::LookupSharedWorker(
void WorkerService::CancelCreateDedicatedWorker(
int route_id,
WorkerMessageFilter* filter) {
+ DCHECK(CalledOnValidThread());
for (WorkerProcessHost::Instances::iterator i = queued_workers_.begin();
i != queued_workers_.end(); ++i) {
if (i->HasFilter(filter, route_id)) {
@@ -177,6 +186,7 @@ void WorkerService::CancelCreateDedicatedWorker(
void WorkerService::ForwardToWorker(const IPC::Message& message,
WorkerMessageFilter* filter) {
+ DCHECK(CalledOnValidThread());
for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
!iter.Done(); ++iter) {
WorkerProcessHost* worker = static_cast<WorkerProcessHost*>(*iter);
@@ -189,6 +199,7 @@ void WorkerService::ForwardToWorker(const IPC::Message& message,
void WorkerService::DocumentDetached(unsigned long long document_id,
WorkerMessageFilter* filter) {
+ DCHECK(CalledOnValidThread());
// Any associated shared workers can be shut down.
for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
!iter.Done(); ++iter) {
@@ -224,6 +235,7 @@ void WorkerService::DocumentDetached(unsigned long long document_id,
bool WorkerService::CreateWorkerFromInstance(
WorkerProcessHost::WorkerInstance instance) {
+ DCHECK(CalledOnValidThread());
// TODO(michaeln): We need to ensure that a process is working
// on behalf of a single profile. The process sharing logic below
// does not ensure that. Consider making WorkerService a per profile
@@ -309,8 +321,8 @@ bool WorkerService::CreateWorkerFromInstance(
if (!worker) {
WorkerMessageFilter* first_filter = instance.filters().begin()->first;
worker = new WorkerProcessHost(
- first_filter->resource_dispatcher_host(),
- instance.request_context());
+ instance.request_context_getter(),
+ instance.resource_context());
// TODO(atwilson): This won't work if the message is from a worker process.
// We don't support that yet though (this message is only sent from
// renderers) but when we do, we'll need to add code to pass in the current
@@ -330,6 +342,7 @@ bool WorkerService::CreateWorkerFromInstance(
}
WorkerProcessHost* WorkerService::GetProcessForDomain(const GURL& url) {
+ DCHECK(CalledOnValidThread());
int num_processes = 0;
std::string domain =
net::RegistryControlledDomainService::GetDomainAndRegistry(url);
@@ -354,6 +367,7 @@ WorkerProcessHost* WorkerService::GetProcessForDomain(const GURL& url) {
}
WorkerProcessHost* WorkerService::GetProcessToFillUpCores() {
+ DCHECK(CalledOnValidThread());
int num_processes = 0;
BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
for (; !iter.Done(); ++iter)
@@ -366,6 +380,7 @@ WorkerProcessHost* WorkerService::GetProcessToFillUpCores() {
}
WorkerProcessHost* WorkerService::GetLeastLoadedWorker() {
+ DCHECK(CalledOnValidThread());
WorkerProcessHost* smallest = NULL;
for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
!iter.Done(); ++iter) {
@@ -379,6 +394,7 @@ WorkerProcessHost* WorkerService::GetLeastLoadedWorker() {
bool WorkerService::CanCreateWorkerProcess(
const WorkerProcessHost::WorkerInstance& instance) {
+ DCHECK(CalledOnValidThread());
// Worker can be fired off if *any* parent has room.
const WorkerDocumentSet::DocumentInfoSet& parents =
instance.worker_document_set()->documents();
@@ -405,6 +421,7 @@ bool WorkerService::CanCreateWorkerProcess(
bool WorkerService::TabCanCreateWorkerProcess(int render_process_id,
int render_view_id,
bool* hit_total_worker_limit) {
+ DCHECK(CalledOnValidThread());
int total_workers = 0;
int workers_per_tab = 0;
*hit_total_worker_limit = false;
@@ -431,6 +448,7 @@ bool WorkerService::TabCanCreateWorkerProcess(int render_process_id,
}
void WorkerService::TryStartingQueuedWorker() {
+ DCHECK(CalledOnValidThread());
if (queued_workers_.empty())
return;
@@ -456,6 +474,7 @@ void WorkerService::TryStartingQueuedWorker() {
bool WorkerService::GetRendererForWorker(int worker_process_id,
int* render_process_id,
int* render_view_id) const {
+ DCHECK(CalledOnValidThread());
for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
!iter.Done(); ++iter) {
if (iter->id() != worker_process_id)
@@ -479,6 +498,7 @@ bool WorkerService::GetRendererForWorker(int worker_process_id,
const WorkerProcessHost::WorkerInstance* WorkerService::FindWorkerInstance(
int worker_process_id) {
+ DCHECK(CalledOnValidThread());
for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
!iter.Done(); ++iter) {
if (iter->id() != worker_process_id)
@@ -495,6 +515,7 @@ const WorkerProcessHost::WorkerInstance* WorkerService::FindWorkerInstance(
WorkerProcessHost::WorkerInstance*
WorkerService::FindSharedWorkerInstance(const GURL& url, const string16& name,
bool incognito) {
+ DCHECK(CalledOnValidThread());
for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
!iter.Done(); ++iter) {
WorkerProcessHost* worker = static_cast<WorkerProcessHost*>(*iter);
@@ -512,6 +533,7 @@ WorkerService::FindSharedWorkerInstance(const GURL& url, const string16& name,
WorkerProcessHost::WorkerInstance*
WorkerService::FindPendingInstance(const GURL& url, const string16& name,
bool incognito) {
+ DCHECK(CalledOnValidThread());
// Walk the pending instances looking for a matching pending worker.
for (WorkerProcessHost::Instances::iterator iter =
pending_shared_workers_.begin();
@@ -528,6 +550,7 @@ WorkerService::FindPendingInstance(const GURL& url, const string16& name,
void WorkerService::RemovePendingInstances(const GURL& url,
const string16& name,
bool incognito) {
+ DCHECK(CalledOnValidThread());
// Walk the pending instances looking for a matching pending worker.
for (WorkerProcessHost::Instances::iterator iter =
pending_shared_workers_.begin();
@@ -544,6 +567,7 @@ WorkerProcessHost::WorkerInstance*
WorkerService::CreatePendingInstance(const GURL& url,
const string16& name,
bool incognito) {
+ DCHECK(CalledOnValidThread());
// Look for an existing pending shared worker.
WorkerProcessHost::WorkerInstance* instance =
FindPendingInstance(url, name, incognito);
@@ -551,8 +575,7 @@ WorkerService::CreatePendingInstance(const GURL& url,
return instance;
// No existing pending worker - create a new one.
- WorkerProcessHost::WorkerInstance pending(
- url, true, incognito, name, MSG_ROUTING_NONE, 0, 0, 0, NULL);
+ WorkerProcessHost::WorkerInstance pending(url, true, incognito, name);
pending_shared_workers_.push_back(pending);
return &pending_shared_workers_.back();
}

Powered by Google App Engine
This is Rietveld 408576698