| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/navigation_interception/intercept_navigation_delegate.h" |
| #include "components/navigation_interception/navigation_params.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/web_contents.h" |
| #include "jni/InterceptNavigationDelegateImpl_jni.h" |
| #include "net/base/escape.h" |
| |
| namespace { |
| |
| using navigation_interception::InterceptNavigationDelegate; |
| using navigation_interception::NavigationParams; |
| |
| class ChromeInterceptNavigationDelegate : public InterceptNavigationDelegate { |
| public: |
| ChromeInterceptNavigationDelegate(JNIEnv* env, jobject jdelegate) |
| : InterceptNavigationDelegate(env, jdelegate) {} |
| |
| bool ShouldIgnoreNavigation( |
| const NavigationParams& navigation_params) override { |
| NavigationParams chrome_navigation_params(navigation_params); |
| chrome_navigation_params.url() = |
| GURL(net::EscapeExternalHandlerValue(navigation_params.url().spec())); |
| return InterceptNavigationDelegate::ShouldIgnoreNavigation( |
| chrome_navigation_params); |
| } |
| }; |
| |
| } // namespace |
| |
| static void JNI_InterceptNavigationDelegateImpl_AssociateWithWebContents( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& jdelegate, |
| const base::android::JavaParamRef<jobject>& jweb_contents) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| content::WebContents* web_contents = |
| content::WebContents::FromJavaWebContents(jweb_contents); |
| InterceptNavigationDelegate::Associate( |
| web_contents, |
| std::make_unique<ChromeInterceptNavigationDelegate>(env, jdelegate)); |
| } |