Loading core/java/android/webkit/WebMessage.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * 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; } } core/java/android/webkit/WebMessagePort.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * 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); } core/java/android/webkit/WebView.java +30 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1787,6 +1788,35 @@ public class WebView extends AbsoluteLayout mProvider.removeJavascriptInterface(name); } /** * 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. Loading core/java/android/webkit/WebViewProvider.java +4 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,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); Loading Loading
core/java/android/webkit/WebMessage.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * 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; } }
core/java/android/webkit/WebMessagePort.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * 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); }
core/java/android/webkit/WebView.java +30 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1787,6 +1788,35 @@ public class WebView extends AbsoluteLayout mProvider.removeJavascriptInterface(name); } /** * 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. Loading
core/java/android/webkit/WebViewProvider.java +4 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,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); Loading