summaryrefslogtreecommitdiffstats
path: root/core/java/android/webkit
diff options
context:
space:
mode:
authorSelim Gurun <sgurun@android.com>2015-03-02 23:21:54 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-03-02 23:21:54 +0000
commit61c5cf135d9848026e82f7b93f206869ecc6b6ec (patch)
treef9db0cf1808d2b5b87895b28a9f5cc10b12396fd /core/java/android/webkit
parent95e25a6b3c8752ff9e5c984e711c2fc31a668c67 (diff)
parent4de38166c6dbc1108a64cf772abe61b6ddaa2804 (diff)
downloadframeworks_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.java63
-rw-r--r--core/java/android/webkit/WebMessagePort.java87
-rw-r--r--core/java/android/webkit/WebView.java30
-rw-r--r--core/java/android/webkit/WebViewProvider.java4
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);