Commit ece38372 authored by Colin Blundell's avatar Colin Blundell Committed by Commit Bot

WebLayer: Prep for using //chrome's ExternalNavigationHandler

WebLayer's logic for launching external intents currently resides in a
static Java method that is called directly by C++. However, we are in
the course of changing WebLayer to share //chrome's
ExternalNavigationHandler.java, which will need to be a member of
TabImpl.java. To prepare for that change, this CL changes the C++->Java
hookup to go via TabImpl.

This CL has no behavioral changes. I tested manually that basic intent
launching still works in weblayer shell.

Bug: 1031465
Change-Id: Iaa8a16838226b70ec865316543fe51d81f95bca4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2100850
Commit-Queue: Colin Blundell <blundell@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#749762}
parent b01268ba
...@@ -78,7 +78,6 @@ ...@@ -78,7 +78,6 @@
#include "ui/base/resource/resource_bundle_android.h" #include "ui/base/resource/resource_bundle_android.h"
#include "weblayer/browser/android_descriptors.h" #include "weblayer/browser/android_descriptors.h"
#include "weblayer/browser/devtools_manager_delegate_android.h" #include "weblayer/browser/devtools_manager_delegate_android.h"
#include "weblayer/browser/java/jni/ExternalNavigationHandler_jni.h"
#include "weblayer/browser/safe_browsing/safe_browsing_service.h" #include "weblayer/browser/safe_browsing/safe_browsing_service.h"
#endif #endif
...@@ -589,9 +588,9 @@ bool ContentBrowserClientImpl::ShouldOverrideUrlLoading( ...@@ -589,9 +588,9 @@ bool ContentBrowserClientImpl::ShouldOverrideUrlLoading(
base::android::ScopedJavaLocalRef<jstring> jurl = base::android::ScopedJavaLocalRef<jstring> jurl =
base::android::ConvertUTF16ToJavaString(env, url); base::android::ConvertUTF16ToJavaString(env, url);
*ignore_navigation = Java_ExternalNavigationHandler_shouldOverrideUrlLoading( TabImpl* tab_impl = TabImpl::FromWebContents(web_contents);
env, TabImpl::FromWebContents(web_contents)->GetJavaTab(), jurl, *ignore_navigation = tab_impl->ShouldOverrideUrlLoading(
has_user_gesture, is_redirect, is_main_frame); env, jurl, has_user_gesture, is_redirect, is_main_frame);
if (base::android::HasException(env)) { if (base::android::HasException(env)) {
// Tell the chromium message loop to not perform any tasks after the // Tell the chromium message loop to not perform any tasks after the
......
...@@ -131,7 +131,6 @@ generate_jni("jni") { ...@@ -131,7 +131,6 @@ generate_jni("jni") {
"org/chromium/weblayer_private/DownloadCallbackProxy.java", "org/chromium/weblayer_private/DownloadCallbackProxy.java",
"org/chromium/weblayer_private/DownloadImpl.java", "org/chromium/weblayer_private/DownloadImpl.java",
"org/chromium/weblayer_private/ErrorPageCallbackProxy.java", "org/chromium/weblayer_private/ErrorPageCallbackProxy.java",
"org/chromium/weblayer_private/ExternalNavigationHandler.java",
"org/chromium/weblayer_private/FullscreenCallbackProxy.java", "org/chromium/weblayer_private/FullscreenCallbackProxy.java",
"org/chromium/weblayer_private/LocaleChangedBroadcastReceiver.java", "org/chromium/weblayer_private/LocaleChangedBroadcastReceiver.java",
"org/chromium/weblayer_private/NavigationControllerImpl.java", "org/chromium/weblayer_private/NavigationControllerImpl.java",
......
...@@ -10,20 +10,16 @@ import android.content.Intent; ...@@ -10,20 +10,16 @@ import android.content.Intent;
import android.provider.Browser; import android.provider.Browser;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
/** /**
* A class that handles navigations that should be transformed to intents. Logic taken primarly from * A class that handles navigations that should be transformed to intents. Logic taken primarly from
* //android_webview's AwContentsClient.java:sendBrowsingIntent(), with some additional logic * //android_webview's AwContentsClient.java:sendBrowsingIntent(), with some additional logic
* from //android_webview's WebViewBrowserActivity.java:startBrowsingIntent(). * from //android_webview's WebViewBrowserActivity.java:startBrowsingIntent().
*/ */
@JNINamespace("weblayer")
public class ExternalNavigationHandler { public class ExternalNavigationHandler {
private static final String TAG = "ExternalNavHandler"; private static final String TAG = "ExternalNavHandler";
@CalledByNative static boolean shouldOverrideUrlLoading(TabImpl tab, String url, boolean hasUserGesture,
private static boolean shouldOverrideUrlLoading(TabImpl tab, String url, boolean hasUserGesture,
boolean isRedirect, boolean isMainFrame) { boolean isRedirect, boolean isMainFrame) {
// TODO(blundell): Port over WebViewBrowserActivity's // TODO(blundell): Port over WebViewBrowserActivity's
// isSpecializedHandlerAvailable() check that checks whether there's an app for handling // isSpecializedHandlerAvailable() check that checks whether there's an app for handling
......
...@@ -501,6 +501,13 @@ public final class TabImpl extends ITab.Stub { ...@@ -501,6 +501,13 @@ public final class TabImpl extends ITab.Stub {
} }
} }
@CalledByNative
private boolean shouldOverrideUrlLoading(
String url, boolean hasUserGesture, boolean isRedirect, boolean isMainFrame) {
return ExternalNavigationHandler.shouldOverrideUrlLoading(
this, url, hasUserGesture, isRedirect, isMainFrame);
}
public void destroy() { public void destroy() {
if (mTabCallbackProxy != null) { if (mTabCallbackProxy != null) {
mTabCallbackProxy.destroy(); mTabCallbackProxy.destroy();
......
...@@ -429,6 +429,16 @@ ScopedJavaLocalRef<jstring> TabImpl::GetGuid(JNIEnv* env) { ...@@ -429,6 +429,16 @@ ScopedJavaLocalRef<jstring> TabImpl::GetGuid(JNIEnv* env) {
return base::android::ConvertUTF8ToJavaString(AttachCurrentThread(), return base::android::ConvertUTF8ToJavaString(AttachCurrentThread(),
GetGuid()); GetGuid());
} }
bool TabImpl::ShouldOverrideUrlLoading(
JNIEnv* env,
base::android::ScopedJavaLocalRef<jstring> jurl,
bool has_user_gesture,
bool is_redirect,
bool is_main_frame) {
return Java_TabImpl_shouldOverrideUrlLoading(
env, java_impl_, jurl, has_user_gesture, is_redirect, is_main_frame);
}
#endif #endif
content::WebContents* TabImpl::OpenURLFromTab( content::WebContents* TabImpl::OpenURLFromTab(
......
...@@ -119,6 +119,14 @@ class TabImpl : public Tab, ...@@ -119,6 +119,14 @@ class TabImpl : public Tab,
void UpdateBrowserControlsState(JNIEnv* env, jint constraint); void UpdateBrowserControlsState(JNIEnv* env, jint constraint);
base::android::ScopedJavaLocalRef<jstring> GetGuid(JNIEnv* env); base::android::ScopedJavaLocalRef<jstring> GetGuid(JNIEnv* env);
// Calls through to Java to determine whether the loading of |jurl| should be
// overridden, returning true if so.
bool ShouldOverrideUrlLoading(JNIEnv* env,
base::android::ScopedJavaLocalRef<jstring> jurl,
bool has_user_gesture,
bool is_redirect,
bool is_main_frame);
#endif #endif
DownloadDelegate* download_delegate() { return download_delegate_; } DownloadDelegate* download_delegate() { return download_delegate_; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment