summaryrefslogtreecommitdiffstats
path: root/android_webview/java/src/org/chromium
diff options
context:
space:
mode:
authorsgurun <sgurun@chromium.org>2014-11-19 12:16:57 -0800
committerCommit bot <commit-bot@chromium.org>2014-11-19 20:17:38 +0000
commit4780212cc71a0297d5fd5818eff783aea661f2dc (patch)
tree5cc29281d5e03223fe5b51e99f6a101e2b9500b5 /android_webview/java/src/org/chromium
parentdc600a27f959b14082562d3c389fc5edeb9e5c0d (diff)
downloadchromium_src-4780212cc71a0297d5fd5818eff783aea661f2dc.zip
chromium_src-4780212cc71a0297d5fd5818eff783aea661f2dc.tar.gz
chromium_src-4780212cc71a0297d5fd5818eff783aea661f2dc.tar.bz2
Add a content API to create a message channel.
BUG=393291 Add a content API to create a message channel. Android Webview will use this channel for communicating to JS. Also move postmessage related logic to its own class from webcontents. Review URL: https://codereview.chromium.org/387113003 Cr-Commit-Position: refs/heads/master@{#304873}
Diffstat (limited to 'android_webview/java/src/org/chromium')
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java41
-rw-r--r--android_webview/java/src/org/chromium/android_webview/MessageChannel.java28
2 files changed, 69 insertions, 0 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 854865b..3eedfed 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -1754,6 +1754,35 @@ public class AwContents implements SmartClipProvider {
if (!isDestroyed()) mWebContents.evaluateJavaScript(script, null);
}
+ /**
+ * Post a message to a frame.
+ * TODO(sgurun) investigate if we should hardcode the source origin to some
+ * value instead.
+ *
+ * @param frameName The name of the frame. If the name is null the message is posted
+ * to the main frame.
+ * @param message The message
+ * @param sourceOrigin The source origin
+ * @param targetOrigin The target origin
+ * @param msgPorts The sent message ports, if any. Pass null if there is no
+ * message ports to pass.
+ */
+ public void postMessageToFrame(String frameName, String message,
+ String sourceOrigin, String targetOrigin, int[] msgPorts) {
+ nativePostMessageToFrame(mNativeAwContents, frameName, message, sourceOrigin,
+ targetOrigin, msgPorts);
+ }
+
+ /**
+ * Creates a message channel.
+ *
+ * @param callback The message channel created.
+ */
+ public void createMessageChannel(ValueCallback<MessageChannel> callback) {
+ nativeCreateMessageChannel(mNativeAwContents, callback);
+ }
+
+
//--------------------------------------------------------------------------------------------
// View and ViewGroup method implementations
//--------------------------------------------------------------------------------------------
@@ -2166,6 +2195,12 @@ public class AwContents implements SmartClipProvider {
}
}
+ @CalledByNative
+ private static void onMessageChannelCreated(int portId1, int portId2,
+ ValueCallback<MessageChannel> callback) {
+ callback.onReceiveValue(new MessageChannel(portId1, portId2));
+ }
+
// -------------------------------------------------------------------------------------------
// Helper methods
// -------------------------------------------------------------------------------------------
@@ -2643,4 +2678,10 @@ public class AwContents implements SmartClipProvider {
private native void nativePreauthorizePermission(long nativeAwContents, String origin,
long resources);
+
+ private native void nativePostMessageToFrame(long nativeAwContents, String frameId,
+ String message, String sourceOrigin, String targetOrigin, int[] msgPorts);
+
+ private native void nativeCreateMessageChannel(long nativeAwContents,
+ ValueCallback<MessageChannel> callback);
}
diff --git a/android_webview/java/src/org/chromium/android_webview/MessageChannel.java b/android_webview/java/src/org/chromium/android_webview/MessageChannel.java
new file mode 100644
index 0000000..9248624
--- /dev/null
+++ b/android_webview/java/src/org/chromium/android_webview/MessageChannel.java
@@ -0,0 +1,28 @@
+// 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;
+
+/**
+ * Represents the MessageChannel object. Inspired from
+ * http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#message-channels
+ */
+public class MessageChannel {
+ // The message port IDs of port1 and port2.
+ private int mPort1;
+ private int mPort2;
+
+ public MessageChannel(int port1, int port2) {
+ mPort1 = port1;
+ mPort2 = port2;
+ }
+
+ public int port1() {
+ return mPort1;
+ }
+
+ public int port2() {
+ return mPort2;
+ }
+}