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 0863976386bf431323f5792f059b139d5fbcec38..a7969e628bb6ebb924a9c6de3ebf4230aa42ffd9 100644 |
--- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
+++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
@@ -85,6 +85,7 @@ |
#if defined(OS_ANDROID) |
#include "chrome/browser/android/intercept_download_resource_throttle.h" |
+#include "chrome/browser/android/url_utilities.h" |
#include "chrome/browser/ui/android/infobars/auto_login_prompter.h" |
#include "components/navigation_interception/intercept_navigation_delegate.h" |
#endif |
@@ -323,7 +324,15 @@ void ChromeResourceDispatcherHostDelegate::RequestBeginning( |
#if defined(OS_ANDROID) |
// TODO(davidben): This is insufficient to integrate with prerender properly. |
// https://crbug.com/370595 |
- if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME && !is_prerendering) { |
+ // |
+ // https://crbug.com/410524: If the requested url can't be handled by chrome |
+ // showing a dedicated app or an intent picker even for sub frame is better |
+ // than showing an error page. In this case, chrome won't be listed in an |
+ // intent picker as an option. |
+ if (!is_prerendering && (resource_type == content::RESOURCE_TYPE_MAIN_FRAME || |
+ (resource_type == content::RESOURCE_TYPE_SUB_FRAME && |
+ !IsAcceptedScheme(request->url().spec()) && |
+ !IsDownloadableScheme(request->url().spec())))) { |
throttles->push_back( |
InterceptNavigationDelegate::CreateThrottleFor(request)); |
} |