JavaBridgeTestBase.java revision 0529e5d033099cbfc42635f6f6183833b09dff6e
11f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt// Copyright 2012 The Chromium Authors. All rights reserved. 21f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt// Use of this source code is governed by a BSD-style license that can be 31f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt// found in the LICENSE file. 41f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidtpackage org.chromium.content.browser; 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt 71f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtimport junit.framework.Assert; 81f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 91f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt/** 101f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * Common functionality for testing the Java Bridge. 111f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt */ 121f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtpublic class JavaBridgeTestBase extends ContentViewTestBase { 131f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt protected class Controller { 141f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt private boolean mIsResultReady; 151f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 161f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt protected synchronized void notifyResultIsReady() { 171f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt mIsResultReady = true; 181f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt notify(); 191f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt } 201f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt protected synchronized void waitForResult() { 211f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt while (!mIsResultReady) { 221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt try { 231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt wait(5000); 241f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt } catch (Exception e) { 251f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt continue; 261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt } 271f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (!mIsResultReady) { 281f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt Assert.fail("Wait timed out"); 291f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt } 301f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt } 311f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt mIsResultReady = false; 321f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt } 331f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt } 341f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 351f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt protected void executeJavaScript(final String script) throws Throwable { 361f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt runTestOnUiThread(new Runnable() { 371f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt @Override 381f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt public void run() { 391f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt // When a JavaScript URL is executed, if the value of the last 401f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt // expression evaluated is not 'undefined', this value is 411f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt // converted to a string and used as the new document for the 421f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt // frame. We don't want this behaviour, so wrap the script in 431f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt // an anonymous function. 441f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt getContentViewCore().loadUrl(new LoadUrlParams( 451f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt "javascript:(function() { " + script + " })()")); 46 } 47 }); 48 } 49} 50