Merge "Add potential future APIs for postmessage"
This commit is contained in:
63
core/java/android/webkit/WebMessage.java
Normal file
63
core/java/android/webkit/WebMessage.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
87
core/java/android/webkit/WebMessagePort.java
Normal file
87
core/java/android/webkit/WebMessagePort.java
Normal file
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user