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

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: minor fixes 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, 137 void PostMessageToFrameOnIOThread(WebContents* web_contents,
145 base::string16* source_origin, 138 base::string16* source_origin,
146 base::string16* target_origin, 139 base::string16* target_origin,
147 base::string16* data, 140 base::string16* data,
148 std::vector<int>* ports) { 141 std::vector<int>* ports) {
149 content::MessagePortProvider::PostMessageToFrame(web_contents, 142 content::MessagePortProvider::PostMessageToFrame(web_contents,
150 *source_origin, *target_origin, *data, *ports); 143 *source_origin, *target_origin, *data, *ports);
151 } 144 }
152 145
153 } // namespace 146 } // namespace
(...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 BrowserThread::IO, 1092 BrowserThread::IO,
1100 FROM_HERE, 1093 FROM_HERE,
1101 base::Bind(&PostMessageToFrameOnIOThread, 1094 base::Bind(&PostMessageToFrameOnIOThread,
1102 web_contents_.get(), 1095 web_contents_.get(),
1103 base::Owned(j_source_origin), 1096 base::Owned(j_source_origin),
1104 base::Owned(j_target_origin), 1097 base::Owned(j_target_origin),
1105 base::Owned(j_message), 1098 base::Owned(j_message),
1106 base::Owned(j_ports))); 1099 base::Owned(j_ports)));
1107 } 1100 }
1108 1101
1102 scoped_refptr<AwMessagePortMessageFilter>
1103 AwContents::GetMessagePortMessageFilter() {
1104 // Create a message port message filter if necessary
1105 if (message_port_message_filter_.get() == nullptr) {
1106 message_port_message_filter_ =
1107 new AwMessagePortMessageFilter(
1108 web_contents_->GetMainFrame()->GetRoutingID());
1109 web_contents_->GetRenderProcessHost()->AddFilter(
1110 message_port_message_filter_.get());
1111 }
1112 return message_port_message_filter_;
1113 }
1114
1109 void AwContents::CreateMessageChannel(JNIEnv* env, jobject obj, 1115 void AwContents::CreateMessageChannel(JNIEnv* env, jobject obj,
1110 jobject callback) { 1116 jobject callback) {
1111 ScopedJavaGlobalRef<jobject>* j_callback = new ScopedJavaGlobalRef<jobject>(); 1117 ScopedJavaGlobalRef<jobject>* j_callback = new ScopedJavaGlobalRef<jobject>();
1112 j_callback->Reset(env, callback); 1118 j_callback->Reset(env, callback);
1113 1119
1114 int* port1 = new int; 1120 int* portId1 = new int;
1115 int* port2 = new int; 1121 int* portId2 = new int;
1116 BrowserThread::PostTaskAndReply( 1122 BrowserThread::PostTaskAndReply(
1117 BrowserThread::IO, 1123 BrowserThread::IO,
1118 FROM_HERE, 1124 FROM_HERE,
1119 base::Bind(&content::MessagePortProvider::CreateMessageChannel, 1125 base::Bind(&content::MessagePortProvider::CreateMessageChannel,
1120 web_contents_.get(), 1126 GetMessagePortMessageFilter(),
1121 port1, 1127 portId1,
1122 port2), 1128 portId2),
1123 base::Bind(&OnMessageChannelCreated, 1129 base::Bind(&AwMessagePortServiceImpl::OnMessageChannelCreated,
1130 base::Unretained(AwMessagePortServiceImpl::GetInstance()),
1131 GetMessagePortMessageFilter(),
1124 base::Owned(j_callback), 1132 base::Owned(j_callback),
1125 base::Owned(port1), 1133 base::Owned(portId1),
1126 base::Owned(port2))); 1134 base::Owned(portId2)));
1127 } 1135 }
1128 1136
1129 1137
1130 void SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) { 1138 void SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) {
1131 g_should_download_favicons = true; 1139 g_should_download_favicons = true;
1132 } 1140 }
1133 1141
1134 } // namespace android_webview 1142 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698