Index: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
index 8643a363d89017ff35c38f4ef1f71341941e3ca3..736f1af4cd5ae005370dbbe9130482634237c739 100644 |
--- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
+++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
@@ -238,8 +238,12 @@ bool IsPluginEnabledForExtension(const Extension* extension, |
} |
#endif // !defined(ENABLE_EXTENSIONS) |
-#if !defined(OS_ANDROID) |
-void LaunchURL(const GURL& url, int render_process_id, int render_view_id) { |
+void LaunchURL( |
+ const GURL& url, |
+ int render_process_id, |
+ int render_view_id, |
+ ui::PageTransition page_transition, |
+ bool has_user_gesture) { |
// If there is no longer a WebContents, the request may have raced with tab |
// closing. Don't fire the external request. (It may have been a prerender.) |
content::WebContents* web_contents = |
@@ -260,9 +264,10 @@ void LaunchURL(const GURL& url, int render_process_id, int render_view_id) { |
url, |
render_process_id, |
render_view_id, |
+ page_transition, |
+ has_user_gesture, |
g_external_protocol_handler_delegate); |
} |
-#endif // !defined(OS_ANDROID) |
#if !defined(DISABLE_NACL) |
void AppendComponentUpdaterThrottles( |
@@ -515,24 +520,28 @@ ResourceDispatcherHostLoginDelegate* |
bool ChromeResourceDispatcherHostDelegate::HandleExternalProtocol( |
const GURL& url, |
int child_id, |
- int route_id) { |
-#if defined(OS_ANDROID) |
- // Android use a resource throttle to handle external as well as internal |
- // protocols. |
- return false; |
-#else |
- |
+ int route_id, |
+ bool is_main_frame, |
+ ui::PageTransition page_transition, |
+ bool has_user_gesture) { |
#if defined(ENABLE_EXTENSIONS) |
if (extensions::WebViewRendererState::GetInstance()->IsGuest(child_id)) |
return false; |
- |
#endif // defined(ENABLE_EXTENSIONS) |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&LaunchURL, url, child_id, route_id)); |
+#if defined(OS_ANDROID) |
+ // Main frame external protocols are handled by |
+ // InterceptNavigationResourceThrottle. |
+ if (is_main_frame) |
+ return false; |
+#endif // defined(ANDROID) |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, |
+ FROM_HERE, |
+ base::Bind(&LaunchURL, url, child_id, route_id, page_transition, |
+ has_user_gesture)); |
return true; |
-#endif |
} |
void ChromeResourceDispatcherHostDelegate::AppendStandardResourceThrottles( |