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