Commit 6235a656 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Moves InterstitialPageDelegateAndroid to test

Java class InterstitialPageDelegateAndroid and its native class are
used by content/chrome test only. This CL moves the classes to
content/test/android. For this, content shell test apk is configured
to have a native library of target name content_native_test_support.

Bug: 617324
Change-Id: I81b757fe636e96139f61dce781d14fe55da341dd
Reviewed-on: https://chromium-review.googlesource.com/1039305
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556773}
parent 8fa8f32f
......@@ -858,6 +858,7 @@ chrome_shared_library("libchromefortest") {
":chrome_jni_for_test_registration($default_toolchain)",
"//base/test:test_support",
"//components/heap_profiling:test_support",
"//content/public/test/android:content_native_test_support",
]
}
......@@ -1123,6 +1124,7 @@ chrome_public_apk_tmpl_shared("chrome_public_apk_for_test") {
}
deps = [
"//components/heap_profiling:heap_profiling_java_test_support",
"//content/public/test/android:content_java_test_support",
]
}
......
......@@ -24,7 +24,6 @@ include_rules = [
"+content/public/android/java/src/org/chromium/content_public",
"!content/public/android/java/src/org/chromium/content/browser/BindingManager.java",
"!content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java",
"!content/public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java",
"!content/public/android/java/src/org/chromium/content/common/ContentSwitches.java",
"-content/public/android/javatests",
......
......@@ -34,7 +34,7 @@ import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.DisableInTabbedMode;
import org.chromium.content.browser.InterstitialPageDelegateAndroid;
import org.chromium.content.browser.test.InterstitialPageDelegateAndroid;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.ui.test.util.UiRestriction;
......@@ -249,10 +249,7 @@ public class BrandColorTest {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
mActivityTestRule.getActivity()
.getActivityTab()
.getWebContents()
.showInterstitialPage(brandColorUrl, delegate.getNative());
delegate.showInterstitialPage(brandColorUrl, mActivityTestRule.getWebContents());
}
});
CriteriaHelper.pollUiThread(new Criteria() {
......
......@@ -2056,8 +2056,6 @@ jumbo_source_set("browser") {
"android/gesture_listener_manager.h",
"android/ime_adapter_android.cc",
"android/ime_adapter_android.h",
"android/interstitial_page_delegate_android.cc",
"android/interstitial_page_delegate_android.h",
"android/java/gin_java_bound_object.cc",
"android/java/gin_java_bound_object.h",
"android/java/gin_java_bound_object_delegate.cc",
......@@ -2150,6 +2148,7 @@ jumbo_source_set("browser") {
deps += [
":reflection_jni_headers",
"//content/public/android:jni",
"//device/gamepad/public/mojom",
"//media",
"//media/capture/content/android",
"//media/capture/video/android",
......
......@@ -22,7 +22,6 @@
#include "content/browser/accessibility/browser_accessibility_android.h"
#include "content/browser/accessibility/browser_accessibility_manager_android.h"
#include "content/browser/android/content_view_core.h"
#include "content/browser/android/interstitial_page_delegate_android.h"
#include "content/browser/android/java/gin_java_bridge_dispatcher_host.h"
#include "content/browser/frame_host/interstitial_page_impl.h"
#include "content/browser/media/android/browser_media_player_manager.h"
......@@ -421,19 +420,6 @@ void WebContentsAndroid::SetAudioMuted(JNIEnv* env,
web_contents_->SetAudioMuted(mute);
}
void WebContentsAndroid::ShowInterstitialPage(JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& jurl,
jlong delegate_ptr) {
GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
InterstitialPageDelegateAndroid* delegate =
reinterpret_cast<InterstitialPageDelegateAndroid*>(delegate_ptr);
InterstitialPage* interstitial = InterstitialPage::Create(
web_contents_, false, url, delegate);
delegate->set_interstitial_page(interstitial);
interstitial->Show();
}
jboolean WebContentsAndroid::IsShowingInterstitialPage(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
......
......@@ -100,10 +100,6 @@ class CONTENT_EXPORT WebContentsAndroid
const base::android::JavaParamRef<jobject>& jobj,
jboolean mute);
void ShowInterstitialPage(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& jurl,
jlong delegate_ptr);
jboolean IsShowingInterstitialPage(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
......
......@@ -129,7 +129,6 @@ android_library("content_java") {
"java/src/org/chromium/content/browser/GestureListenerManagerImpl.java",
"java/src/org/chromium/content/browser/GpuProcessCallback.java",
"java/src/org/chromium/content/browser/InterfaceRegistrarImpl.java",
"java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java",
"java/src/org/chromium/content/browser/JavascriptInjectorImpl.java",
"java/src/org/chromium/content/browser/JavascriptInterface.java",
"java/src/org/chromium/content/browser/JoystickHandler.java",
......@@ -365,7 +364,6 @@ generate_jni("content_jni_headers") {
"java/src/org/chromium/content/browser/GestureListenerManagerImpl.java",
"java/src/org/chromium/content/browser/GpuProcessCallback.java",
"java/src/org/chromium/content/browser/InterfaceRegistrarImpl.java",
"java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java",
"java/src/org/chromium/content/browser/JavascriptInjectorImpl.java",
"java/src/org/chromium/content/browser/LauncherThread.java",
"java/src/org/chromium/content/browser/MediaSessionImpl.java",
......
......@@ -428,12 +428,6 @@ public class WebContentsImpl implements WebContents, RenderFrameHostDelegate, Wi
return nativeGetBackgroundColor(mNativeWebContentsAndroid);
}
@Override
public void showInterstitialPage(
String url, long interstitialPageDelegateAndroid) {
nativeShowInterstitialPage(mNativeWebContentsAndroid, url, interstitialPageDelegateAndroid);
}
@Override
public boolean isShowingInterstitialPage() {
return nativeIsShowingInterstitialPage(mNativeWebContentsAndroid);
......@@ -876,8 +870,6 @@ public class WebContentsImpl implements WebContents, RenderFrameHostDelegate, Wi
private native void nativeSuspendAllMediaPlayers(long nativeWebContentsAndroid);
private native void nativeSetAudioMuted(long nativeWebContentsAndroid, boolean mute);
private native int nativeGetBackgroundColor(long nativeWebContentsAndroid);
private native void nativeShowInterstitialPage(long nativeWebContentsAndroid,
String url, long nativeInterstitialPageDelegateAndroid);
private native boolean nativeIsShowingInterstitialPage(long nativeWebContentsAndroid);
private native boolean nativeFocusLocationBarByDefault(long nativeWebContentsAndroid);
private native boolean nativeIsRenderWidgetHostViewReady(long nativeWebContentsAndroid);
......
......@@ -210,16 +210,6 @@ public interface WebContents extends Parcelable {
*/
int getBackgroundColor();
/**
* Shows an interstitial page driven by the passed in delegate.
*
* @param url The URL being blocked by the interstitial.
* @param interstitialPageDelegateAndroid The delegate handling the interstitial.
*/
@VisibleForTesting
void showInterstitialPage(
String url, long interstitialPageDelegateAndroid);
/**
* @return Whether the page is currently showing an interstitial, such as a bad HTTPS page.
*/
......
......@@ -17,6 +17,7 @@ import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.base.test.util.UrlUtils;
import org.chromium.content.browser.test.InterstitialPageDelegateAndroid;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.content.browser.test.util.TouchCommon;
......@@ -117,8 +118,7 @@ public class InterstitialPageTest {
new Callable<TestWebContentsObserver>() {
@Override
public TestWebContentsObserver call() throws Exception {
mActivityTestRule.getWebContents().showInterstitialPage(
URL, delegate.getNative());
delegate.showInterstitialPage(URL, mActivityTestRule.getWebContents());
return new TestWebContentsObserver(mActivityTestRule.getWebContents());
}
});
......
......@@ -33,6 +33,7 @@ android_library("content_java_test_support") {
"javatests/src/org/chromium/content/browser/test/ChildProcessAllocatorSettings.java",
"javatests/src/org/chromium/content/browser/test/ChildProcessAllocatorSettingsHook.java",
"javatests/src/org/chromium/content/browser/test/ContentJUnit4ClassRunner.java",
"javatests/src/org/chromium/content/browser/test/InterstitialPageDelegateAndroid.java",
"javatests/src/org/chromium/content/browser/test/NativeLibraryTestRule.java",
"javatests/src/org/chromium/content/browser/test/mock/MockRenderFrameHost.java",
"javatests/src/org/chromium/content/browser/test/mock/MockWebContents.java",
......@@ -56,3 +57,26 @@ android_library("content_java_test_support") {
"javatests/src/org/chromium/content/browser/test/util/UiUtils.java",
]
}
generate_jni("content_test_jni") {
testonly = true
jni_package = "content/public/test"
sources = [
"javatests/src/org/chromium/content/browser/test/InterstitialPageDelegateAndroid.java",
]
}
static_library("content_native_test_support") {
testonly = true
sources = [
"interstitial_page_delegate_android.cc",
"interstitial_page_delegate_android.h",
]
deps = [
":content_test_jni",
"//base",
"//content/public/browser",
"//device/gamepad",
"//media/midi",
]
}
......@@ -2,12 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/android/interstitial_page_delegate_android.h"
#include "content/public/test/android/interstitial_page_delegate_android.h"
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "content/public/browser/interstitial_page.h"
#include "content/public/browser/web_contents.h"
#include "jni/InterstitialPageDelegateAndroid_jni.h"
using base::android::AttachCurrentThread;
......@@ -20,10 +21,7 @@ InterstitialPageDelegateAndroid::InterstitialPageDelegateAndroid(
JNIEnv* env,
jobject obj,
const std::string& html_content)
: weak_java_obj_(env, obj),
html_content_(html_content),
page_(NULL) {
}
: weak_java_obj_(env, obj), html_content_(html_content), page_(NULL) {}
InterstitialPageDelegateAndroid::~InterstitialPageDelegateAndroid() {
JNIEnv* env = AttachCurrentThread();
......@@ -46,6 +44,20 @@ void InterstitialPageDelegateAndroid::DontProceed(
page_->DontProceed();
}
void InterstitialPageDelegateAndroid::ShowInterstitialPage(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& jurl,
const JavaParamRef<jobject>& jweb_contents) {
WebContents* web_contents = WebContents::FromJavaWebContents(jweb_contents);
DCHECK(web_contents);
GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
InterstitialPage* interstitial =
InterstitialPage::Create(web_contents, false, url, this);
set_interstitial_page(interstitial);
interstitial->Show();
}
std::string InterstitialPageDelegateAndroid::GetHTMLContents() {
return html_content_;
}
......@@ -72,8 +84,8 @@ void InterstitialPageDelegateAndroid::CommandReceived(
std::string sanitized_command(command);
// The JSONified response has quotes, remove them.
if (sanitized_command.length() > 1 && sanitized_command[0] == '"') {
sanitized_command = sanitized_command.substr(
1, sanitized_command.length() - 2);
sanitized_command =
sanitized_command.substr(1, sanitized_command.length() - 2);
}
Java_InterstitialPageDelegateAndroid_commandReceived(
......
......@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_ANDROID_INTERSTITIAL_PAGE_DELEGATE_ANDROID_H_
#define CONTENT_BROWSER_ANDROID_INTERSTITIAL_PAGE_DELEGATE_ANDROID_H_
#ifndef CONTENT_PUBLIC_TEST_ANDROID_INTERSTITIAL_PAGE_DELEGATE_ANDROID_H_
#define CONTENT_PUBLIC_TEST_ANDROID_INTERSTITIAL_PAGE_DELEGATE_ANDROID_H_
#include <jni.h>
#include <string>
......@@ -11,7 +11,6 @@
#include "base/android/jni_weak_ref.h"
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "content/common/content_export.h"
#include "content/public/browser/interstitial_page_delegate.h"
namespace content {
......@@ -33,6 +32,11 @@ class InterstitialPageDelegateAndroid : public InterstitialPageDelegate {
void Proceed(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
void DontProceed(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void ShowInterstitialPage(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& jurl,
const base::android::JavaParamRef<jobject>& jweb_contents);
// Implementation of InterstitialPageDelegate
std::string GetHTMLContents() override;
......@@ -51,4 +55,4 @@ class InterstitialPageDelegateAndroid : public InterstitialPageDelegate {
} // namespace content
#endif // CONTENT_BROWSER_ANDROID_INTERSTITIAL_PAGE_DELEGATE_ANDROID_H_
#endif // CONTENT_PUBLIC_TEST_ANDROID_INTERSTITIAL_PAGE_DELEGATE_ANDROID_H_
......@@ -2,18 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content.browser;
package org.chromium.content.browser.test;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.content_public.browser.WebContents;
/**
* Allows the specification and handling of Interstitial pages in java.
*/
@JNINamespace("content")
public class InterstitialPageDelegateAndroid {
private long mNativePtr;
/**
......@@ -26,27 +26,17 @@ public class InterstitialPageDelegateAndroid {
mNativePtr = nativeInit(htmlContent);
}
/**
* @return The pointer to the underlying native counterpart.
*/
@VisibleForTesting
public long getNative() {
return mNativePtr;
}
/**
* Called when "proceed" is triggered on the interstitial.
*/
@CalledByNative
protected void onProceed() {
}
protected void onProceed() {}
/**
* Called when "dont' proceed" is triggered on the interstitial.
*/
@CalledByNative
protected void onDontProceed() {
}
protected void onDontProceed() {}
/**
* Called when a command has been received from the interstitial.
......@@ -54,8 +44,7 @@ public class InterstitialPageDelegateAndroid {
* @param command The command that was received.
*/
@CalledByNative
protected void commandReceived(String command) {
}
protected void commandReceived(String command) {}
@CalledByNative
private void onNativeDestroyed() {
......@@ -76,7 +65,19 @@ public class InterstitialPageDelegateAndroid {
if (mNativePtr != 0) nativeDontProceed(mNativePtr);
}
/**
* Shows an interstitial page driven by this delegate.
*
* @param url The URL being blocked by the interstitial.
* @param webContents The {@link WebContents} the interstitial to show on.
*/
public void showInterstitialPage(String url, WebContents webContents) {
if (mNativePtr != 0) nativeShowInterstitialPage(mNativePtr, url, webContents);
}
private native long nativeInit(String htmlContent);
private native void nativeProceed(long nativeInterstitialPageDelegateAndroid);
private native void nativeDontProceed(long nativeInterstitialPageDelegateAndroid);
private native void nativeShowInterstitialPage(
long nativeInterstitialPageDelegateAndroid, String url, WebContents webContents);
}
......@@ -126,9 +126,6 @@ public class MockWebContents implements WebContents {
return 0;
}
@Override
public void showInterstitialPage(String url, long interstitialPageDelegateAndroid) {}
@Override
public boolean isShowingInterstitialPage() {
return false;
......
......@@ -52,6 +52,20 @@ shared_library("libcontent_shell_content_view") {
]
}
shared_library("libcontent_native_test") {
testonly = true
deps = [
":content_test_jni_registration",
"//base",
"//content/public/test/android:content_native_test_support",
"//content/shell:content_shell_lib",
]
sources = [
"shell_test_library_loader.cc",
]
}
android_resources("content_shell_java_resources") {
testonly = true
resource_dirs = [ "java/res" ]
......@@ -197,6 +211,13 @@ android_library("content_shell_test_java") {
]
}
generate_jni_registration("content_test_jni_registration") {
testonly = true
target = ":content_shell_test_apk__apk"
output = "$root_gen_dir/content/shell/android/${target_name}.h"
exception_files = jni_exception_files
}
instrumentation_test_apk("content_shell_test_apk") {
deps = [
"//base:base_java_test_support",
......@@ -207,6 +228,7 @@ instrumentation_test_apk("content_shell_test_apk") {
]
apk_under_test = ":content_shell_apk"
apk_name = "ContentShellTest"
shared_libraries = [ ":libcontent_native_test" ]
android_manifest = "javatests/AndroidManifest.xml"
}
......
// Copyright 2018 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 "base/android/jni_android.h"
#include "base/android/jni_utils.h"
#include "content/public/app/content_jni_onload.h"
#include "content/public/app/content_main.h"
#include "content/public/browser/android/compositor.h"
#include "content/shell/android/content_test_jni_registration.h"
#include "content/shell/app/shell_main_delegate.h"
// This is called by the VM when the shared library is first loaded.
JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
base::android::InitVM(vm);
JNIEnv* env = base::android::AttachCurrentThread();
if (!base::android::IsSelectiveJniRegistrationEnabled(env)) {
if (!RegisterNonMainDexNatives(env)) {
return -1;
}
}
if (!RegisterMainDexNatives(env)) {
return -1;
}
if (!content::android::OnJNIOnLoadInit())
return -1;
content::Compositor::Initialize();
content::SetContentMainDelegate(new content::ShellMainDelegate());
return JNI_VERSION_1_4;
}
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