Commit 5b0f3e82 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Move more methods to test-only targets

Moved new test-only methods added to WebContents/RenderFrameHost
in https://crrev.com/c/1163831 to targets content*test_support.

Bug: 862153, 875742
Change-Id: Id9be5f53b45e2b28861a35401bba71020cf5fc0f
Reviewed-on: https://chromium-review.googlesource.com/1180824Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#584660}
parent 8cda2b7c
......@@ -15,9 +15,10 @@ import org.chromium.base.test.util.UrlUtils;
import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.content.browser.test.RenderFrameHostTestExt;
import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.content.browser.test.util.JavaScriptUtils;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content.browser.test.util.WebContentsUtils;
import org.chromium.content_public.browser.WebContents;
import java.lang.annotation.Retention;
......@@ -345,12 +346,12 @@ public abstract class XrTestFramework {
private static String runJavaScriptInFrameInternal(
String js, int timeout, final WebContents webContents, boolean failOnTimeout) {
final AtomicReference<RenderFrameHost> rfh = new AtomicReference<RenderFrameHost>();
ThreadUtils.runOnUiThreadBlocking(() -> { rfh.set(webContents.getFocusedFrame()); });
Assert.assertTrue("Did not get a focused frame", rfh.get() != null);
RenderFrameHostTestExt rfh = ThreadUtils.runOnUiThreadBlockingNoException(
() -> new RenderFrameHostTestExt(WebContentsUtils.getFocusedFrame(webContents)));
Assert.assertTrue("Did not get a focused frame", rfh != null);
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<String> result = new AtomicReference<String>();
rfh.get().executeJavaScriptForTests(js, (String r) -> {
rfh.executeJavaScriptForTests(js, (String r) -> {
result.set(r);
latch.countDown();
});
......
......@@ -60,6 +60,10 @@ public class RenderFrameHostImpl implements RenderFrameHost {
return mDelegate;
}
public long getNativePtr() {
return mNativeRenderFrameHostAndroid;
}
@Override
public String getLastCommittedURL() {
if (mNativeRenderFrameHostAndroid == 0) return null;
......@@ -95,11 +99,6 @@ public class RenderFrameHostImpl implements RenderFrameHost {
nativeNotifyUserActivation(mNativeRenderFrameHostAndroid);
}
@Override
public void executeJavaScriptForTests(String script, Callback<String> callback) {
nativeExecuteJavaScriptForTests(mNativeRenderFrameHostAndroid, script, callback);
}
/**
* Return the AndroidOverlay routing token for this RenderFrameHostImpl.
*/
......@@ -114,6 +113,4 @@ public class RenderFrameHostImpl implements RenderFrameHost {
private native UnguessableToken nativeGetAndroidOverlayRoutingToken(
long nativeRenderFrameHostAndroid);
private native void nativeNotifyUserActivation(long nativeRenderFrameHostAndroid);
private native void nativeExecuteJavaScriptForTests(
long nativeRenderFrameHostAndroid, String script, Callback<String> callback);
}
......@@ -341,11 +341,6 @@ public class WebContentsImpl implements WebContents, RenderFrameHostDelegate, Wi
return nativeGetMainFrame(mNativeWebContentsAndroid);
}
@Override
public RenderFrameHost getFocusedFrame() {
return nativeGetFocusedFrame(mNativeWebContentsAndroid);
}
@Override
public String getTitle() {
return nativeGetTitle(mNativeWebContentsAndroid);
......@@ -900,7 +895,6 @@ public class WebContentsImpl implements WebContents, RenderFrameHostDelegate, Wi
private native void nativeSetTopLevelNativeWindow(
long nativeWebContentsAndroid, WindowAndroid windowAndroid);
private native RenderFrameHost nativeGetMainFrame(long nativeWebContentsAndroid);
private native RenderFrameHost nativeGetFocusedFrame(long nativeWebContentsAndroid);
private native String nativeGetTitle(long nativeWebContentsAndroid);
private native String nativeGetVisibleURL(long nativeWebContentsAndroid);
private native String nativeGetEncoding(long nativeWebContentsAndroid);
......
......@@ -39,15 +39,6 @@ public interface RenderFrameHost {
*/
void notifyUserActivation();
/**
* Runs the given JavaScript in the RenderFrameHost.
*
* @param script A String containing the JavaScript to run.
* @param callback The Callback that will be called with the result of the JavaScript execution
* serialized to a String using JSONStringValueSerializer.
*/
void executeJavaScriptForTests(String script, Callback<String> callback);
/**
* Returns whether we're in incognito mode.
*
......
......@@ -130,11 +130,6 @@ public interface WebContents extends Parcelable {
*/
RenderFrameHost getMainFrame();
/**
* @return The focused frame in this WebContents.
*/
RenderFrameHost getFocusedFrame();
/**
* @return The title for the current visible page.
*/
......
......@@ -34,6 +34,7 @@ android_library("content_java_test_support") {
"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/RenderFrameHostTestExt.java",
"javatests/src/org/chromium/content/browser/test/mock/MockRenderFrameHost.java",
"javatests/src/org/chromium/content/browser/test/mock/MockWebContents.java",
"javatests/src/org/chromium/content/browser/test/util/ClickUtils.java",
......@@ -62,6 +63,7 @@ generate_jni("content_test_jni") {
jni_package = "content/public/test"
sources = [
"javatests/src/org/chromium/content/browser/test/InterstitialPageDelegateAndroid.java",
"javatests/src/org/chromium/content/browser/test/RenderFrameHostTestExt.java",
"javatests/src/org/chromium/content/browser/test/util/DOMUtils.java",
"javatests/src/org/chromium/content/browser/test/util/WebContentsUtils.java",
]
......@@ -80,6 +82,7 @@ static_library("content_native_test_support") {
"dom_utils.cc",
"interstitial_page_delegate_android.cc",
"interstitial_page_delegate_android.h",
"render_frame_host_test_ext.cc",
"web_contents_utils.cc",
]
deps = [
......
// Copyright 2017 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.
package org.chromium.content.browser.test;
import org.chromium.base.Callback;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.content.browser.framehost.RenderFrameHostImpl;
import org.chromium.content_public.browser.RenderFrameHost;
/**
* The Java wrapper around RenderFrameHost to allow executing javascript for tests.
*/
@JNINamespace("content")
public class RenderFrameHostTestExt {
private final long mNativeRenderFrameHost;
public RenderFrameHostTestExt(RenderFrameHost host) {
mNativeRenderFrameHost = ((RenderFrameHostImpl) host).getNativePtr();
}
/**
* Runs the given JavaScript in the RenderFrameHost.
*
* @param script A String containing the JavaScript to run.
* @param callback The Callback that will be called with the result of the JavaScript execution
* serialized to a String using JSONStringValueSerializer.
*/
public void executeJavaScriptForTests(String script, Callback<String> callback) {
nativeExecuteJavaScriptForTests(script, callback, mNativeRenderFrameHost);
}
private static native void nativeExecuteJavaScriptForTests(
String script, Callback<String> callback, long nativeRenderFrameHost);
}
......@@ -28,9 +28,6 @@ public class MockRenderFrameHost implements RenderFrameHost {
@Override
public void notifyUserActivation() {}
@Override
public void executeJavaScriptForTests(String script, Callback<String> callback) {}
@Override
public boolean isIncognito() {
return false;
......
......@@ -75,11 +75,6 @@ public class MockWebContents implements WebContents {
return renderFrameHost;
}
@Override
public RenderFrameHost getFocusedFrame() {
return renderFrameHost;
}
@Override
public String getTitle() {
return null;
......
......@@ -5,10 +5,12 @@
package org.chromium.content.browser.test.util;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content_public.browser.WebContents;
/**
* Collection of test-only WebContents utilities.
* TODO(jinsukkim): Move test utilities to content_public.
*/
@JNINamespace("content")
public class WebContentsUtils {
......@@ -22,6 +24,15 @@ public class WebContentsUtils {
nativeReportAllFrameSubmissions(webContents, enabled);
}
/**
* Gets the currently focused {@link RenderFrameHost} instance for a given {@link WebContents}.
* @param webContents The WebContents in use.
*/
public static RenderFrameHost getFocusedFrame(final WebContents webContents) {
return nativeGetFocusedFrame(webContents);
}
private static native void nativeReportAllFrameSubmissions(
WebContents webContents, boolean enabled);
private static native RenderFrameHost nativeGetFocusedFrame(WebContents webContents);
}
// 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/callback_android.h"
#include "base/android/jni_string.h"
#include "base/json/json_string_value_serializer.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "jni/RenderFrameHostTestExt_jni.h"
using base::android::JavaParamRef;
using base::android::JavaRef;
using base::android::ScopedJavaLocalRef;
namespace content {
namespace {
void OnExecuteJavaScriptResult(const JavaRef<jobject>& jcallback,
const base::Value* value) {
std::string result;
JSONStringValueSerializer serializer(&result);
bool value_serialized = serializer.SerializeAndOmitBinaryValues(*value);
DCHECK(value_serialized);
base::android::RunStringCallbackAndroid(jcallback, result);
}
} // namespace
void JNI_RenderFrameHostTestExt_ExecuteJavaScriptForTests(
JNIEnv* env,
const JavaParamRef<jclass>& clazz,
const JavaParamRef<jstring>& jscript,
const JavaParamRef<jobject>& jcallback,
jlong render_frame_host_ptr) {
base::string16 script(ConvertJavaStringToUTF16(env, jscript));
auto callback = base::BindRepeating(
&OnExecuteJavaScriptResult,
base::android::ScopedJavaGlobalRef<jobject>(env, jcallback));
RenderFrameHost* render_frame_host =
reinterpret_cast<RenderFrameHost*>(render_frame_host_ptr);
render_frame_host->ExecuteJavaScriptForTests(script, callback);
}
} // namespace content
......@@ -4,6 +4,7 @@
#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/public/browser/render_frame_metadata_provider.h"
#include "content/public/browser/render_view_host.h"
......@@ -11,6 +12,7 @@
#include "jni/WebContentsUtils_jni.h"
using base::android::JavaParamRef;
using base::android::ScopedJavaLocalRef;
namespace content {
......@@ -28,4 +30,13 @@ void JNI_WebContentsUtils_ReportAllFrameSubmissions(
provider->ReportAllFrameSubmissionsForTesting(enabled);
}
ScopedJavaLocalRef<jobject> JNI_WebContentsUtils_GetFocusedFrame(
JNIEnv* env,
const JavaParamRef<jclass>& clazz,
const JavaParamRef<jobject>& jweb_contents) {
WebContents* web_contents = WebContents::FromJavaWebContents(jweb_contents);
return static_cast<RenderFrameHostImpl*>(web_contents->GetFocusedFrame())
->GetJavaRenderFrameHost();
}
} // namespace content
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