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

Unified Diff: android_webview/native/aw_contents.cc

Issue 387113003: Add a content API to create a message channel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address mnaganov's comments Created 6 years, 1 month 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/native/aw_contents.cc
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index eac46000a7d7738f2eca7d19275b246f43b530dd..2b07ff2171e6e1bda611af638c1556391c18824c 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -52,6 +52,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/cert_store.h"
#include "content/public/browser/favicon_status.h"
+#include "content/public/browser/message_port_provider.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
@@ -131,6 +132,13 @@ void OnIoThreadClientReady(content::RenderFrameHost* rfh) {
render_process_id, render_frame_id);
}
+void OnMessageChannelCreated(ScopedJavaGlobalRef<jobject>* callback,
+ int* port1, int* port2) {
+ JNIEnv* env = AttachCurrentThread();
+ Java_AwContents_onMessageChannelCreated(env, *port1, *port2,
+ callback->obj());
+}
+
} // namespace
// static
@@ -1175,6 +1183,55 @@ void AwContents::TrimMemory(JNIEnv* env,
browser_view_renderer_.TrimMemory(level, visible);
}
+// TODO(sgurun) add support for posting a frame whose name is known (only
+// main frame is supported at this time, see crbug.com/389721)
+void AwContents::PostMessageToFrame(JNIEnv* env, jobject obj,
+ jstring frame_name, jstring message, jstring source_origin,
+ jstring target_origin, jintArray msgPorts) {
+
+ base::string16* j_source_origin = new base::string16;
+ ConvertJavaStringToUTF16(env, source_origin, j_source_origin);
+ base::string16* j_target_origin = new base::string16;
+ ConvertJavaStringToUTF16(env, target_origin, j_target_origin);
+ base::string16* j_message = new base::string16;
+ ConvertJavaStringToUTF16(env, message, j_message);
+ std::vector<int>* j_ports = new std::vector<int>;
+
+ if (msgPorts != nullptr)
+ base::android::JavaIntArrayToIntVector(env, msgPorts, j_ports);
+
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&content::MessagePortProvider::PostMessageToFrame,
+ web_contents_.get(),
+ base::Owned(j_source_origin),
+ base::Owned(j_target_origin),
+ base::Owned(j_message),
+ base::Owned(j_ports)));
+}
+
+void AwContents::CreateMessageChannel(JNIEnv* env, jobject obj,
+ jobject callback) {
+ ScopedJavaGlobalRef<jobject>* j_callback = new ScopedJavaGlobalRef<jobject>();
+ j_callback->Reset(env, callback);
+
+ int* port1 = new int;
+ int* port2 = new int;
+ BrowserThread::PostTaskAndReply(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&content::MessagePortProvider::CreateMessageChannel,
+ web_contents_.get(),
+ port1,
+ port2),
+ base::Bind(&OnMessageChannelCreated,
+ base::Owned(j_callback),
+ base::Owned(port1),
+ base::Owned(port2)));
+}
+
+
void SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) {
g_should_download_favicons = true;
}

Powered by Google App Engine
This is Rietveld 408576698