#include "components/navigation_interception/intercept_navigation_delegate.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
#include "components/external_intents/android/jni_headers/InterceptNavigationDelegateImpl_jni.h"
namespace external_intents {
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);
navigation_interception::InterceptNavigationDelegate::Associate(
web_contents,
std::make_unique<navigation_interception::InterceptNavigationDelegate>(
env, jdelegate, true));
}
static void JNI_InterceptNavigationDelegateImpl_ClearWebContentsAssociation(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jweb_contents) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(jweb_contents);
if (!web_contents) {
return;
}
navigation_interception::InterceptNavigationDelegate::Associate(web_contents,
nullptr);
}
static void JNI_InterceptNavigationDelegateImpl_OnSubframeAsyncActionTaken(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jweb_contents,
const base::android::JavaParamRef<jobject>& j_gurl) {
content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(jweb_contents);
navigation_interception::InterceptNavigationDelegate* delegate =
navigation_interception::InterceptNavigationDelegate::Get(web_contents);
CHECK(delegate);
delegate->OnSubframeAsyncActionTaken(env, j_gurl);
}
}
DEFINE_JNI(InterceptNavigationDelegateImpl)