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

Side by Side Diff: android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc

Issue 1852513003: Convert //android_webview to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git is hard Created 4 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 "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h" 5 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h"
6 6
7 #include <memory>
7 #include <string> 8 #include <string>
8 9
9 #include "android_webview/browser/aw_contents_io_thread_client.h" 10 #include "android_webview/browser/aw_contents_io_thread_client.h"
10 #include "android_webview/browser/aw_login_delegate.h" 11 #include "android_webview/browser/aw_login_delegate.h"
11 #include "android_webview/browser/aw_resource_context.h" 12 #include "android_webview/browser/aw_resource_context.h"
12 #include "android_webview/common/url_constants.h" 13 #include "android_webview/common/url_constants.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/scoped_vector.h" 14 #include "base/memory/scoped_vector.h"
15 #include "components/auto_login_parser/auto_login_parser.h" 15 #include "components/auto_login_parser/auto_login_parser.h"
16 #include "components/navigation_interception/intercept_navigation_delegate.h" 16 #include "components/navigation_interception/intercept_navigation_delegate.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/resource_controller.h" 18 #include "content/public/browser/resource_controller.h"
19 #include "content/public/browser/resource_dispatcher_host.h" 19 #include "content/public/browser/resource_dispatcher_host.h"
20 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" 20 #include "content/public/browser/resource_dispatcher_host_login_delegate.h"
21 #include "content/public/browser/resource_request_info.h" 21 #include "content/public/browser/resource_request_info.h"
22 #include "content/public/browser/resource_throttle.h" 22 #include "content/public/browser/resource_throttle.h"
23 #include "net/base/load_flags.h" 23 #include "net/base/load_flags.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 const char* GetNameForLogging() const override; 73 const char* GetNameForLogging() const override;
74 74
75 void OnIoThreadClientReady(int new_render_process_id, 75 void OnIoThreadClientReady(int new_render_process_id,
76 int new_render_frame_id); 76 int new_render_frame_id);
77 bool MaybeBlockRequest(); 77 bool MaybeBlockRequest();
78 bool ShouldBlockRequest(); 78 bool ShouldBlockRequest();
79 int render_process_id() const { return render_process_id_; } 79 int render_process_id() const { return render_process_id_; }
80 int render_frame_id() const { return render_frame_id_; } 80 int render_frame_id() const { return render_frame_id_; }
81 81
82 private: 82 private:
83 scoped_ptr<AwContentsIoThreadClient> GetIoThreadClient() const; 83 std::unique_ptr<AwContentsIoThreadClient> GetIoThreadClient() const;
84 84
85 int render_process_id_; 85 int render_process_id_;
86 int render_frame_id_; 86 int render_frame_id_;
87 net::URLRequest* request_; 87 net::URLRequest* request_;
88 }; 88 };
89 89
90 IoThreadClientThrottle::IoThreadClientThrottle(int render_process_id, 90 IoThreadClientThrottle::IoThreadClientThrottle(int render_process_id,
91 int render_frame_id, 91 int render_frame_id,
92 net::URLRequest* request) 92 net::URLRequest* request)
93 : render_process_id_(render_process_id), 93 : render_process_id_(render_process_id),
94 render_frame_id_(render_frame_id), 94 render_frame_id_(render_frame_id),
95 request_(request) { } 95 request_(request) { }
96 96
97 IoThreadClientThrottle::~IoThreadClientThrottle() { 97 IoThreadClientThrottle::~IoThreadClientThrottle() {
98 DCHECK_CURRENTLY_ON(BrowserThread::IO); 98 DCHECK_CURRENTLY_ON(BrowserThread::IO);
99 g_webview_resource_dispatcher_host_delegate.Get(). 99 g_webview_resource_dispatcher_host_delegate.Get().
100 RemovePendingThrottleOnIoThread(this); 100 RemovePendingThrottleOnIoThread(this);
101 } 101 }
102 102
103 const char* IoThreadClientThrottle::GetNameForLogging() const { 103 const char* IoThreadClientThrottle::GetNameForLogging() const {
104 return "IoThreadClientThrottle"; 104 return "IoThreadClientThrottle";
105 } 105 }
106 106
107 scoped_ptr<AwContentsIoThreadClient> 107 std::unique_ptr<AwContentsIoThreadClient>
108 IoThreadClientThrottle::GetIoThreadClient() const { 108 IoThreadClientThrottle::GetIoThreadClient() const {
109 if (content::ResourceRequestInfo::OriginatedFromServiceWorker(request_)) 109 if (content::ResourceRequestInfo::OriginatedFromServiceWorker(request_))
110 return AwContentsIoThreadClient::GetServiceWorkerIoThreadClient(); 110 return AwContentsIoThreadClient::GetServiceWorkerIoThreadClient();
111 111
112 return AwContentsIoThreadClient::FromID(render_process_id_, render_frame_id_); 112 return AwContentsIoThreadClient::FromID(render_process_id_, render_frame_id_);
113 } 113 }
114 114
115 void IoThreadClientThrottle::WillStartRequest(bool* defer) { 115 void IoThreadClientThrottle::WillStartRequest(bool* defer) {
116 DCHECK_CURRENTLY_ON(BrowserThread::IO); 116 DCHECK_CURRENTLY_ON(BrowserThread::IO);
117 // valid render_frame_id_ implies nonzero render_processs_id_ 117 // valid render_frame_id_ implies nonzero render_processs_id_
118 DCHECK((render_frame_id_ < 1) || (render_process_id_ != 0)); 118 DCHECK((render_frame_id_ < 1) || (render_process_id_ != 0));
119 *defer = false; 119 *defer = false;
120 120
121 // Defer all requests of a pop up that is still not associated with Java 121 // Defer all requests of a pop up that is still not associated with Java
122 // client so that the client will get a chance to override requests. 122 // client so that the client will get a chance to override requests.
123 scoped_ptr<AwContentsIoThreadClient> io_client = GetIoThreadClient(); 123 std::unique_ptr<AwContentsIoThreadClient> io_client = GetIoThreadClient();
124 if (io_client && io_client->PendingAssociation()) { 124 if (io_client && io_client->PendingAssociation()) {
125 *defer = true; 125 *defer = true;
126 AwResourceDispatcherHostDelegate::AddPendingThrottle( 126 AwResourceDispatcherHostDelegate::AddPendingThrottle(
127 render_process_id_, render_frame_id_, this); 127 render_process_id_, render_frame_id_, this);
128 } else { 128 } else {
129 MaybeBlockRequest(); 129 MaybeBlockRequest();
130 } 130 }
131 } 131 }
132 132
133 void IoThreadClientThrottle::WillRedirectRequest( 133 void IoThreadClientThrottle::WillRedirectRequest(
(...skipping 13 matching lines...) Expand all
147 147
148 bool IoThreadClientThrottle::MaybeBlockRequest() { 148 bool IoThreadClientThrottle::MaybeBlockRequest() {
149 if (ShouldBlockRequest()) { 149 if (ShouldBlockRequest()) {
150 controller()->CancelWithError(net::ERR_ACCESS_DENIED); 150 controller()->CancelWithError(net::ERR_ACCESS_DENIED);
151 return true; 151 return true;
152 } 152 }
153 return false; 153 return false;
154 } 154 }
155 155
156 bool IoThreadClientThrottle::ShouldBlockRequest() { 156 bool IoThreadClientThrottle::ShouldBlockRequest() {
157 scoped_ptr<AwContentsIoThreadClient> io_client = GetIoThreadClient(); 157 std::unique_ptr<AwContentsIoThreadClient> io_client = GetIoThreadClient();
158 if (!io_client) 158 if (!io_client)
159 return false; 159 return false;
160 160
161 // Part of implementation of WebSettings.allowContentAccess. 161 // Part of implementation of WebSettings.allowContentAccess.
162 if (request_->url().SchemeIs(url::kContentScheme) && 162 if (request_->url().SchemeIs(url::kContentScheme) &&
163 io_client->ShouldBlockContentUrls()) { 163 io_client->ShouldBlockContentUrls()) {
164 return true; 164 return true;
165 } 165 }
166 166
167 // Part of implementation of WebSettings.allowFileAccess. 167 // Part of implementation of WebSettings.allowFileAccess.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 content::ResourceContext* resource_context, 238 content::ResourceContext* resource_context,
239 content::ResourceResponse* response) { 239 content::ResourceResponse* response) {
240 AddExtraHeadersIfNeeded(request, resource_context); 240 AddExtraHeadersIfNeeded(request, resource_context);
241 } 241 }
242 242
243 void AwResourceDispatcherHostDelegate::RequestComplete( 243 void AwResourceDispatcherHostDelegate::RequestComplete(
244 net::URLRequest* request) { 244 net::URLRequest* request) {
245 if (request && !request->status().is_success()) { 245 if (request && !request->status().is_success()) {
246 const content::ResourceRequestInfo* request_info = 246 const content::ResourceRequestInfo* request_info =
247 content::ResourceRequestInfo::ForRequest(request); 247 content::ResourceRequestInfo::ForRequest(request);
248 scoped_ptr<AwContentsIoThreadClient> io_client = 248 std::unique_ptr<AwContentsIoThreadClient> io_client =
249 AwContentsIoThreadClient::FromID(request_info->GetChildID(), 249 AwContentsIoThreadClient::FromID(request_info->GetChildID(),
250 request_info->GetRenderFrameID()); 250 request_info->GetRenderFrameID());
251 if (io_client) { 251 if (io_client) {
252 io_client->OnReceivedError(request); 252 io_client->OnReceivedError(request);
253 } else { 253 } else {
254 DLOG(WARNING) << "io_client is null, onReceivedError dropped for " << 254 DLOG(WARNING) << "io_client is null, onReceivedError dropped for " <<
255 request->url(); 255 request->url();
256 } 256 }
257 } 257 }
258 } 258 }
(...skipping 23 matching lines...) Expand all
282 response_headers->GetNormalizedHeader("content-disposition", 282 response_headers->GetNormalizedHeader("content-disposition",
283 &content_disposition); 283 &content_disposition);
284 response_headers->GetMimeType(&mime_type); 284 response_headers->GetMimeType(&mime_type);
285 } 285 }
286 286
287 request->Cancel(); 287 request->Cancel();
288 288
289 const content::ResourceRequestInfo* request_info = 289 const content::ResourceRequestInfo* request_info =
290 content::ResourceRequestInfo::ForRequest(request); 290 content::ResourceRequestInfo::ForRequest(request);
291 291
292 scoped_ptr<AwContentsIoThreadClient> io_client = 292 std::unique_ptr<AwContentsIoThreadClient> io_client =
293 AwContentsIoThreadClient::FromID( 293 AwContentsIoThreadClient::FromID(child_id,
294 child_id, request_info->GetRenderFrameID()); 294 request_info->GetRenderFrameID());
295 295
296 // POST request cannot be repeated in general, so prevent client from 296 // POST request cannot be repeated in general, so prevent client from
297 // retrying the same request, even if it is with a GET. 297 // retrying the same request, even if it is with a GET.
298 if ("GET" == request->method() && io_client) { 298 if ("GET" == request->method() && io_client) {
299 io_client->NewDownload(url, 299 io_client->NewDownload(url,
300 user_agent, 300 user_agent,
301 content_disposition, 301 content_disposition,
302 mime_type, 302 mime_type,
303 content_length); 303 content_length);
304 } 304 }
(...skipping 30 matching lines...) Expand all
335 DLOG(FATAL) << "Started request without associated info: " << 335 DLOG(FATAL) << "Started request without associated info: " <<
336 request->url(); 336 request->url();
337 return; 337 return;
338 } 338 }
339 339
340 if (request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) { 340 if (request_info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME) {
341 // Check for x-auto-login header. 341 // Check for x-auto-login header.
342 auto_login_parser::HeaderData header_data; 342 auto_login_parser::HeaderData header_data;
343 if (auto_login_parser::ParserHeaderInResponse( 343 if (auto_login_parser::ParserHeaderInResponse(
344 request, auto_login_parser::ALLOW_ANY_REALM, &header_data)) { 344 request, auto_login_parser::ALLOW_ANY_REALM, &header_data)) {
345 scoped_ptr<AwContentsIoThreadClient> io_client = 345 std::unique_ptr<AwContentsIoThreadClient> io_client =
346 AwContentsIoThreadClient::FromID(request_info->GetChildID(), 346 AwContentsIoThreadClient::FromID(request_info->GetChildID(),
347 request_info->GetRenderFrameID()); 347 request_info->GetRenderFrameID());
348 if (io_client) { 348 if (io_client) {
349 io_client->NewLoginRequest( 349 io_client->NewLoginRequest(
350 header_data.realm, header_data.account, header_data.args); 350 header_data.realm, header_data.account, header_data.args);
351 } 351 }
352 } 352 }
353 } 353 }
354 } 354 }
355 355
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 net::HttpRequestHeaders headers; 438 net::HttpRequestHeaders headers;
439 headers.AddHeadersFromString(extra_headers); 439 headers.AddHeadersFromString(extra_headers);
440 for (net::HttpRequestHeaders::Iterator it(headers); it.GetNext(); ) { 440 for (net::HttpRequestHeaders::Iterator it(headers); it.GetNext(); ) {
441 request->SetExtraRequestHeaderByName(it.name(), it.value(), false); 441 request->SetExtraRequestHeaderByName(it.name(), it.value(), false);
442 } 442 }
443 } 443 }
444 } 444 }
445 } 445 }
446 446
447 } // namespace android_webview 447 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/browser/net/token_binding_manager.cc ('k') | android_webview/browser/scoped_app_gl_state_restore.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698