blob: 76722b7f4ba03c573c7f878b145e790703355d01 [file] [log] [blame]
// 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));
}