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

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/AwJavaBridgeTest.java

Issue 498633003: Cache pending JS bridge sync IPC replies, and send in case of RenderFrame deletion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments and a test Created 6 years, 4 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
Index: android_webview/javatests/src/org/chromium/android_webview/test/AwJavaBridgeTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwJavaBridgeTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwJavaBridgeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab3eccf173bdcf7aa49d539ece8e6d0b50143a2d
--- /dev/null
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwJavaBridgeTest.java
@@ -0,0 +1,74 @@
+// Copyright 2014 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.android_webview.test;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.android_webview.AwContents;
+import org.chromium.base.test.util.Feature;
+import org.chromium.content.browser.JavascriptInterface;
+
+/**
+ * Test suite for the WebView specific JavaBridge features.
+ */
+public class AwJavaBridgeTest extends AwTestBase {
+
+ private TestAwContentsClient mContentsClient = new TestAwContentsClient();
+ private AwTestContainerView mTestContainerView;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mTestContainerView = createAwTestContainerViewOnMainSync(mContentsClient);
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView", "Android-JavaBridge"})
boliu 2014/08/27 17:55:56 I think features are supposed to match crbug label
benm (inactive) 2014/08/27 18:30:02 Oh, hm. I just used the ones we've added for all t
boliu 2014/08/27 18:34:54 Firmly in the nobody cares camp then. Consistency
+ public void testDestroyFromJavaObject() throws Throwable {
+ final String HTML = "<html>Hello World</html>";
+ final TestAwContentsClient client2 = new TestAwContentsClient();
+ final AwTestContainerView view2 = createAwTestContainerViewOnMainSync(client2);
boliu 2014/08/27 18:23:48 what's with 2s everywhere?
benm (inactive) 2014/08/27 18:30:02 Well, I want another one ;-)
boliu 2014/08/27 18:34:54 Ohh...the first one is from the base class. Ok, te
+ final AwContents awContents = mTestContainerView.getAwContents();
+
+ class Test {
+ @JavascriptInterface
+ public void destroy() {
+ try {
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ awContents.destroy();
+ }
+ });
+ // Destroying one AwContents from within the JS callback should still
+ // leave others dunctioning.
+ loadDataSync(view2.getAwContents(), client2.getOnPageFinishedHelper(),
+ HTML, "text/html", false);
boliu 2014/08/27 18:23:48 I think you can load a new page with a different t
benm (inactive) 2014/08/27 18:30:02 I thought that was discouraged and that callback h
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
boliu 2014/08/27 18:23:48 Wot?
benm (inactive) 2014/08/27 18:30:01 Gotta catch something, and in that case I want to
+ }
+ }
+ }
+
+ enableJavaScriptOnUiThread(awContents);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ awContents.addPossiblyUnsafeJavascriptInterface(new Test(), "test", null);
+ }
+ });
+
+ loadDataSync(awContents, mContentsClient.getOnPageFinishedHelper(), HTML,
+ "text/html", false);
+
+ // Ensure the JS interface object is there, and invoke the test method.
+ assertEquals("\"function\"", executeJavaScriptAndWaitForResult(
+ awContents, mContentsClient, "typeof test.destroy"));
+ awContents.evaluateJavaScript("test.destroy()", null);
+
+ client2.getOnPageFinishedHelper().waitForCallback(
+ client2.getOnPageFinishedHelper().getCallCount());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698