summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorJochen Eisinger <jochen@chromium.org>2015-07-24 14:04:37 +0200
committerJochen Eisinger <jochen@chromium.org>2015-07-24 12:05:37 +0000
commit14ea977ff2e300fd131d3ca8ff6f5311f5fd1df8 (patch)
tree349a54560a08376a79c57549f7146519f2289ec5 /content
parent89c4fe5484963e9d658d4aaabd597b3221d21dbf (diff)
downloadchromium_src-14ea977ff2e300fd131d3ca8ff6f5311f5fd1df8.zip
chromium_src-14ea977ff2e300fd131d3ca8ff6f5311f5fd1df8.tar.gz
chromium_src-14ea977ff2e300fd131d3ca8ff6f5311f5fd1df8.tar.bz2
Reland "Add ExecuteJavaScriptForTest and make all tests use it"
Original issue's description: > Additionally, restrict the URLs that ExecuteJavaScript can be invoked on > to chrome-controlled URLs. > > R=jam@chromium.org > BUG=507809 > > Review URL: https://codereview.chromium.org/1123783002 > > Cr-Commit-Position: refs/heads/master@{#340231} R=mkwst@chromium.org TBR=jam@chromium.org BUG=507809 CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1258593002 . Cr-Commit-Position: refs/heads/master@{#340260}
Diffstat (limited to 'content')
-rw-r--r--content/browser/accessibility/accessibility_win_browsertest.cc2
-rw-r--r--content/browser/accessibility/dump_accessibility_events_browsertest.cc2
-rw-r--r--content/browser/frame_host/render_frame_host_impl.cc40
-rw-r--r--content/browser/frame_host/render_frame_host_impl.h7
-rw-r--r--content/browser/web_contents/web_contents_android.cc33
-rw-r--r--content/browser/web_contents/web_contents_android.h4
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java9
-rw-r--r--content/public/android/java/src/org/chromium/content_public/browser/WebContents.java17
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java8
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBareboneTest.java2
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java2
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java6
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java2
-rw-r--r--content/public/browser/render_frame_host.h16
-rw-r--r--content/public/test/android/javatests/src/org/chromium/content/browser/test/util/JavaScriptUtils.java4
-rw-r--r--content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java6
-rw-r--r--content/public/test/render_view_test.cc2
-rw-r--r--content/public/test/render_view_test.h2
-rw-r--r--content/public/test/test_utils.cc2
-rw-r--r--content/renderer/accessibility/renderer_accessibility_browsertest.cc12
-rw-r--r--content/renderer/devtools/v8_sampling_profiler_browsertest.cc2
-rw-r--r--content/renderer/render_view_browsertest.cc44
-rw-r--r--content/renderer/render_view_browsertest_mac.mm10
-rw-r--r--content/shell/browser/shell_devtools_frontend.cc8
24 files changed, 182 insertions, 60 deletions
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index e5ee763..163ee4c 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -108,7 +108,7 @@ IAccessible* AccessibilityWinBrowserTest::GetRendererAccessible() {
}
void AccessibilityWinBrowserTest::ExecuteScript(const std::wstring& script) {
- shell()->web_contents()->GetMainFrame()->ExecuteJavaScript(script);
+ shell()->web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(script);
}
// Loads a page with an input text field and places sample text in it. Also,
diff --git a/content/browser/accessibility/dump_accessibility_events_browsertest.cc b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
index 80ff6a1..304fc07 100644
--- a/content/browser/accessibility/dump_accessibility_events_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
@@ -89,7 +89,7 @@ std::vector<std::string> DumpAccessibilityEventsTest::Dump() {
shell(), AccessibilityModeComplete, ui::AX_EVENT_NONE));
- web_contents->GetMainFrame()->ExecuteJavaScript(
+ web_contents->GetMainFrame()->ExecuteJavaScriptForTests(
base::ASCIIToUTF16("go()"));
// Wait for at least one accessibility event generated in response to
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 81aa7c3..c7314b4 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -92,6 +92,10 @@ int g_next_accessibility_reset_token = 1;
// The next value to use for the javascript callback id.
int g_next_javascript_callback_id = 1;
+// Whether to allow injecting javascript into any kind of frame (for Android
+// WebView).
+bool g_allow_injecting_javascript = false;
+
// The (process id, routing id) pair that identifies one RenderFrame.
typedef std::pair<int32, int32> RenderFrameHostID;
typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*>
@@ -127,6 +131,11 @@ RenderFrameHost* RenderFrameHost::FromID(int render_process_id,
}
// static
+void RenderFrameHost::AllowInjectingJavaScriptForAndroidWebView() {
+ g_allow_injecting_javascript = true;
+}
+
+// static
RenderFrameHostImpl* RenderFrameHostImpl::FromID(int process_id,
int routing_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -272,6 +281,7 @@ void RenderFrameHostImpl::AddMessageToConsole(ConsoleMessageLevel level,
void RenderFrameHostImpl::ExecuteJavaScript(
const base::string16& javascript) {
+ CHECK(CanExecuteJavaScript());
Send(new FrameMsg_JavaScriptExecuteRequest(routing_id_,
javascript,
0, false));
@@ -280,6 +290,7 @@ void RenderFrameHostImpl::ExecuteJavaScript(
void RenderFrameHostImpl::ExecuteJavaScript(
const base::string16& javascript,
const JavaScriptResultCallback& callback) {
+ CHECK(CanExecuteJavaScript());
int key = g_next_javascript_callback_id++;
Send(new FrameMsg_JavaScriptExecuteRequest(routing_id_,
javascript,
@@ -287,6 +298,23 @@ void RenderFrameHostImpl::ExecuteJavaScript(
javascript_callbacks_.insert(std::make_pair(key, callback));
}
+void RenderFrameHostImpl::ExecuteJavaScriptForTests(
+ const base::string16& javascript) {
+ Send(new FrameMsg_JavaScriptExecuteRequestForTests(routing_id_,
+ javascript,
+ 0, false, false));
+}
+
+void RenderFrameHostImpl::ExecuteJavaScriptForTests(
+ const base::string16& javascript,
+ const JavaScriptResultCallback& callback) {
+ int key = g_next_javascript_callback_id++;
+ Send(new FrameMsg_JavaScriptExecuteRequestForTests(routing_id_, javascript,
+ key, true, false));
+ javascript_callbacks_.insert(std::make_pair(key, callback));
+}
+
+
void RenderFrameHostImpl::ExecuteJavaScriptWithUserGestureForTests(
const base::string16& javascript) {
Send(new FrameMsg_JavaScriptExecuteRequestForTests(routing_id_,
@@ -2132,4 +2160,16 @@ void RenderFrameHostImpl::UpdatePermissionsForNavigation(
}
}
+bool RenderFrameHostImpl::CanExecuteJavaScript() {
+ return g_allow_injecting_javascript ||
+ frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) ||
+ ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
+ GetProcess()->GetID()) ||
+ // It's possible to load about:blank in a Web UI renderer.
+ // See http://crbug.com/42547
+ (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) ||
+ // InterstitialPageImpl should be the only case matching this.
+ (delegate_->GetAsWebContents() == nullptr);
+}
+
} // namespace content
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 8035992..b4e9442 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -139,6 +139,10 @@ class CONTENT_EXPORT RenderFrameHostImpl
void ExecuteJavaScript(const base::string16& javascript) override;
void ExecuteJavaScript(const base::string16& javascript,
const JavaScriptResultCallback& callback) override;
+ void ExecuteJavaScriptForTests(const base::string16& javascript) override;
+ void ExecuteJavaScriptForTests(
+ const base::string16& javascript,
+ const JavaScriptResultCallback& callback) override;
void ExecuteJavaScriptWithUserGestureForTests(
const base::string16& javascript) override;
void ExecuteJavaScriptInIsolatedWorld(
@@ -584,6 +588,9 @@ class CONTENT_EXPORT RenderFrameHostImpl
const CommonNavigationParams& common_params,
const RequestNavigationParams& request_params);
+ // Returns true if the ExecuteJavaScript() API can be used on this host.
+ bool CanExecuteJavaScript();
+
// For now, RenderFrameHosts indirectly keep RenderViewHosts alive via a
// refcount that calls Shutdown when it reaches zero. This allows each
// RenderFrameHostManager to just care about RenderFrameHosts, while ensuring
diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc
index 33296c1..8fd5c50 100644
--- a/content/browser/web_contents/web_contents_android.cc
+++ b/content/browser/web_contents/web_contents_android.cc
@@ -440,6 +440,39 @@ void WebContentsAndroid::EvaluateJavaScript(JNIEnv* env,
ConvertJavaStringToUTF16(env, script), js_callback);
}
+void WebContentsAndroid::EvaluateJavaScriptForTests(JNIEnv* env,
+ jobject obj,
+ jstring script,
+ jobject callback) {
+ RenderViewHost* rvh = web_contents_->GetRenderViewHost();
+ DCHECK(rvh);
+
+ if (!rvh->IsRenderViewLive()) {
+ if (!static_cast<WebContentsImpl*>(web_contents_)->
+ CreateRenderViewForInitialEmptyDocument()) {
+ LOG(ERROR) << "Failed to create RenderView in EvaluateJavaScriptForTests";
+ return;
+ }
+ }
+
+ if (!callback) {
+ // No callback requested.
+ web_contents_->GetMainFrame()->ExecuteJavaScriptForTests(
+ ConvertJavaStringToUTF16(env, script));
+ return;
+ }
+
+ // Secure the Java callback in a scoped object and give ownership of it to the
+ // base::Callback.
+ ScopedJavaGlobalRef<jobject> j_callback;
+ j_callback.Reset(env, callback);
+ RenderFrameHost::JavaScriptResultCallback js_callback =
+ base::Bind(&JavaScriptResultCallback, j_callback);
+
+ web_contents_->GetMainFrame()->ExecuteJavaScriptForTests(
+ ConvertJavaStringToUTF16(env, script), js_callback);
+}
+
void WebContentsAndroid::AddMessageToDevToolsConsole(JNIEnv* env,
jobject jobj,
jint level,
diff --git a/content/browser/web_contents/web_contents_android.h b/content/browser/web_contents/web_contents_android.h
index 9eb9238..56e71b8 100644
--- a/content/browser/web_contents/web_contents_android.h
+++ b/content/browser/web_contents/web_contents_android.h
@@ -86,6 +86,10 @@ class CONTENT_EXPORT WebContentsAndroid
jobject obj,
jstring script,
jobject callback);
+ void EvaluateJavaScriptForTests(JNIEnv* env,
+ jobject obj,
+ jstring script,
+ jobject callback);
void AddMessageToDevToolsConsole(JNIEnv* env,
jobject jobj,
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
index d4530f9..0f23bcd 100644
--- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
@@ -293,12 +293,17 @@ import java.util.UUID;
}
@Override
- @VisibleForTesting
public void evaluateJavaScript(String script, JavaScriptCallback callback) {
nativeEvaluateJavaScript(mNativeWebContentsAndroid, script, callback);
}
@Override
+ @VisibleForTesting
+ public void evaluateJavaScriptForTests(String script, JavaScriptCallback callback) {
+ nativeEvaluateJavaScriptForTests(mNativeWebContentsAndroid, script, callback);
+ }
+
+ @Override
public void addMessageToDevToolsConsole(int level, String message) {
nativeAddMessageToDevToolsConsole(mNativeWebContentsAndroid, level, message);
}
@@ -421,6 +426,8 @@ import java.util.UUID;
private native void nativeResumeLoadingCreatedWebContents(long nativeWebContentsAndroid);
private native void nativeEvaluateJavaScript(long nativeWebContentsAndroid,
String script, JavaScriptCallback callback);
+ private native void nativeEvaluateJavaScriptForTests(long nativeWebContentsAndroid,
+ String script, JavaScriptCallback callback);
private native void nativeAddMessageToDevToolsConsole(
long nativeWebContentsAndroid, int level, String message);
private native boolean nativeHasAccessedInitialDocument(
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
index 5be1f92..5dad2d6 100644
--- a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
@@ -218,16 +218,31 @@ public interface WebContents extends Parcelable {
* Injects the passed Javascript code in the current page and evaluates it.
* If a result is required, pass in a callback.
*
+ * It is not possible to use this method to evaluate JavaScript on web
+ * content, only on WebUI pages.
+ *
* @param script The Javascript to execute.
* @param callback The callback to be fired off when a result is ready. The script's
* result will be json encoded and passed as the parameter, and the call
* will be made on the main thread.
* If no result is required, pass null.
*/
- @VisibleForTesting
void evaluateJavaScript(String script, JavaScriptCallback callback);
/**
+ * Injects the passed Javascript code in the current page and evaluates it.
+ * If a result is required, pass in a callback.
+ *
+ * @param script The Javascript to execute.
+ * @param callback The callback to be fired off when a result is ready. The script's
+ * result will be json encoded and passed as the parameter, and the call
+ * will be made on the main thread.
+ * If no result is required, pass null.
+ */
+ @VisibleForTesting
+ void evaluateJavaScriptForTests(String script, JavaScriptCallback callback);
+
+ /**
* Adds a log message to dev tools console. |level| must be a value of
* org.chromium.content_public.common.ConsoleMessageLevel.
*/
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java
index 91d2d04..3d76ef2 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java
@@ -45,7 +45,7 @@ public class ContentViewLocationTest extends ContentShellTestBase {
}
private void pollForPositionCallback() throws Throwable {
- mJavascriptHelper.evaluateJavaScript(getWebContents(),
+ mJavascriptHelper.evaluateJavaScriptForTests(getWebContents(),
"positionCount = 0");
mJavascriptHelper.waitUntilHasValue();
assertEquals(0, Integer.parseInt(mJavascriptHelper.getJsonResultAndClear()));
@@ -53,7 +53,7 @@ public class ContentViewLocationTest extends ContentShellTestBase {
assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
@Override
public boolean isSatisfied() {
- mJavascriptHelper.evaluateJavaScript(getWebContents(), "positionCount");
+ mJavascriptHelper.evaluateJavaScriptForTests(getWebContents(), "positionCount");
try {
mJavascriptHelper.waitUntilHasValue();
} catch (Exception e) {
@@ -65,7 +65,7 @@ public class ContentViewLocationTest extends ContentShellTestBase {
}
private void startGeolocationWatchPosition() throws Throwable {
- mJavascriptHelper.evaluateJavaScript(getWebContents(),
+ mJavascriptHelper.evaluateJavaScriptForTests(getWebContents(),
"initiate_watchPosition();");
mJavascriptHelper.waitUntilHasValue();
}
@@ -116,7 +116,7 @@ public class ContentViewLocationTest extends ContentShellTestBase {
hideContentViewOnUiThread();
ensureGeolocationRunning(false);
- mJavascriptHelper.evaluateJavaScript(getWebContents(),
+ mJavascriptHelper.evaluateJavaScriptForTests(getWebContents(),
"positionCount = 0");
mJavascriptHelper.waitUntilHasValue();
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBareboneTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBareboneTest.java
index 3f2ad52..c835211 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBareboneTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBareboneTest.java
@@ -40,7 +40,7 @@ public class JavaBridgeBareboneTest extends ContentShellTestBase {
private String evaluateJsSync(String jsCode) throws Exception {
OnEvaluateJavaScriptResultHelper javascriptHelper = new OnEvaluateJavaScriptResultHelper();
- javascriptHelper.evaluateJavaScript(getWebContents(), jsCode);
+ javascriptHelper.evaluateJavaScriptForTests(getWebContents(), jsCode);
javascriptHelper.waitUntilHasValue();
return javascriptHelper.getJsonResultAndClear();
}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java
index 1fda331..fab571f 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java
@@ -257,7 +257,7 @@ public class JavaBridgeChildFrameTest extends JavaBridgeTestBase {
runTestOnUiThread(new Runnable() {
@Override
public void run() {
- webContents.evaluateJavaScript(script, resultCallback);
+ webContents.evaluateJavaScriptForTests(script, resultCallback);
}
});
resultCallback.waitForResult();
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java
index 32d8d24..ae0ab89 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java
@@ -118,7 +118,8 @@ public class NavigationTest extends ContentShellTestBase {
OnEvaluateJavaScriptResultHelper javascriptHelper = new OnEvaluateJavaScriptResultHelper();
// Grab the first timestamp.
- javascriptHelper.evaluateJavaScript(contentViewCore.getWebContents(), "getLoadtime();");
+ javascriptHelper.evaluateJavaScriptForTests(
+ contentViewCore.getWebContents(), "getLoadtime();");
javascriptHelper.waitUntilHasValue();
String firstTimestamp = javascriptHelper.getJsonResultAndClear();
assertNotNull("Timestamp was null.", firstTimestamp);
@@ -126,7 +127,8 @@ public class NavigationTest extends ContentShellTestBase {
// Grab the timestamp after a reload and make sure they don't match.
reload(contentViewCore.getWebContents().getNavigationController(),
testCallbackHelperContainer);
- javascriptHelper.evaluateJavaScript(contentViewCore.getWebContents(), "getLoadtime();");
+ javascriptHelper.evaluateJavaScriptForTests(
+ contentViewCore.getWebContents(), "getLoadtime();");
javascriptHelper.waitUntilHasValue();
String secondTimestamp = javascriptHelper.getJsonResultAndClear();
assertNotNull("Timestamp was null.", secondTimestamp);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java b/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java
index 2601348..0eed6b8 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java
@@ -39,7 +39,7 @@ public class TestsJavaScriptEvalTest extends ContentShellTestBase {
for (int i = 0; i < 30; ++i) {
for (int j = 0; j < 10; ++j) {
// Start evaluation of a JavaScript script -- we don't need a result.
- webContents.evaluateJavaScript("foobar();", null);
+ webContents.evaluateJavaScriptForTests("foobar();", null);
}
// DOMUtils does need to evaluate a JavaScript and get its result to get DOM bounds.
assertNotNull("Failed to get bounds",
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h
index 3097ff1..e47441d 100644
--- a/content/public/browser/render_frame_host.h
+++ b/content/public/browser/render_frame_host.h
@@ -35,6 +35,11 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener,
// Returns nullptr if the IDs do not correspond to a live RenderFrameHost.
static RenderFrameHost* FromID(int render_process_id, int render_frame_id);
+ // Globally allows for injecting JavaScript into the main world. This feature
+ // is present only to support Android WebView and must not be used in other
+ // configurations.
+ static void AllowInjectingJavaScriptForAndroidWebView();
+
~RenderFrameHost() override {}
// Returns the route id for this frame.
@@ -74,17 +79,24 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener,
// Runs some JavaScript in this frame's context. If a callback is provided, it
// will be used to return the result, when the result is available.
+ // This API can only be called on chrome:// or chrome-devtools:// URLs.
typedef base::Callback<void(const base::Value*)> JavaScriptResultCallback;
virtual void ExecuteJavaScript(const base::string16& javascript) = 0;
virtual void ExecuteJavaScript(const base::string16& javascript,
const JavaScriptResultCallback& callback) = 0;
+
+ // Runs some JavaScript in an isolated world of top of this frame's context.
virtual void ExecuteJavaScriptInIsolatedWorld(
const base::string16& javascript,
const JavaScriptResultCallback& callback,
int world_id) = 0;
- // ONLY FOR TESTS: Same as above but adds a fake UserGestureIndicator around
- // execution. (crbug.com/408426)
+ // ONLY FOR TESTS: Same as above but without restrictions. Optionally, adds a
+ // fake UserGestureIndicator around execution. (crbug.com/408426)
+ virtual void ExecuteJavaScriptForTests(const base::string16& javascript) = 0;
+ virtual void ExecuteJavaScriptForTests(
+ const base::string16& javascript,
+ const JavaScriptResultCallback& callback) = 0;
virtual void ExecuteJavaScriptWithUserGestureForTests(
const base::string16& javascript) = 0;
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/JavaScriptUtils.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/JavaScriptUtils.java
index 42457cc..75cd2e9 100644
--- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/JavaScriptUtils.java
+++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/JavaScriptUtils.java
@@ -50,7 +50,7 @@ public class JavaScriptUtils {
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
- helper.evaluateJavaScript(webContents, code);
+ helper.evaluateJavaScriptForTests(webContents, code);
}
});
helper.waitUntilHasValue(timeout, timeoutUnits);
@@ -65,7 +65,7 @@ public class JavaScriptUtils {
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
- webContents.evaluateJavaScript(code, null);
+ webContents.evaluateJavaScriptForTests(code, null);
}
});
}
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java
index cfc53ff..d97e1ef 100644
--- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java
+++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java
@@ -126,7 +126,7 @@ public class TestCallbackHelperContainer {
* @param webContents A WebContents instance to be used.
* @param code A JavaScript code to be evaluated.
*/
- public void evaluateJavaScript(WebContents webContents, String code) {
+ public void evaluateJavaScriptForTests(WebContents webContents, String code) {
JavaScriptCallback callback =
new JavaScriptCallback() {
@Override
@@ -134,12 +134,12 @@ public class TestCallbackHelperContainer {
notifyCalled(jsonResult);
}
};
- webContents.evaluateJavaScript(code, callback);
+ webContents.evaluateJavaScriptForTests(code, callback);
mJsonResult = null;
}
/**
- * Returns true if the evaluation started by evaluateJavaScript() has completed.
+ * Returns true if the evaluation started by evaluateJavaScriptForTests() has completed.
*/
public boolean hasValue() {
return mJsonResult != null;
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index 8f491ba..1f7d78a 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -145,7 +145,7 @@ WebLocalFrame* RenderViewTest::GetMainFrame() {
return view_->GetWebView()->mainFrame()->toWebLocalFrame();
}
-void RenderViewTest::ExecuteJavaScript(const char* js) {
+void RenderViewTest::ExecuteJavaScriptForTests(const char* js) {
GetMainFrame()->executeScript(WebScriptSource(WebString::fromUTF8(js)));
}
diff --git a/content/public/test/render_view_test.h b/content/public/test/render_view_test.h
index 36ca0be..ba225d5 100644
--- a/content/public/test/render_view_test.h
+++ b/content/public/test/render_view_test.h
@@ -73,7 +73,7 @@ class RenderViewTest : public testing::Test {
// Executes the given JavaScript in the context of the main frame. The input
// is a NULL-terminated UTF-8 string.
- void ExecuteJavaScript(const char* js);
+ void ExecuteJavaScriptForTests(const char* js);
// Executes the given JavaScript and sets the int value it evaluates to in
// |result|.
diff --git a/content/public/test/test_utils.cc b/content/public/test/test_utils.cc
index 4293f39..8158eee 100644
--- a/content/public/test/test_utils.cc
+++ b/content/public/test/test_utils.cc
@@ -175,7 +175,7 @@ scoped_ptr<base::Value> ExecuteScriptAndGetValue(
RenderFrameHost* render_frame_host, const std::string& script) {
ScriptCallback observer;
- render_frame_host->ExecuteJavaScript(
+ render_frame_host->ExecuteJavaScriptForTests(
base::UTF8ToUTF16(script),
base::Bind(&ScriptCallback::ResultCallback, base::Unretained(&observer)));
base::MessageLoop* loop = base::MessageLoop::current();
diff --git a/content/renderer/accessibility/renderer_accessibility_browsertest.cc b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
index 0053bcc..1c5c7bd 100644
--- a/content/renderer/accessibility/renderer_accessibility_browsertest.cc
+++ b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
@@ -248,10 +248,10 @@ TEST_F(RendererAccessibilityTest, HideAccessibilityObject) {
WebAXObject node_c = node_b.childAt(0);
// Hide node 'B' ('C' stays visible).
- ExecuteJavaScript(
+ ExecuteJavaScriptForTests(
"document.getElementById('B').style.visibility = 'hidden';");
// Force layout now.
- ExecuteJavaScript("document.getElementById('B').offsetLeft;");
+ ExecuteJavaScriptForTests("document.getElementById('B').offsetLeft;");
// Send a childrenChanged on 'A'.
sink_->ClearMessages();
@@ -294,9 +294,9 @@ TEST_F(RendererAccessibilityTest, ShowAccessibilityObject) {
EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
// Show node 'B', then send a childrenChanged on 'A'.
- ExecuteJavaScript(
+ ExecuteJavaScriptForTests(
"document.getElementById('B').style.visibility = 'visible';");
- ExecuteJavaScript("document.getElementById('B').offsetLeft;");
+ ExecuteJavaScriptForTests("document.getElementById('B').offsetLeft;");
sink_->ClearMessages();
WebDocument document = view()->GetWebView()->mainFrame()->document();
@@ -355,10 +355,10 @@ TEST_F(RendererAccessibilityTest, DetachAccessibilityObject) {
// Change the display of the second 'span' back to inline, which causes the
// anonymous block to be destroyed.
- ExecuteJavaScript(
+ ExecuteJavaScriptForTests(
"document.querySelectorAll('span')[1].style.display = 'inline';");
// Force layout now.
- ExecuteJavaScript("document.body.offsetLeft;");
+ ExecuteJavaScriptForTests("document.body.offsetLeft;");
// Send a childrenChanged on the body.
sink_->ClearMessages();
diff --git a/content/renderer/devtools/v8_sampling_profiler_browsertest.cc b/content/renderer/devtools/v8_sampling_profiler_browsertest.cc
index aacd305..db3c8d5 100644
--- a/content/renderer/devtools/v8_sampling_profiler_browsertest.cc
+++ b/content/renderer/devtools/v8_sampling_profiler_browsertest.cc
@@ -30,7 +30,7 @@ class V8SamplingProfilerTest : public RenderViewTest {
RenderViewTest::TearDown();
}
- void KickV8() { ExecuteJavaScript("1"); }
+ void KickV8() { ExecuteJavaScriptForTests("1"); }
void SyncFlush(TraceLog* trace_log) {
base::WaitableEvent flush_complete_event(false, false);
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index 44fbc19..658fb84 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -427,7 +427,8 @@ TEST_F(RenderViewImplTest, DISABLED_OnNavStateChanged) {
// Change the value of the input. We should have gotten an update state
// notification. We need to spin the message loop to catch this update.
- ExecuteJavaScript("document.getElementById('elt_text').value = 'foo';");
+ ExecuteJavaScriptForTests(
+ "document.getElementById('elt_text').value = 'foo';");
ProcessPendingMessages();
EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID));
@@ -963,7 +964,7 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) {
for (int i = 0; i < kRepeatCount; i++) {
// Move the input focus to the first <input> element, where we should
// activate IMEs.
- ExecuteJavaScript("document.getElementById('test1').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test1').focus();");
ProcessPendingMessages();
render_thread_->sink().ClearMessages();
@@ -983,7 +984,7 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) {
// Move the input focus to the second <input> element, where we should
// de-activate IMEs.
- ExecuteJavaScript("document.getElementById('test2').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test2').focus();");
ProcessPendingMessages();
render_thread_->sink().ClearMessages();
@@ -1033,7 +1034,7 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) {
// the window focus while composing a CJK text. To handle such complicated
// cases, this test should not only call IME-related functions in the
// RenderWidget class, but also call some RenderWidget members, e.g.
-// ExecuteJavaScript(), RenderWidget::OnSetFocus(), etc.
+// ExecuteJavaScriptForTests(), RenderWidget::OnSetFocus(), etc.
TEST_F(RenderViewImplTest, ImeComposition) {
enum ImeCommand {
IME_INITIALIZE,
@@ -1108,7 +1109,7 @@ TEST_F(RenderViewImplTest, ImeComposition) {
"<div id=\"test1\" contenteditable=\"true\"></div>"
"</body>"
"</html>");
- ExecuteJavaScript("document.getElementById('test1').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test1').focus();");
break;
case IME_SETINPUTMODE:
@@ -1186,17 +1187,18 @@ TEST_F(RenderViewImplTest, OnSetTextDirection) {
};
for (size_t i = 0; i < arraysize(kTextDirection); ++i) {
// Set the text direction of the <textarea> element.
- ExecuteJavaScript("document.getElementById('test').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test').focus();");
view()->OnSetTextDirection(kTextDirection[i].direction);
// Write the values of its DOM 'dir' attribute and its CSS 'direction'
// property to the <div> element.
- ExecuteJavaScript("var result = document.getElementById('result');"
- "var node = document.getElementById('test');"
- "var style = getComputedStyle(node, null);"
- "result.innerText ="
- " node.getAttribute('dir') + ',' +"
- " style.getPropertyValue('direction');");
+ ExecuteJavaScriptForTests(
+ "var result = document.getElementById('result');"
+ "var node = document.getElementById('test');"
+ "var style = getComputedStyle(node, null);"
+ "result.innerText ="
+ " node.getAttribute('dir') + ',' +"
+ " style.getPropertyValue('direction');");
// Copy the document content to std::wstring and compare with the
// expected result.
@@ -1248,7 +1250,7 @@ TEST_F(RenderViewImplTest, OnHandleKeyboardEvent) {
"</div>"
"</body>"
"</html>");
- ExecuteJavaScript("document.getElementById('test').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test').focus();");
render_thread_->sink().ClearMessages();
static const MockKeyboard::Layout kLayouts[] = {
@@ -1515,7 +1517,7 @@ TEST_F(RenderViewImplTest, MAYBE_InsertCharacters) {
"</div>"
"</body>"
"</html>");
- ExecuteJavaScript("document.getElementById('test').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test').focus();");
render_thread_->sink().ClearMessages();
// For each key code, we send three keyboard events.
@@ -1741,7 +1743,7 @@ TEST_F(RenderViewImplTest, GetCompositionCharacterBoundsTest) {
#endif
LoadHTML("<textarea id=\"test\"></textarea>");
- ExecuteJavaScript("document.getElementById('test').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test').focus();");
const base::string16 empty_string;
const std::vector<blink::WebCompositionUnderline> empty_underline;
@@ -1843,7 +1845,7 @@ TEST_F(RenderViewImplTest, SetEditableSelectionAndComposition) {
"<input id=\"test1\" value=\"some test text hello\"></input>"
"</body>"
"</html>");
- ExecuteJavaScript("document.getElementById('test1').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test1').focus();");
frame()->SetEditableSelectionOffsets(4, 8);
const std::vector<blink::WebCompositionUnderline> empty_underline;
frame()->SetCompositionFromExistingText(7, 10, empty_underline);
@@ -1868,7 +1870,7 @@ TEST_F(RenderViewImplTest, OnExtendSelectionAndDelete) {
"<input id=\"test1\" value=\"abcdefghijklmnopqrstuvwxyz\"></input>"
"</body>"
"</html>");
- ExecuteJavaScript("document.getElementById('test1').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test1').focus();");
frame()->SetEditableSelectionOffsets(10, 10);
frame()->ExtendSelectionAndDelete(3, 4);
blink::WebTextInputInfo info = view()->webview()->textInputInfo();
@@ -1941,7 +1943,7 @@ TEST_F(RenderViewImplTest, MessageOrderInDidChangeSelection) {
LoadHTML("<textarea id=\"test\"></textarea>");
view()->handling_input_event_ = true;
- ExecuteJavaScript("document.getElementById('test').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test').focus();");
bool is_input_type_called = false;
bool is_selection_called = false;
@@ -2129,7 +2131,7 @@ TEST_F(RenderViewImplTest, FocusElementCallsFocusedNodeChanged) {
LoadHTML("<input id='test1' value='hello1'></input>"
"<input id='test2' value='hello2'></input>");
- ExecuteJavaScript("document.getElementById('test1').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test1').focus();");
const IPC::Message* msg1 = render_thread_->sink().GetFirstMessageMatching(
ViewHostMsg_FocusedNodeChanged::ID);
EXPECT_TRUE(msg1);
@@ -2139,7 +2141,7 @@ TEST_F(RenderViewImplTest, FocusElementCallsFocusedNodeChanged) {
EXPECT_TRUE(base::get<0>(params));
render_thread_->sink().ClearMessages();
- ExecuteJavaScript("document.getElementById('test2').focus();");
+ ExecuteJavaScriptForTests("document.getElementById('test2').focus();");
const IPC::Message* msg2 = render_thread_->sink().GetFirstMessageMatching(
ViewHostMsg_FocusedNodeChanged::ID);
EXPECT_TRUE(msg2);
@@ -2354,7 +2356,7 @@ TEST_F(DevToolsAgentTest, DevToolsResumeOnClose) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::Bind(&DevToolsAgentTest::CloseWhilePaused, base::Unretained(this)));
- ExecuteJavaScript("debugger;");
+ ExecuteJavaScriptForTests("debugger;");
// CloseWhilePaused should resume execution and continue here.
EXPECT_FALSE(IsPaused());
diff --git a/content/renderer/render_view_browsertest_mac.mm b/content/renderer/render_view_browsertest_mac.mm
index 6730da7..a973c31 100644
--- a/content/renderer/render_view_browsertest_mac.mm
+++ b/content/renderer/render_view_browsertest_mac.mm
@@ -103,7 +103,7 @@ TEST_F(RenderViewTest, MacTestCmdUp) {
EditCommands(1, EditCommand("moveToEndOfDocument", "")));
SendNativeKeyEvent(NativeWebKeyboardEvent(arrowDownKeyDown));
ProcessPendingMessages();
- ExecuteJavaScript("scroll.textContent = window.pageYOffset");
+ ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset");
output = GetMainFrame()->contentAsText(kMaxOutputCharacters);
EXPECT_EQ(kArrowDownScrollDown, base::UTF16ToASCII(output));
@@ -112,21 +112,21 @@ TEST_F(RenderViewTest, MacTestCmdUp) {
EditCommands(1, EditCommand("moveToBeginningOfDocument", "")));
SendNativeKeyEvent(NativeWebKeyboardEvent(arrowUpKeyDown));
ProcessPendingMessages();
- ExecuteJavaScript("scroll.textContent = window.pageYOffset");
+ ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset");
output = GetMainFrame()->contentAsText(kMaxOutputCharacters);
EXPECT_EQ(kArrowUpScrollUp, base::UTF16ToASCII(output));
// Now let javascript eat the key events -- no scrolling should happen.
// Set a scroll position slightly down the page to ensure that it does not
// move.
- ExecuteJavaScript("allowKeyEvents = false; window.scrollTo(0, 100)");
+ ExecuteJavaScriptForTests("allowKeyEvents = false; window.scrollTo(0, 100)");
const char* kArrowDownNoScroll = "40,false,false,true,false\n100\np1";
view->OnSetEditCommandsForNextKeyEvent(
EditCommands(1, EditCommand("moveToEndOfDocument", "")));
SendNativeKeyEvent(NativeWebKeyboardEvent(arrowDownKeyDown));
ProcessPendingMessages();
- ExecuteJavaScript("scroll.textContent = window.pageYOffset");
+ ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset");
output = GetMainFrame()->contentAsText(kMaxOutputCharacters);
EXPECT_EQ(kArrowDownNoScroll, base::UTF16ToASCII(output));
@@ -135,7 +135,7 @@ TEST_F(RenderViewTest, MacTestCmdUp) {
EditCommands(1, EditCommand("moveToBeginningOfDocument", "")));
SendNativeKeyEvent(NativeWebKeyboardEvent(arrowUpKeyDown));
ProcessPendingMessages();
- ExecuteJavaScript("scroll.textContent = window.pageYOffset");
+ ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset");
output = GetMainFrame()->contentAsText(kMaxOutputCharacters);
EXPECT_EQ(kArrowUpNoScroll, base::UTF16ToASCII(output));
}
diff --git a/content/shell/browser/shell_devtools_frontend.cc b/content/shell/browser/shell_devtools_frontend.cc
index 4facf23..69300f6 100644
--- a/content/shell/browser/shell_devtools_frontend.cc
+++ b/content/shell/browser/shell_devtools_frontend.cc
@@ -194,7 +194,7 @@ void ShellDevToolsFrontend::HandleMessageFromDevToolsFrontend(
params->GetSize() == 1 && params->GetString(0, &browser_message)) {
agent_host_->DispatchProtocolMessage(browser_message);
} else if (method == "loadCompleted") {
- web_contents()->GetMainFrame()->ExecuteJavaScript(
+ web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(
base::ASCIIToUTF16("DevToolsAPI.setUseSoftMenu(true);"));
} else if (method == "loadNetworkResource" && params->GetSize() == 3) {
// TODO(pfeldman): handle some of the embedder messages in content.
@@ -261,7 +261,7 @@ void ShellDevToolsFrontend::DispatchProtocolMessage(
if (message.length() < kMaxMessageChunkSize) {
base::string16 javascript = base::UTF8ToUTF16(
"DevToolsAPI.dispatchMessage(" + message + ");");
- web_contents()->GetMainFrame()->ExecuteJavaScript(javascript);
+ web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(javascript);
return;
}
@@ -272,7 +272,7 @@ void ShellDevToolsFrontend::DispatchProtocolMessage(
base::StringValue(message.substr(pos, kMaxMessageChunkSize)), &param);
std::string code = "DevToolsAPI.dispatchMessageChunk(" + param + ");";
base::string16 javascript = base::UTF8ToUTF16(code);
- web_contents()->GetMainFrame()->ExecuteJavaScript(javascript);
+ web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(javascript);
}
}
@@ -320,7 +320,7 @@ void ShellDevToolsFrontend::CallClientFunction(
}
}
javascript.append(");");
- web_contents()->GetMainFrame()->ExecuteJavaScript(
+ web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(
base::UTF8ToUTF16(javascript));
}