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

Side by Side Diff: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc

Issue 1091253008: Fix an issue that external protocol in subframes are not handled on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase and fix test Created 5 years, 7 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 "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate. h" 5 #include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate. h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 url, 231 url,
232 GURL(), 232 GURL(),
233 &plugin)) { 233 &plugin)) {
234 return true; 234 return true;
235 } 235 }
236 } 236 }
237 return false; 237 return false;
238 } 238 }
239 #endif // !defined(ENABLE_EXTENSIONS) 239 #endif // !defined(ENABLE_EXTENSIONS)
240 240
241 #if !defined(OS_ANDROID) 241 void LaunchURL(
242 void LaunchURL(const GURL& url, int render_process_id, int render_view_id) { 242 const GURL& url,
243 int render_process_id,
244 int render_view_id,
245 ui::PageTransition page_transition,
246 bool has_user_gesture) {
243 // If there is no longer a WebContents, the request may have raced with tab 247 // If there is no longer a WebContents, the request may have raced with tab
244 // closing. Don't fire the external request. (It may have been a prerender.) 248 // closing. Don't fire the external request. (It may have been a prerender.)
245 content::WebContents* web_contents = 249 content::WebContents* web_contents =
246 tab_util::GetWebContentsByID(render_process_id, render_view_id); 250 tab_util::GetWebContentsByID(render_process_id, render_view_id);
247 if (!web_contents) 251 if (!web_contents)
248 return; 252 return;
249 253
250 // Do not launch external requests attached to unswapped prerenders. 254 // Do not launch external requests attached to unswapped prerenders.
251 prerender::PrerenderContents* prerender_contents = 255 prerender::PrerenderContents* prerender_contents =
252 prerender::PrerenderContents::FromWebContents(web_contents); 256 prerender::PrerenderContents::FromWebContents(web_contents);
253 if (prerender_contents) { 257 if (prerender_contents) {
254 prerender_contents->Destroy(prerender::FINAL_STATUS_UNSUPPORTED_SCHEME); 258 prerender_contents->Destroy(prerender::FINAL_STATUS_UNSUPPORTED_SCHEME);
255 prerender::ReportPrerenderExternalURL(); 259 prerender::ReportPrerenderExternalURL();
256 return; 260 return;
257 } 261 }
258 262
259 ExternalProtocolHandler::LaunchUrlWithDelegate( 263 ExternalProtocolHandler::LaunchUrlWithDelegate(
260 url, 264 url,
261 render_process_id, 265 render_process_id,
262 render_view_id, 266 render_view_id,
267 page_transition,
268 has_user_gesture,
263 g_external_protocol_handler_delegate); 269 g_external_protocol_handler_delegate);
264 } 270 }
265 #endif // !defined(OS_ANDROID)
266 271
267 #if !defined(DISABLE_NACL) 272 #if !defined(DISABLE_NACL)
268 void AppendComponentUpdaterThrottles( 273 void AppendComponentUpdaterThrottles(
269 net::URLRequest* request, 274 net::URLRequest* request,
270 content::ResourceContext* resource_context, 275 content::ResourceContext* resource_context,
271 ResourceType resource_type, 276 ResourceType resource_type,
272 ScopedVector<content::ResourceThrottle>* throttles) { 277 ScopedVector<content::ResourceThrottle>* throttles) {
273 const char* crx_id = NULL; 278 const char* crx_id = NULL;
274 component_updater::ComponentUpdateService* cus = 279 component_updater::ComponentUpdateService* cus =
275 g_browser_process->component_updater(); 280 g_browser_process->component_updater();
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 513
509 ResourceDispatcherHostLoginDelegate* 514 ResourceDispatcherHostLoginDelegate*
510 ChromeResourceDispatcherHostDelegate::CreateLoginDelegate( 515 ChromeResourceDispatcherHostDelegate::CreateLoginDelegate(
511 net::AuthChallengeInfo* auth_info, net::URLRequest* request) { 516 net::AuthChallengeInfo* auth_info, net::URLRequest* request) {
512 return CreateLoginPrompt(auth_info, request); 517 return CreateLoginPrompt(auth_info, request);
513 } 518 }
514 519
515 bool ChromeResourceDispatcherHostDelegate::HandleExternalProtocol( 520 bool ChromeResourceDispatcherHostDelegate::HandleExternalProtocol(
516 const GURL& url, 521 const GURL& url,
517 int child_id, 522 int child_id,
518 int route_id) { 523 int route_id,
519 #if defined(OS_ANDROID) 524 bool is_main_frame,
520 // Android use a resource throttle to handle external as well as internal 525 ui::PageTransition page_transition,
521 // protocols. 526 bool has_user_gesture) {
522 return false;
523 #else
524
525 #if defined(ENABLE_EXTENSIONS) 527 #if defined(ENABLE_EXTENSIONS)
526 if (extensions::WebViewRendererState::GetInstance()->IsGuest(child_id)) 528 if (extensions::WebViewRendererState::GetInstance()->IsGuest(child_id))
527 return false; 529 return false;
528
529 #endif // defined(ENABLE_EXTENSIONS) 530 #endif // defined(ENABLE_EXTENSIONS)
530 531
531 BrowserThread::PostTask(BrowserThread::UI, 532 #if defined(OS_ANDROID)
532 FROM_HERE, 533 // Main frame external protocols are handled by
533 base::Bind(&LaunchURL, url, child_id, route_id)); 534 // InterceptNavigationResourceThrottle.
535 if (is_main_frame)
536 return false;
537 #endif // defined(ANDROID)
538
539 BrowserThread::PostTask(
540 BrowserThread::UI,
541 FROM_HERE,
542 base::Bind(&LaunchURL, url, child_id, route_id, page_transition,
543 has_user_gesture));
534 return true; 544 return true;
535 #endif
536 } 545 }
537 546
538 void ChromeResourceDispatcherHostDelegate::AppendStandardResourceThrottles( 547 void ChromeResourceDispatcherHostDelegate::AppendStandardResourceThrottles(
539 net::URLRequest* request, 548 net::URLRequest* request,
540 content::ResourceContext* resource_context, 549 content::ResourceContext* resource_context,
541 ResourceType resource_type, 550 ResourceType resource_type,
542 ScopedVector<content::ResourceThrottle>* throttles) { 551 ScopedVector<content::ResourceThrottle>* throttles) {
543 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); 552 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context);
544 #if defined(SAFE_BROWSING_SERVICE) 553 #if defined(SAFE_BROWSING_SERVICE)
545 // Insert safe browsing at the front of the list, so it gets to decide on 554 // Insert safe browsing at the front of the list, so it gets to decide on
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 url_request->GetTotalReceivedBytes())); 770 url_request->GetTotalReceivedBytes()));
762 } 771 }
763 } 772 }
764 773
765 // static 774 // static
766 void ChromeResourceDispatcherHostDelegate:: 775 void ChromeResourceDispatcherHostDelegate::
767 SetExternalProtocolHandlerDelegateForTesting( 776 SetExternalProtocolHandlerDelegateForTesting(
768 ExternalProtocolHandler::Delegate* delegate) { 777 ExternalProtocolHandler::Delegate* delegate) {
769 g_external_protocol_handler_delegate = delegate; 778 g_external_protocol_handler_delegate = delegate;
770 } 779 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698