Home | History | Annotate | Download | only in browser
      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 
      5 package org.chromium.content.browser;
      6 
      7 import android.test.suitebuilder.annotation.SmallTest;
      8 
      9 import org.chromium.base.test.util.Feature;
     10 
     11 /**
     12  * The tests for content postMessage API.
     13  */
     14 public 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