| Index: content/browser/loader/resource_message_filter.cc
|
| diff --git a/content/browser/loader/resource_message_filter.cc b/content/browser/loader/resource_message_filter.cc
|
| index 2ee8ff5c7a7b7916dff0d16b123d05fb36f36d6a..b70e281bc733ee2dd1cdaea4ee03222639873e38 100644
|
| --- a/content/browser/loader/resource_message_filter.cc
|
| +++ b/content/browser/loader/resource_message_filter.cc
|
| @@ -4,12 +4,15 @@
|
|
|
| #include "content/browser/loader/resource_message_filter.h"
|
|
|
| +#include "base/logging.h"
|
| #include "content/browser/appcache/chrome_appcache_service.h"
|
| #include "content/browser/blob_storage/chrome_blob_storage_context.h"
|
| #include "content/browser/loader/resource_dispatcher_host_impl.h"
|
| +#include "content/browser/loader/resource_requester_info.h"
|
| #include "content/browser/loader/url_loader_factory_impl.h"
|
| #include "content/browser/service_worker/service_worker_context_wrapper.h"
|
| #include "content/common/resource_messages.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/resource_context.h"
|
| #include "storage/browser/fileapi/file_system_context.h"
|
|
|
| @@ -17,7 +20,6 @@ namespace content {
|
|
|
| ResourceMessageFilter::ResourceMessageFilter(
|
| int child_id,
|
| - int process_type,
|
| ChromeAppCacheService* appcache_service,
|
| ChromeBlobStorageContext* blob_storage_context,
|
| storage::FileSystemContext* file_system_context,
|
| @@ -25,15 +27,17 @@ ResourceMessageFilter::ResourceMessageFilter(
|
| const GetContextsCallback& get_contexts_callback)
|
| : BrowserMessageFilter(ResourceMsgStart),
|
| BrowserAssociatedInterface<mojom::URLLoaderFactory>(this, this),
|
| - child_id_(child_id),
|
| - process_type_(process_type),
|
| is_channel_closed_(false),
|
| - appcache_service_(appcache_service),
|
| - blob_storage_context_(blob_storage_context),
|
| - file_system_context_(file_system_context),
|
| - service_worker_context_(service_worker_context),
|
| - get_contexts_callback_(get_contexts_callback),
|
| - weak_ptr_factory_(this) {}
|
| + requester_info_(
|
| + ResourceRequesterInfo::CreateForRenderer(child_id,
|
| + appcache_service,
|
| + blob_storage_context,
|
| + file_system_context,
|
| + service_worker_context,
|
| + get_contexts_callback)),
|
| + weak_ptr_factory_(this) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| +}
|
|
|
| ResourceMessageFilter::~ResourceMessageFilter() {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| @@ -41,19 +45,29 @@ ResourceMessageFilter::~ResourceMessageFilter() {
|
| DCHECK(!weak_ptr_factory_.HasWeakPtrs());
|
| }
|
|
|
| +void ResourceMessageFilter::OnFilterAdded(IPC::Channel*) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + InitializeOnIOThread();
|
| +}
|
| +
|
| void ResourceMessageFilter::OnChannelClosing() {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| // Unhook us from all pending network requests so they don't get sent to a
|
| // deleted object.
|
| - ResourceDispatcherHostImpl::Get()->CancelRequestsForProcess(child_id_);
|
| + ResourceDispatcherHostImpl::Get()->CancelRequestsForProcess(
|
| + requester_info_->child_id());
|
|
|
| weak_ptr_factory_.InvalidateWeakPtrs();
|
| is_channel_closed_ = true;
|
| }
|
|
|
| bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
|
| - return ResourceDispatcherHostImpl::Get()->OnMessageReceived(message, this);
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + // Check if InitializeOnIOThread() has been called.
|
| + DCHECK_EQ(this, requester_info_->filter());
|
| + return ResourceDispatcherHostImpl::Get()->OnMessageReceived(
|
| + message, requester_info_.get());
|
| }
|
|
|
| void ResourceMessageFilter::OnDestruct() const {
|
| @@ -62,14 +76,6 @@ void ResourceMessageFilter::OnDestruct() const {
|
| BrowserThread::DeleteOnIOThread::Destruct(this);
|
| }
|
|
|
| -void ResourceMessageFilter::GetContexts(
|
| - ResourceType resource_type,
|
| - ResourceContext** resource_context,
|
| - net::URLRequestContext** request_context) {
|
| - return get_contexts_callback_.Run(resource_type, resource_context,
|
| - request_context);
|
| -}
|
| -
|
| base::WeakPtr<ResourceMessageFilter> ResourceMessageFilter::GetWeakPtr() {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| return is_channel_closed_ ? nullptr : weak_ptr_factory_.GetWeakPtr();
|
| @@ -81,17 +87,32 @@ void ResourceMessageFilter::CreateLoaderAndStart(
|
| int32_t request_id,
|
| const ResourceRequest& url_request,
|
| mojom::URLLoaderClientAssociatedPtrInfo client_ptr_info) {
|
| - URLLoaderFactoryImpl::CreateLoaderAndStart(std::move(request), routing_id,
|
| - request_id, url_request,
|
| - std::move(client_ptr_info), this);
|
| + URLLoaderFactoryImpl::CreateLoaderAndStart(
|
| + requester_info_.get(), std::move(request), routing_id, request_id,
|
| + url_request, std::move(client_ptr_info));
|
| }
|
|
|
| void ResourceMessageFilter::SyncLoad(int32_t routing_id,
|
| int32_t request_id,
|
| const ResourceRequest& url_request,
|
| const SyncLoadCallback& callback) {
|
| - URLLoaderFactoryImpl::SyncLoad(routing_id, request_id, url_request, callback,
|
| - this);
|
| + URLLoaderFactoryImpl::SyncLoad(requester_info_.get(), routing_id, request_id,
|
| + url_request, callback);
|
| +}
|
| +
|
| +int ResourceMessageFilter::child_id() const {
|
| + return requester_info_->child_id();
|
| +}
|
| +
|
| +void ResourceMessageFilter::InitializeForTest() {
|
| + InitializeOnIOThread();
|
| +}
|
| +
|
| +void ResourceMessageFilter::InitializeOnIOThread() {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + // The WeakPtr of the filter must be created on the IO thread. So sets the
|
| + // WeakPtr of |requester_info_| now.
|
| + requester_info_->set_filter(GetWeakPtr());
|
| }
|
|
|
| } // namespace content
|
|
|