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 @@
#include "ui/base/resource/resource_bundle_android.h"
#include "weblayer/browser/android_descriptors.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"
#endif
......@@ -589,9 +588,9 @@ bool ContentBrowserClientImpl::ShouldOverrideUrlLoading(
base::android::ScopedJavaLocalRef<jstring> jurl =
base::android::ConvertUTF16ToJavaString(env, url);
*ignore_navigation = Java_ExternalNavigationHandler_shouldOverrideUrlLoading(
env, TabImpl::FromWebContents(web_contents)->GetJavaTab(), jurl,
has_user_gesture, is_redirect, is_main_frame);
TabImpl* tab_impl = TabImpl::FromWebContents(web_contents);
*ignore_navigation = tab_impl->ShouldOverrideUrlLoading(
env, jurl, has_user_gesture, is_redirect, is_main_frame);
if (base::android::HasException(env)) {
// Tell the chromium message loop to not perform any tasks after the
......
......@@ -131,7 +131,6 @@ generate_jni("jni") {
"org/chromium/weblayer_private/DownloadCallbackProxy.java",
"org/chromium/weblayer_private/DownloadImpl.java",
"org/chromium/weblayer_private/ErrorPageCallbackProxy.java",
"org/chromium/weblayer_private/ExternalNavigationHandler.java",
"org/chromium/weblayer_private/FullscreenCallbackProxy.java",
"org/chromium/weblayer_private/LocaleChangedBroadcastReceiver.java",
"org/chromium/weblayer_private/NavigationControllerImpl.java",
......
......@@ -10,20 +10,16 @@ import android.content.Intent;
import android.provider.Browser;
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
* //android_webview's AwContentsClient.java:sendBrowsingIntent(), with some additional logic
* from //android_webview's WebViewBrowserActivity.java:startBrowsingIntent().
*/
@JNINamespace("weblayer")
public class ExternalNavigationHandler {
private static final String TAG = "ExternalNavHandler";
@CalledByNative
private static boolean shouldOverrideUrlLoading(TabImpl tab, String url, boolean hasUserGesture,
static boolean shouldOverrideUrlLoading(TabImpl tab, String url, boolean hasUserGesture,
boolean isRedirect, boolean isMainFrame) {
// TODO(blundell): Port over WebViewBrowserActivity's
// isSpecializedHandlerAvailable() check that checks whether there's an app for handling
......
......@@ -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() {
if (mTabCallbackProxy != null) {
mTabCallbackProxy.destroy();
......
......@@ -429,6 +429,16 @@ ScopedJavaLocalRef<jstring> TabImpl::GetGuid(JNIEnv* env) {
return base::android::ConvertUTF8ToJavaString(AttachCurrentThread(),
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
content::WebContents* TabImpl::OpenURLFromTab(
......
......@@ -119,6 +119,14 @@ class TabImpl : public Tab,
void UpdateBrowserControlsState(JNIEnv* env, jint constraint);
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
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