Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1762)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwContents.java

Issue 920873003: Return created channels synchronously (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698