Index: chrome/browser/chromeos/arc/arc_navigation_throttle.cc |
diff --git a/chrome/browser/chromeos/arc/arc_navigation_throttle.cc b/chrome/browser/chromeos/arc/arc_navigation_throttle.cc |
index 93131e18347c362bde6d5e6e1a02086bee645461..0275bb7befbd74bc18a055f23cdf9096e811025e 100644 |
--- a/chrome/browser/chromeos/arc/arc_navigation_throttle.cc |
+++ b/chrome/browser/chromeos/arc/arc_navigation_throttle.cc |
@@ -16,6 +16,7 @@ |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/navigation_handle.h" |
#include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
+#include "ui/base/page_transition_types.h" |
namespace arc { |
@@ -63,8 +64,22 @@ ArcNavigationThrottle::~ArcNavigationThrottle() = default; |
content::NavigationThrottle::ThrottleCheckResult |
ArcNavigationThrottle::WillStartRequest() { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
- if (!navigation_handle()->HasUserGesture()) |
+ |
+ const ui::PageTransition transition = |
+ navigation_handle()->GetPageTransition(); |
+ |
+ if (!ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_LINK)) { |
+ // If this navigation event wasn't spawned by the user clicking on a link. |
+ return content::NavigationThrottle::PROCEED; |
+ } |
+ |
+ if (ui::PageTransitionGetQualifier(transition) != 0) { |
+ // Qualifiers indicate that this navigation was the result of a click on a |
+ // forward/back button, or a redirect, or typing in the URL bar, etc. Don't |
+ // pass any of those types of navigations to the intent helper (see |
+ // crbug.com/630072). |
return content::NavigationThrottle::PROCEED; |
+ } |
if (!ShouldOverrideUrlLoading(navigation_handle())) |
return content::NavigationThrottle::PROCEED; |