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

Side by Side Diff: content/browser/loader/resource_message_filter.cc

Issue 2785523002: Reduce/remove usage of BrowserThread in content/browser/loader. (Closed)
Patch Set: Fix unittests redness Created 3 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 unified diff | Download patch
OLDNEW
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/loader/resource_message_filter.h" 5 #include "content/browser/loader/resource_message_filter.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/browser/appcache/chrome_appcache_service.h" 8 #include "content/browser/appcache/chrome_appcache_service.h"
9 #include "content/browser/blob_storage/chrome_blob_storage_context.h" 9 #include "content/browser/blob_storage/chrome_blob_storage_context.h"
10 #include "content/browser/loader/loader_globals.h"
jam 2017/03/30 17:34:09 can we just pass the IO task runner to this class'
ananta 2017/03/30 22:51:22 Done.
10 #include "content/browser/loader/resource_dispatcher_host_impl.h" 11 #include "content/browser/loader/resource_dispatcher_host_impl.h"
11 #include "content/browser/loader/resource_requester_info.h" 12 #include "content/browser/loader/resource_requester_info.h"
12 #include "content/browser/loader/url_loader_factory_impl.h" 13 #include "content/browser/loader/url_loader_factory_impl.h"
13 #include "content/browser/service_worker/service_worker_context_wrapper.h" 14 #include "content/browser/service_worker/service_worker_context_wrapper.h"
14 #include "content/common/resource_messages.h" 15 #include "content/common/resource_messages.h"
15 #include "content/public/browser/browser_thread.h"
16 #include "content/public/browser/resource_context.h" 16 #include "content/public/browser/resource_context.h"
17 #include "storage/browser/fileapi/file_system_context.h" 17 #include "storage/browser/fileapi/file_system_context.h"
18 18
19 namespace content { 19 namespace content {
20 20
21 ResourceMessageFilter::ResourceMessageFilter( 21 ResourceMessageFilter::ResourceMessageFilter(
22 int child_id, 22 int child_id,
23 ChromeAppCacheService* appcache_service, 23 ChromeAppCacheService* appcache_service,
24 ChromeBlobStorageContext* blob_storage_context, 24 ChromeBlobStorageContext* blob_storage_context,
25 storage::FileSystemContext* file_system_context, 25 storage::FileSystemContext* file_system_context,
26 ServiceWorkerContextWrapper* service_worker_context, 26 ServiceWorkerContextWrapper* service_worker_context,
27 const GetContextsCallback& get_contexts_callback) 27 const GetContextsCallback& get_contexts_callback)
28 : BrowserMessageFilter(ResourceMsgStart), 28 : BrowserMessageFilter(ResourceMsgStart),
29 BrowserAssociatedInterface<mojom::URLLoaderFactory>(this, this), 29 BrowserAssociatedInterface<mojom::URLLoaderFactory>(this, this),
30 is_channel_closed_(false), 30 is_channel_closed_(false),
31 requester_info_( 31 requester_info_(
32 ResourceRequesterInfo::CreateForRenderer(child_id, 32 ResourceRequesterInfo::CreateForRenderer(child_id,
33 appcache_service, 33 appcache_service,
34 blob_storage_context, 34 blob_storage_context,
35 file_system_context, 35 file_system_context,
36 service_worker_context, 36 service_worker_context,
37 get_contexts_callback)), 37 get_contexts_callback)),
38 weak_ptr_factory_(this) { 38 weak_ptr_factory_(this) {
39 DCHECK_CURRENTLY_ON(BrowserThread::UI); 39 DCHECK(LoaderGlobals::Get()
40 ->main_thread_task_runner()
41 ->BelongsToCurrentThread());
40 } 42 }
41 43
42 ResourceMessageFilter::~ResourceMessageFilter() { 44 ResourceMessageFilter::~ResourceMessageFilter() {
43 DCHECK_CURRENTLY_ON(BrowserThread::IO); 45 DCHECK(
46 LoaderGlobals::Get()->io_thread_task_runner()->BelongsToCurrentThread());
44 DCHECK(is_channel_closed_); 47 DCHECK(is_channel_closed_);
45 DCHECK(!weak_ptr_factory_.HasWeakPtrs()); 48 DCHECK(!weak_ptr_factory_.HasWeakPtrs());
46 } 49 }
47 50
48 void ResourceMessageFilter::OnFilterAdded(IPC::Channel*) { 51 void ResourceMessageFilter::OnFilterAdded(IPC::Channel*) {
49 DCHECK_CURRENTLY_ON(BrowserThread::IO); 52 DCHECK(
jam 2017/03/29 15:44:33 can use ThreadChecker that's initialized here
ananta 2017/03/29 19:41:04 Leaving this as is as we need the runner in some p
53 LoaderGlobals::Get()->io_thread_task_runner()->BelongsToCurrentThread());
50 InitializeOnIOThread(); 54 InitializeOnIOThread();
51 } 55 }
52 56
53 void ResourceMessageFilter::OnChannelClosing() { 57 void ResourceMessageFilter::OnChannelClosing() {
54 DCHECK_CURRENTLY_ON(BrowserThread::IO); 58 DCHECK(
59 LoaderGlobals::Get()->io_thread_task_runner()->BelongsToCurrentThread());
55 60
56 // Unhook us from all pending network requests so they don't get sent to a 61 // Unhook us from all pending network requests so they don't get sent to a
57 // deleted object. 62 // deleted object.
58 ResourceDispatcherHostImpl::Get()->CancelRequestsForProcess( 63 ResourceDispatcherHostImpl::Get()->CancelRequestsForProcess(
59 requester_info_->child_id()); 64 requester_info_->child_id());
60 65
61 weak_ptr_factory_.InvalidateWeakPtrs(); 66 weak_ptr_factory_.InvalidateWeakPtrs();
62 is_channel_closed_ = true; 67 is_channel_closed_ = true;
63 } 68 }
64 69
65 bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) { 70 bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
66 DCHECK_CURRENTLY_ON(BrowserThread::IO); 71 DCHECK(
72 LoaderGlobals::Get()->io_thread_task_runner()->BelongsToCurrentThread());
67 // Check if InitializeOnIOThread() has been called. 73 // Check if InitializeOnIOThread() has been called.
68 DCHECK_EQ(this, requester_info_->filter()); 74 DCHECK_EQ(this, requester_info_->filter());
69 return ResourceDispatcherHostImpl::Get()->OnMessageReceived( 75 return ResourceDispatcherHostImpl::Get()->OnMessageReceived(
70 message, requester_info_.get()); 76 message, requester_info_.get());
71 } 77 }
72 78
73 void ResourceMessageFilter::OnDestruct() const { 79 void ResourceMessageFilter::OnDestruct() const {
74 // Destroy the filter on the IO thread since that's where its weak pointers 80 // Destroy the filter on the IO thread since that's where its weak pointers
75 // are being used. 81 // are being used.
76 BrowserThread::DeleteOnIOThread::Destruct(this); 82 if (!LoaderGlobals::Get()
83 ->io_thread_task_runner()
84 ->BelongsToCurrentThread()) {
85 LoaderGlobals::Get()->io_thread_task_runner()->DeleteSoon(FROM_HERE, this);
86 }
77 } 87 }
78 88
79 base::WeakPtr<ResourceMessageFilter> ResourceMessageFilter::GetWeakPtr() { 89 base::WeakPtr<ResourceMessageFilter> ResourceMessageFilter::GetWeakPtr() {
80 DCHECK_CURRENTLY_ON(BrowserThread::IO); 90 DCHECK(
91 LoaderGlobals::Get()->io_thread_task_runner()->BelongsToCurrentThread());
81 return is_channel_closed_ ? nullptr : weak_ptr_factory_.GetWeakPtr(); 92 return is_channel_closed_ ? nullptr : weak_ptr_factory_.GetWeakPtr();
82 } 93 }
83 94
84 void ResourceMessageFilter::CreateLoaderAndStart( 95 void ResourceMessageFilter::CreateLoaderAndStart(
85 mojom::URLLoaderAssociatedRequest request, 96 mojom::URLLoaderAssociatedRequest request,
86 int32_t routing_id, 97 int32_t routing_id,
87 int32_t request_id, 98 int32_t request_id,
88 const ResourceRequest& url_request, 99 const ResourceRequest& url_request,
89 mojom::URLLoaderClientPtr client) { 100 mojom::URLLoaderClientPtr client) {
90 URLLoaderFactoryImpl::CreateLoaderAndStart( 101 URLLoaderFactoryImpl::CreateLoaderAndStart(
(...skipping 11 matching lines...) Expand all
102 113
103 int ResourceMessageFilter::child_id() const { 114 int ResourceMessageFilter::child_id() const {
104 return requester_info_->child_id(); 115 return requester_info_->child_id();
105 } 116 }
106 117
107 void ResourceMessageFilter::InitializeForTest() { 118 void ResourceMessageFilter::InitializeForTest() {
108 InitializeOnIOThread(); 119 InitializeOnIOThread();
109 } 120 }
110 121
111 void ResourceMessageFilter::InitializeOnIOThread() { 122 void ResourceMessageFilter::InitializeOnIOThread() {
112 DCHECK_CURRENTLY_ON(BrowserThread::IO); 123 DCHECK(
124 LoaderGlobals::Get()->io_thread_task_runner()->BelongsToCurrentThread());
113 // The WeakPtr of the filter must be created on the IO thread. So sets the 125 // The WeakPtr of the filter must be created on the IO thread. So sets the
114 // WeakPtr of |requester_info_| now. 126 // WeakPtr of |requester_info_| now.
115 requester_info_->set_filter(GetWeakPtr()); 127 requester_info_->set_filter(GetWeakPtr());
116 } 128 }
117 129
118 } // namespace content 130 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698