Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java

Issue 1018413002: [Android] Fix method invocation and wrappers cleanup handling in Java Bridge (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a dedicated test for attempting to call a non-existing method via `call` Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/content_renderer.gypi ('k') | content/renderer/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
index 0f8253ba9a1074da6dafcf74b81d7839aafa57c4..56fc999041eaea32ac362c200b182a23d8fc0fc7 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
@@ -6,7 +6,6 @@ package org.chromium.content.browser;
import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
-import android.test.FlakyTest;
import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.Assert;
@@ -180,12 +179,8 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
}
- /**
- * @SmallTest
- * @Feature({"AndroidWebView", "Android-JavaBridge"})
- * http://crbug.com/468679
- */
- @FlakyTest
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-JavaBridge"})
public void testRemovalNotReflectedUntilReload() throws Throwable {
injectObjectAndReload(new Object() {
public void method() {
@@ -259,6 +254,29 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
assertRaisesException("testObject.method()");
}
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-JavaBridge"})
+ public void testCallingAsConstructorRaisesException() throws Throwable {
+ assertRaisesException("new testController.setStringValue('foo')");
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-JavaBridge"})
+ public void testCallingOnNonInjectedObjectRaisesException() throws Throwable {
+ assertRaisesException("testController.setStringValue.call({}, 'foo')");
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-JavaBridge"})
+ public void testCallingOnInstanceOfOtherClassRaisesException() throws Throwable {
+ injectObjectAndReload(new Object(), "testObject");
+ assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
+ assertEquals("object", executeJavaScriptAndGetStringResult("typeof testController"));
+ assertEquals("function",
+ executeJavaScriptAndGetStringResult("typeof testController.setStringValue"));
+ assertRaisesException("testController.setStringValue.call(testObject, 'foo')");
+ }
+
// Note that this requires that we can pass a JavaScript string to Java.
@SmallTest
@Feature({"AndroidWebView", "Android-JavaBridge"})
@@ -1005,4 +1023,38 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
injectObjectAndReload(new Test(42), "testObject");
assertEquals("42", executeJavaScriptAndGetStringResult("testObject.getValue()"));
}
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-JavaBridge"})
+ public void testMethodCalledOnAnotherInstance() throws Throwable {
+ class TestObject {
+ private int mIndex;
+ TestObject(int index) {
+ mIndex = index;
+ }
+ public void method() {
+ mTestController.setIntValue(mIndex);
+ }
+ }
+ final TestObject testObject1 = new TestObject(1);
+ final TestObject testObject2 = new TestObject(2);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getContentViewCore().addPossiblyUnsafeJavascriptInterface(
+ testObject1, "testObject1", null);
+ getContentViewCore().addPossiblyUnsafeJavascriptInterface(
+ testObject2, "testObject2", null);
+ getContentViewCore().getWebContents().getNavigationController().reload(true);
+ }
+ });
+ executeJavaScript("testObject1.method()");
+ assertEquals(1, mTestController.waitForIntValue());
+ executeJavaScript("testObject2.method()");
+ assertEquals(2, mTestController.waitForIntValue());
+ executeJavaScript("testObject1.method.call(testObject2)");
+ assertEquals(2, mTestController.waitForIntValue());
+ executeJavaScript("testObject2.method.call(testObject1)");
+ assertEquals(1, mTestController.waitForIntValue());
+ }
}
« no previous file with comments | « content/content_renderer.gypi ('k') | content/renderer/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698