diff options
author | Selim Gurun <sgurun@android.com> | 2015-03-02 23:21:54 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-03-02 23:21:54 +0000 |
commit | 61c5cf135d9848026e82f7b93f206869ecc6b6ec (patch) | |
tree | f9db0cf1808d2b5b87895b28a9f5cc10b12396fd /core/java/android/webkit | |
parent | 95e25a6b3c8752ff9e5c984e711c2fc31a668c67 (diff) | |
parent | 4de38166c6dbc1108a64cf772abe61b6ddaa2804 (diff) | |
download | frameworks_base-61c5cf135d9848026e82f7b93f206869ecc6b6ec.zip frameworks_base-61c5cf135d9848026e82f7b93f206869ecc6b6ec.tar.gz frameworks_base-61c5cf135d9848026e82f7b93f206869ecc6b6ec.tar.bz2 |
am 4de38166: am aef98356: am 9fc8356b: Merge "Add potential future APIs for postmessage"
* commit '4de38166c6dbc1108a64cf772abe61b6ddaa2804':
Add potential future APIs for postmessage
Diffstat (limited to 'core/java/android/webkit')
-rw-r--r-- | core/java/android/webkit/WebMessage.java | 63 | ||||
-rw-r--r-- | core/java/android/webkit/WebMessagePort.java | 87 | ||||
-rw-r--r-- | core/java/android/webkit/WebView.java | 30 | ||||
-rw-r--r-- | core/java/android/webkit/WebViewProvider.java | 4 |
4 files changed, 184 insertions, 0 deletions
diff --git a/core/java/android/webkit/WebMessage.java b/core/java/android/webkit/WebMessage.java new file mode 100644 index 0000000..73ee03b --- /dev/null +++ b/core/java/android/webkit/WebMessage.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.webkit; + +/** + * The Java representation of the HTML5 PostMessage event. See + * https://html.spec.whatwg.org/multipage/comms.html#the-messageevent-interfaces + * for definition of a MessageEvent in HTML5. + * + * @hide unhide when implementation is complete + */ +public class WebMessage { + + private String mData; + private WebMessagePort[] mPorts; + + /** + * Creates a WebMessage. + * @param data the data of the message. + */ + public WebMessage(String data) { + mData = data; + } + + /** + * Creates a WebMessage. + * @param data the data of the message. + * @param ports the ports array that are sent with the message. + */ + public WebMessage(String data, WebMessagePort[] ports) { + mData = data; + mPorts = ports; + } + + /** + * Returns the data of the message. + */ + public String getData() { + return mData; + } + + /** + * Returns the ports that are sent with the message, or null if no port + * is sent. + */ + public WebMessagePort[] getPorts() { + return mPorts; + } +} diff --git a/core/java/android/webkit/WebMessagePort.java b/core/java/android/webkit/WebMessagePort.java new file mode 100644 index 0000000..f4347a5 --- /dev/null +++ b/core/java/android/webkit/WebMessagePort.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.webkit; + +import android.os.Handler; + +/** + * The Java representation of the HTML5 Message Port. See + * https://html.spec.whatwg.org/multipage/comms.html#messageport + * for definition of MessagePort in HTML5. + * + * A Message port represents one endpoint of a Message Channel. In Android + * webview, there is no separate Message Channel object. When a message channel + * is created, both ports are tangled to each other and started, and then + * returned in a MessagePort array, see {@link WebView#createMessageChannel} + * for creating a message channel. + * + * When a message port is first created or received via transfer, it does not + * have a WebMessageListener to receive web messages. The messages are queued until + * a WebMessageListener is set. + * + * @hide unhide when implementation is complete + */ +public abstract class WebMessagePort { + + /** + * The listener for handling MessagePort events. The message listener + * methods are called on the main thread. If the embedder application + * wants to receive the messages on a different thread, it can do this + * by passing a Handler in {@link setWebMessageListener(WebMessageListener, Handler)}. + * In the latter case, the application should be extra careful for thread safety + * since WebMessagePort methods should be called on main thread. + */ + public static abstract class WebMessageListener { + /** + * Message listener for receiving onMessage events. + * + * @param port The WebMessagePort that the message is destined for + * @param message The message from the entangled port. + */ + public abstract void onMessage(WebMessagePort port, WebMessage message); + } + + /** + * Post a WebMessage to the entangled port. + * + * @param The message. + * + * @throws IllegalStateException If message port is already transferred or closed. + */ + public abstract void postMessage(WebMessage message); + + /** + * Close the message port and free any resources associated with it. + */ + public abstract void close(); + + /** + * Sets a listener to receive message events on the main thread. + * + * @param listener The message listener. + */ + public abstract void setWebMessageListener(WebMessageListener listener); + + /** + * Sets a listener to receive message events on the handler that is provided + * by the application. + * + * @param listener The message listener. + * @param handler The handler to receive the message messages. + */ + public abstract void setWebMessageListener(WebMessageListener listener, Handler handler); +} diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 01a506c..edf74ec 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -27,6 +27,7 @@ import android.graphics.Picture; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.net.http.SslCertificate; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Looper; @@ -1825,6 +1826,35 @@ public class WebView extends AbsoluteLayout } /** + * Creates a message channel to communicate with JS and returns the message + * ports that represent the endpoints of this message channel. The HTML5 message + * channel functionality is described here: + * https://html.spec.whatwg.org/multipage/comms.html#messagechannel + * + * The returned message channels are entangled and already in started state. + * + * @return Two message ports that form the message channel. + * + * @hide unhide when implementation is complete + */ + public WebMessagePort[] createWebMessageChannel() { + checkThread(); + if (TRACE) Log.d(LOGTAG, "createWebMessageChannel"); + return mProvider.createWebMessageChannel(); + } + + /** + * Post a message to main frame. + * + * @hide unhide when implementation is complete + */ + public void postMessageToMainFrame(WebMessage message, Uri targetOrigin) { + checkThread(); + if (TRACE) Log.d(LOGTAG, "postMessageToMainFrame. TargetOrigin=" + targetOrigin); + mProvider.postMessageToMainFrame(message, targetOrigin); + } + + /** * Gets the WebSettings object used to control the settings for this * WebView. * diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java index 379a732..f11c941 100644 --- a/core/java/android/webkit/WebViewProvider.java +++ b/core/java/android/webkit/WebViewProvider.java @@ -227,6 +227,10 @@ public interface WebViewProvider { public void removeJavascriptInterface(String interfaceName); + public WebMessagePort[] createWebMessageChannel(); + + public void postMessageToMainFrame(WebMessage message, Uri targetOrigin); + public WebSettings getSettings(); public void setMapTrackballToArrowKeys(boolean setMap); |