PostMessageTest.java revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.content.browser;
6
7import android.test.suitebuilder.annotation.SmallTest;
8
9import org.chromium.base.test.util.Feature;
10
11/**
12 * The tests for content postMessage API.
13 */
14public class PostMessageTest extends ContentViewTestBase {
15
16    private static final String URL1 =
17        "<!DOCTYPE html><html><body>" +
18            "<script type=\"text/javascript\">" +
19                "onmessage = function (e) {" +
20                    "messageObject.setMessageParams(e.data, e.origin);" +
21                "}" +
22            "</script>" +
23        "</body></html>";
24
25    private static final String MESSAGE = "Foo";
26    private static final String SOURCE_ORIGIN = "android_webview";
27
28    // Inject to the page to verify received messages.
29    private static class MessageObject {
30        // Timeout to failure, in milliseconds
31        private static final int TIMEOUT = 5000;
32
33        private boolean mReady;
34        private String mData;
35        private String mOrigin;
36        private Object mLock = new Object();
37
38        public void setMessageParams(String data, String origin) {
39            synchronized (mLock) {
40                mData = data;
41                mOrigin = origin;
42                mReady = true;
43                mLock.notify();
44            }
45        }
46
47        public void waitForMessage() throws InterruptedException {
48            synchronized (mLock) {
49                if (!mReady) mLock.wait(TIMEOUT);
50            }
51        }
52
53        public String getData() {
54            return mData;
55        }
56
57        public String getOrigin() {
58            return mOrigin;
59        }
60    }
61
62    private MessageObject mMessageObject;
63
64    @Override
65    protected void setUp() throws Exception {
66        super.setUp();
67        mMessageObject = new MessageObject();
68        setUpContentView(mMessageObject, "messageObject");
69    }
70
71    @SmallTest
72    @Feature({"AndroidWebView", "Android-PostMessage"})
73    public void testPostMessageToMainFrame() throws Throwable {
74        ContentViewCore contentViewCore = getContentViewCore();
75        loadDataSync(contentViewCore, URL1, "text/html", false);
76        contentViewCore.postMessageToFrame(null, MESSAGE, SOURCE_ORIGIN, "*");
77        mMessageObject.waitForMessage();
78        assertEquals(MESSAGE, mMessageObject.getData());
79        assertEquals(SOURCE_ORIGIN, mMessageObject.getOrigin());
80    }
81}
82