diff options
author | sgurun <sgurun@chromium.org> | 2014-11-19 12:16:57 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-19 20:17:38 +0000 |
commit | 4780212cc71a0297d5fd5818eff783aea661f2dc (patch) | |
tree | 5cc29281d5e03223fe5b51e99f6a101e2b9500b5 /android_webview/java/src/org/chromium | |
parent | dc600a27f959b14082562d3c389fc5edeb9e5c0d (diff) | |
download | chromium_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.java | 41 | ||||
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/MessageChannel.java | 28 |
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; + } +} |