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

Side by Side Diff: android_webview/native/aw_contents.cc

Issue 831523004: Enable posting a message from JS to Android webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix component builds Created 5 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/native/aw_contents.h" 5 #include "android_webview/native/aw_contents.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "android_webview/browser/aw_browser_context.h" 9 #include "android_webview/browser/aw_browser_context.h"
10 #include "android_webview/browser/aw_browser_main_parts.h" 10 #include "android_webview/browser/aw_browser_main_parts.h"
11 #include "android_webview/browser/aw_resource_context.h" 11 #include "android_webview/browser/aw_resource_context.h"
12 #include "android_webview/browser/browser_view_renderer.h" 12 #include "android_webview/browser/browser_view_renderer.h"
13 #include "android_webview/browser/deferred_gpu_command_service.h" 13 #include "android_webview/browser/deferred_gpu_command_service.h"
14 #include "android_webview/browser/net_disk_cache_remover.h" 14 #include "android_webview/browser/net_disk_cache_remover.h"
15 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h" 15 #include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_dele gate.h"
16 #include "android_webview/browser/scoped_app_gl_state_restore.h" 16 #include "android_webview/browser/scoped_app_gl_state_restore.h"
17 #include "android_webview/browser/shared_renderer_state.h" 17 #include "android_webview/browser/shared_renderer_state.h"
18 #include "android_webview/common/aw_hit_test_data.h" 18 #include "android_webview/common/aw_hit_test_data.h"
19 #include "android_webview/common/devtools_instrumentation.h" 19 #include "android_webview/common/devtools_instrumentation.h"
20 #include "android_webview/native/aw_autofill_client.h" 20 #include "android_webview/native/aw_autofill_client.h"
21 #include "android_webview/native/aw_browser_dependency_factory.h" 21 #include "android_webview/native/aw_browser_dependency_factory.h"
22 #include "android_webview/native/aw_contents_client_bridge.h" 22 #include "android_webview/native/aw_contents_client_bridge.h"
23 #include "android_webview/native/aw_contents_io_thread_client_impl.h" 23 #include "android_webview/native/aw_contents_io_thread_client_impl.h"
24 #include "android_webview/native/aw_message_port_service_impl.h"
24 #include "android_webview/native/aw_pdf_exporter.h" 25 #include "android_webview/native/aw_pdf_exporter.h"
25 #include "android_webview/native/aw_picture.h" 26 #include "android_webview/native/aw_picture.h"
26 #include "android_webview/native/aw_web_contents_delegate.h" 27 #include "android_webview/native/aw_web_contents_delegate.h"
27 #include "android_webview/native/java_browser_view_renderer_helper.h" 28 #include "android_webview/native/java_browser_view_renderer_helper.h"
28 #include "android_webview/native/permission/aw_permission_request.h" 29 #include "android_webview/native/permission/aw_permission_request.h"
29 #include "android_webview/native/permission/permission_request_handler.h" 30 #include "android_webview/native/permission/permission_request_handler.h"
30 #include "android_webview/native/permission/simple_permission_request.h" 31 #include "android_webview/native/permission/simple_permission_request.h"
31 #include "android_webview/native/state_serializer.h" 32 #include "android_webview/native/state_serializer.h"
32 #include "android_webview/public/browser/draw_gl.h" 33 #include "android_webview/public/browser/draw_gl.h"
33 #include "base/android/jni_android.h" 34 #include "base/android/jni_android.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 127
127 base::subtle::Atomic32 g_instance_count = 0; 128 base::subtle::Atomic32 g_instance_count = 0;
128 129
129 void OnIoThreadClientReady(content::RenderFrameHost* rfh) { 130 void OnIoThreadClientReady(content::RenderFrameHost* rfh) {
130 int render_process_id = rfh->GetProcess()->GetID(); 131 int render_process_id = rfh->GetProcess()->GetID();
131 int render_frame_id = rfh->GetRoutingID(); 132 int render_frame_id = rfh->GetRoutingID();
132 AwResourceDispatcherHostDelegate::OnIoThreadClientReady( 133 AwResourceDispatcherHostDelegate::OnIoThreadClientReady(
133 render_process_id, render_frame_id); 134 render_process_id, render_frame_id);
134 } 135 }
135 136
136 void OnMessageChannelCreated(ScopedJavaGlobalRef<jobject>* callback,
137 int* port1,
138 int* port2) {
139 JNIEnv* env = AttachCurrentThread();
140 Java_AwContents_onMessageChannelCreated(env, *port1, *port2,
141 callback->obj());
142 }
143
144 void PostMessageToFrameOnIOThread(WebContents* web_contents,
145 base::string16* source_origin,
146 base::string16* target_origin,
147 base::string16* data,
148 std::vector<int>* ports) {
149 content::MessagePortProvider::PostMessageToFrame(web_contents,
150 *source_origin, *target_origin, *data, *ports);
151 }
152
153 } // namespace 137 } // namespace
154 138
155 // static 139 // static
156 AwContents* AwContents::FromWebContents(WebContents* web_contents) { 140 AwContents* AwContents::FromWebContents(WebContents* web_contents) {
157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 141 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
158 return AwContentsUserData::GetContents(web_contents); 142 return AwContentsUserData::GetContents(web_contents);
159 } 143 }
160 144
161 // static 145 // static
162 AwContents* AwContents::FromID(int render_process_id, int render_view_id) { 146 AwContents* AwContents::FromID(int render_process_id, int render_view_id) {
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1061 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1078 browser_view_renderer_.TrimMemory(level, visible); 1062 browser_view_renderer_.TrimMemory(level, visible);
1079 } 1063 }
1080 1064
1081 // TODO(sgurun) add support for posting a frame whose name is known (only 1065 // TODO(sgurun) add support for posting a frame whose name is known (only
1082 // main frame is supported at this time, see crbug.com/389721) 1066 // main frame is supported at this time, see crbug.com/389721)
1083 void AwContents::PostMessageToFrame(JNIEnv* env, jobject obj, 1067 void AwContents::PostMessageToFrame(JNIEnv* env, jobject obj,
1084 jstring frame_name, jstring message, jstring source_origin, 1068 jstring frame_name, jstring message, jstring source_origin,
1085 jstring target_origin, jintArray msgPorts) { 1069 jstring target_origin, jintArray msgPorts) {
1086 1070
1087 base::string16* j_source_origin = new base::string16; 1071 base::string16 j_source_origin(ConvertJavaStringToUTF16(env, source_origin));
1088 ConvertJavaStringToUTF16(env, source_origin, j_source_origin); 1072 base::string16 j_target_origin(ConvertJavaStringToUTF16(env, target_origin));
1089 base::string16* j_target_origin = new base::string16; 1073 base::string16 j_message(ConvertJavaStringToUTF16(env, message));
1090 ConvertJavaStringToUTF16(env, target_origin, j_target_origin); 1074 std::vector<int> j_ports;
1091 base::string16* j_message = new base::string16; 1075 if (msgPorts != nullptr)
1092 ConvertJavaStringToUTF16(env, message, j_message); 1076 base::android::JavaIntArrayToIntVector(env, msgPorts, &j_ports);
1093 std::vector<int>* j_ports = new std::vector<int>;
1094 1077
1095 if (msgPorts != nullptr) 1078 content::MessagePortProvider::PostMessageToFrame(web_contents_.get(),
1096 base::android::JavaIntArrayToIntVector(env, msgPorts, j_ports); 1079 j_source_origin,
1080 j_target_origin,
1081 j_message,
1082 j_ports);
1083 }
1097 1084
1098 BrowserThread::PostTask( 1085 scoped_refptr<AwMessagePortMessageFilter>
1099 BrowserThread::IO, 1086 AwContents::GetMessagePortMessageFilter() {
1100 FROM_HERE, 1087 // Create a message port message filter if necessary
1101 base::Bind(&PostMessageToFrameOnIOThread, 1088 if (message_port_message_filter_.get() == nullptr) {
1102 web_contents_.get(), 1089 message_port_message_filter_ =
1103 base::Owned(j_source_origin), 1090 new AwMessagePortMessageFilter(
1104 base::Owned(j_target_origin), 1091 web_contents_->GetMainFrame()->GetRoutingID());
1105 base::Owned(j_message), 1092 web_contents_->GetRenderProcessHost()->AddFilter(
1106 base::Owned(j_ports))); 1093 message_port_message_filter_.get());
1094 }
1095 return message_port_message_filter_;
1107 } 1096 }
1108 1097
1109 void AwContents::CreateMessageChannel(JNIEnv* env, jobject obj, 1098 void AwContents::CreateMessageChannel(JNIEnv* env, jobject obj,
1110 jobject callback) { 1099 jobject callback) {
1111 ScopedJavaGlobalRef<jobject>* j_callback = new ScopedJavaGlobalRef<jobject>();
1112 j_callback->Reset(env, callback);
1113 1100
1114 int* port1 = new int; 1101 AwMessagePortServiceImpl::GetInstance()->CreateMessageChannel(env, callback,
1115 int* port2 = new int; 1102 GetMessagePortMessageFilter());
1116 BrowserThread::PostTaskAndReply(
1117 BrowserThread::IO,
1118 FROM_HERE,
1119 base::Bind(&content::MessagePortProvider::CreateMessageChannel,
1120 web_contents_.get(),
1121 port1,
1122 port2),
1123 base::Bind(&OnMessageChannelCreated,
1124 base::Owned(j_callback),
1125 base::Owned(port1),
1126 base::Owned(port2)));
1127 } 1103 }
1128 1104
1129
1130 void SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) { 1105 void SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) {
1131 g_should_download_favicons = true; 1106 g_should_download_favicons = true;
1132 } 1107 }
1133 1108
1134 } // namespace android_webview 1109 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698