Index: android_webview/java/src/org/chromium/android_webview/AwContents.java |
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 9efefb729ecf0598a7523fca2f6dab2b2bfd7f8b..f1625b489bd16acdb69ed5656ef93343bf35add0 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
@@ -84,7 +84,8 @@ import java.util.concurrent.Callable; |
* continuous build & test in the open source SDK-based tree). |
*/ |
@JNINamespace("android_webview") |
-public class AwContents implements SmartClipProvider { |
+public class AwContents implements SmartClipProvider, |
+ PostMessageSender.PostMessageSenderDelegate { |
private static final String TAG = "AwContents"; |
private static final String WEB_ARCHIVE_EXTENSION = ".mht"; |
@@ -246,6 +247,8 @@ public class AwContents implements SmartClipProvider { |
private AwViewMethods mAwViewMethods; |
private final FullScreenTransitionsState mFullScreenTransitionsState; |
+ private PostMessageSender mPostMessageSender; |
+ |
// This flag indicates that ShouldOverrideUrlNavigation should be posted |
// through the resourcethrottle. This is only used for popup windows. |
private boolean mDeferredShouldOverrideUrlLoadingIsPendingForPopup; |
@@ -910,6 +913,12 @@ public class AwContents implements SmartClipProvider { |
*/ |
public void destroy() { |
if (isDestroyed()) return; |
+ |
+ if (mPostMessageSender != null) { |
+ mBrowserContext.getMessagePortService().removeObserver(mPostMessageSender); |
+ mPostMessageSender = null; |
+ } |
+ |
// If we are attached, we have to call native detach to clean up |
// hardware resources. |
if (mIsAttachedToWindow) { |
@@ -1790,29 +1799,31 @@ public class AwContents implements SmartClipProvider { |
public void postMessageToFrame(String frameName, String message, |
String sourceOrigin, String targetOrigin, MessagePort[] sentPorts) { |
if (isDestroyed()) return; |
- int[] portIds = null; |
- if (sentPorts != null) { |
- portIds = new int[sentPorts.length]; |
- for (int i = 0; i < sentPorts.length; i++) { |
- portIds[i] = sentPorts[i].portId(); |
- } |
- mBrowserContext.getMessagePortService().removeSentPorts(portIds); |
+ if (mPostMessageSender == null) { |
hush (inactive)
2015/02/13 03:25:08
Just to make it clear here:
mPostMessageSender is
sgurun-gerrit only
2015/02/13 05:11:59
yes, exactly. Messages can be posted either from a
|
+ AwMessagePortService service = mBrowserContext.getMessagePortService(); |
+ mPostMessageSender = new PostMessageSender(this, service); |
+ service.addObserver(mPostMessageSender); |
} |
+ mPostMessageSender.postMessage(frameName, message, sourceOrigin, targetOrigin, |
+ sentPorts); |
+ } |
+ |
+ @Override |
+ public void postMessageToWeb(String frameName, String message, |
+ String sourceOrigin, String targetOrigin, int[] sentPorts) { |
hush (inactive)
2015/02/13 03:25:08
so the subtle difference between postMessageToFram
sgurun-gerrit only
2015/02/13 05:11:59
done
|
+ if (isDestroyed()) return; |
nativePostMessageToFrame(mNativeAwContents, frameName, message, sourceOrigin, |
- targetOrigin, portIds); |
+ targetOrigin, sentPorts); |
} |
/** |
- * Creates a message channel and asynchronously returns the ports that |
- * forms the ports for each end of the channel. |
- * |
- * @param callback The message channel created. |
+ * Creates a message channel and returns the ports for each end of the channel. |
*/ |
- public void createMessageChannel(ValueCallback<MessagePort[]> callback) { |
- if (isDestroyed()) return; |
- // Make sure the message port service is created. |
- mBrowserContext.createMessagePortServiceIfNecessary(); |
- nativeCreateMessageChannel(mNativeAwContents, callback); |
+ public MessagePort[] createMessageChannel() { |
+ if (isDestroyed()) return null; |
+ MessagePort[] ports = mBrowserContext.getMessagePortService().createMessageChannel(); |
+ nativeCreateMessageChannel(mNativeAwContents, ports); |
+ return ports; |
} |
//-------------------------------------------------------------------------------------------- |
@@ -2708,6 +2719,5 @@ public class AwContents implements SmartClipProvider { |
private native void nativePostMessageToFrame(long nativeAwContents, String frameId, |
String message, String sourceOrigin, String targetOrigin, int[] msgPorts); |
- private native void nativeCreateMessageChannel(long nativeAwContents, |
- ValueCallback<MessagePort[]> callback); |
+ private native void nativeCreateMessageChannel(long nativeAwContents, MessagePort[] ports); |
} |