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_process_host.h" | 5 #include "content/browser/worker_host/worker_process_host.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 worker_process_id); | 134 worker_process_id); |
135 } | 135 } |
136 | 136 |
137 } // namespace | 137 } // namespace |
138 | 138 |
139 WorkerProcessHost::WorkerProcessHost( | 139 WorkerProcessHost::WorkerProcessHost( |
140 ResourceContext* resource_context, | 140 ResourceContext* resource_context, |
141 const WorkerStoragePartition& partition) | 141 const WorkerStoragePartition& partition) |
142 : resource_context_(resource_context), | 142 : resource_context_(resource_context), |
143 partition_(partition), | 143 partition_(partition), |
144 process_launched_(false) { | 144 process_launched_(false), |
| 145 weak_factory_(this) { |
145 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
146 DCHECK(resource_context_); | 147 DCHECK(resource_context_); |
147 process_.reset( | 148 process_.reset( |
148 new BrowserChildProcessHostImpl(PROCESS_TYPE_WORKER, this)); | 149 new BrowserChildProcessHostImpl(PROCESS_TYPE_WORKER, this)); |
149 } | 150 } |
150 | 151 |
151 WorkerProcessHost::~WorkerProcessHost() { | 152 WorkerProcessHost::~WorkerProcessHost() { |
152 // If we crashed, tell the RenderViewHosts. | 153 // If we crashed, tell the RenderViewHosts. |
153 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) { | 154 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) { |
154 if (!i->load_failed()) { | 155 if (!i->load_failed()) { |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 OnWorkerContextClosed) | 380 OnWorkerContextClosed) |
380 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextDestroyed, | 381 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextDestroyed, |
381 OnWorkerContextDestroyed) | 382 OnWorkerContextDestroyed) |
382 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoaded, | 383 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoaded, |
383 OnWorkerScriptLoaded) | 384 OnWorkerScriptLoaded) |
384 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoadFailed, | 385 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoadFailed, |
385 OnWorkerScriptLoadFailed) | 386 OnWorkerScriptLoadFailed) |
386 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerConnected, | 387 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerConnected, |
387 OnWorkerConnected) | 388 OnWorkerConnected) |
388 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase) | 389 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase) |
389 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_RequestFileSystemAccessSync, | 390 IPC_MESSAGE_HANDLER_DELAY_REPLY( |
390 OnRequestFileSystemAccessSync) | 391 WorkerProcessHostMsg_RequestFileSystemAccessSync, |
| 392 OnRequestFileSystemAccess) |
391 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowIndexedDB, OnAllowIndexedDB) | 393 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowIndexedDB, OnAllowIndexedDB) |
392 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_ForceKillWorker, | 394 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_ForceKillWorker, |
393 OnForceKillWorkerProcess) | 395 OnForceKillWorkerProcess) |
394 IPC_MESSAGE_UNHANDLED(handled = false) | 396 IPC_MESSAGE_UNHANDLED(handled = false) |
395 IPC_END_MESSAGE_MAP() | 397 IPC_END_MESSAGE_MAP() |
396 | 398 |
397 return handled; | 399 return handled; |
398 } | 400 } |
399 | 401 |
400 // Sent to notify the browser process when a worker context invokes close(), so | 402 // Sent to notify the browser process when a worker context invokes close(), so |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 const GURL& url, | 468 const GURL& url, |
467 const base::string16& name, | 469 const base::string16& name, |
468 const base::string16& display_name, | 470 const base::string16& display_name, |
469 unsigned long estimated_size, | 471 unsigned long estimated_size, |
470 bool* result) { | 472 bool* result) { |
471 *result = GetContentClient()->browser()->AllowWorkerDatabase( | 473 *result = GetContentClient()->browser()->AllowWorkerDatabase( |
472 url, name, display_name, estimated_size, resource_context_, | 474 url, name, display_name, estimated_size, resource_context_, |
473 GetRenderFrameIDsForWorker(worker_route_id)); | 475 GetRenderFrameIDsForWorker(worker_route_id)); |
474 } | 476 } |
475 | 477 |
476 void WorkerProcessHost::OnRequestFileSystemAccessSync(int worker_route_id, | 478 void WorkerProcessHost::OnRequestFileSystemAccess(int worker_route_id, |
477 const GURL& url, | 479 const GURL& url, |
478 bool* result) { | 480 IPC::Message* reply_msg) { |
479 *result = GetContentClient()->browser()->AllowWorkerFileSystem( | 481 GetContentClient()->browser()->RequestWorkerFileSystemAccess( |
480 url, resource_context_, GetRenderFrameIDsForWorker(worker_route_id)); | 482 url, |
| 483 resource_context_, |
| 484 GetRenderFrameIDsForWorker(worker_route_id), |
| 485 base::Bind(&WorkerProcessHost::OnRequestFileSystemAccessResponse, |
| 486 weak_factory_.GetWeakPtr(), |
| 487 base::Passed(scoped_ptr<IPC::Message>(reply_msg)))); |
| 488 } |
| 489 |
| 490 void WorkerProcessHost::OnRequestFileSystemAccessResponse( |
| 491 scoped_ptr<IPC::Message> reply_msg, |
| 492 bool allowed) { |
| 493 WorkerProcessHostMsg_RequestFileSystemAccessSync::WriteReplyParams( |
| 494 reply_msg.get(), |
| 495 allowed); |
| 496 Send(reply_msg.release()); |
481 } | 497 } |
482 | 498 |
483 void WorkerProcessHost::OnAllowIndexedDB(int worker_route_id, | 499 void WorkerProcessHost::OnAllowIndexedDB(int worker_route_id, |
484 const GURL& url, | 500 const GURL& url, |
485 const base::string16& name, | 501 const base::string16& name, |
486 bool* result) { | 502 bool* result) { |
487 *result = GetContentClient()->browser()->AllowWorkerIndexedDB( | 503 *result = GetContentClient()->browser()->AllowWorkerIndexedDB( |
488 url, name, resource_context_, | 504 url, name, resource_context_, |
489 GetRenderFrameIDsForWorker(worker_route_id)); | 505 GetRenderFrameIDsForWorker(worker_route_id)); |
490 } | 506 } |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 return false; | 837 return false; |
822 } | 838 } |
823 | 839 |
824 WorkerProcessHost::WorkerInstance::FilterInfo | 840 WorkerProcessHost::WorkerInstance::FilterInfo |
825 WorkerProcessHost::WorkerInstance::GetFilter() const { | 841 WorkerProcessHost::WorkerInstance::GetFilter() const { |
826 DCHECK(NumFilters() == 1); | 842 DCHECK(NumFilters() == 1); |
827 return *filters_.begin(); | 843 return *filters_.begin(); |
828 } | 844 } |
829 | 845 |
830 } // namespace content | 846 } // namespace content |
OLD | NEW |