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

Side by Side Diff: content/browser/android/content_view_core_impl.cc

Issue 275873002: Re-land "Pass RenderFrameHost to WebContentObservers' message handlers" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
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 "content/browser/android/content_view_core_impl.h" 5 #include "content/browser/android/content_view_core_impl.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/android/scoped_java_ref.h" 10 #include "base/android/scoped_java_ref.h"
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 return ContentViewCoreImpl::FromWebContents(web_contents); 203 return ContentViewCoreImpl::FromWebContents(web_contents);
204 } 204 }
205 205
206 // static 206 // static
207 ContentViewCore* ContentViewCore::GetNativeContentViewCore(JNIEnv* env, 207 ContentViewCore* ContentViewCore::GetNativeContentViewCore(JNIEnv* env,
208 jobject obj) { 208 jobject obj) {
209 return reinterpret_cast<ContentViewCore*>( 209 return reinterpret_cast<ContentViewCore*>(
210 Java_ContentViewCore_getNativeContentViewCore(env, obj)); 210 Java_ContentViewCore_getNativeContentViewCore(env, obj));
211 } 211 }
212 212
213 ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, 213 ContentViewCoreImpl::ContentViewCoreImpl(
214 jobject obj, 214 JNIEnv* env,
215 WebContents* web_contents, 215 jobject obj,
216 ui::ViewAndroid* view_android, 216 WebContents* web_contents,
217 ui::WindowAndroid* window_android) 217 ui::ViewAndroid* view_android,
218 ui::WindowAndroid* window_android,
219 jobject java_bridge_retained_object_set)
218 : WebContentsObserver(web_contents), 220 : WebContentsObserver(web_contents),
219 java_ref_(env, obj), 221 java_ref_(env, obj),
220 web_contents_(static_cast<WebContentsImpl*>(web_contents)), 222 web_contents_(static_cast<WebContentsImpl*>(web_contents)),
221 root_layer_(cc::SolidColorLayer::Create()), 223 root_layer_(cc::SolidColorLayer::Create()),
222 dpi_scale_(GetPrimaryDisplayDeviceScaleFactor()), 224 dpi_scale_(GetPrimaryDisplayDeviceScaleFactor()),
223 view_android_(view_android), 225 view_android_(view_android),
224 window_android_(window_android), 226 window_android_(window_android),
225 device_orientation_(0), 227 device_orientation_(0),
226 geolocation_needs_pause_(false), 228 geolocation_needs_pause_(false),
227 accessibility_enabled_(false) { 229 accessibility_enabled_(false) {
(...skipping 10 matching lines...) Expand all
238 // Currently, the only use case we have for overriding a user agent involves 240 // Currently, the only use case we have for overriding a user agent involves
239 // spoofing a desktop Linux user agent for "Request desktop site". 241 // spoofing a desktop Linux user agent for "Request desktop site".
240 // Automatically set it for all WebContents so that it is available when a 242 // Automatically set it for all WebContents so that it is available when a
241 // NavigationEntry requires the user agent to be overridden. 243 // NavigationEntry requires the user agent to be overridden.
242 const char kLinuxInfoStr[] = "X11; Linux x86_64"; 244 const char kLinuxInfoStr[] = "X11; Linux x86_64";
243 std::string product = content::GetContentClient()->GetProduct(); 245 std::string product = content::GetContentClient()->GetProduct();
244 std::string spoofed_ua = 246 std::string spoofed_ua =
245 BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product); 247 BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product);
246 web_contents->SetUserAgentOverride(spoofed_ua); 248 web_contents->SetUserAgentOverride(spoofed_ua);
247 249
250 java_bridge_dispatcher_host_manager_.reset(
251 new JavaBridgeDispatcherHostManager(web_contents,
252 java_bridge_retained_object_set));
253
248 InitWebContents(); 254 InitWebContents();
249 } 255 }
250 256
251 ContentViewCoreImpl::~ContentViewCoreImpl() { 257 ContentViewCoreImpl::~ContentViewCoreImpl() {
252 JNIEnv* env = base::android::AttachCurrentThread(); 258 JNIEnv* env = base::android::AttachCurrentThread();
253 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 259 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
254 java_ref_.reset(); 260 java_ref_.reset();
255 if (!j_obj.is_null()) { 261 if (!j_obj.is_null()) {
256 Java_ContentViewCore_onNativeContentViewCoreDestroyed( 262 Java_ContentViewCore_onNativeContentViewCoreDestroyed(
257 env, j_obj.obj(), reinterpret_cast<intptr_t>(this)); 263 env, j_obj.obj(), reinterpret_cast<intptr_t>(this));
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 void ContentViewCoreImpl::ClearHistory(JNIEnv* env, jobject obj) { 1277 void ContentViewCoreImpl::ClearHistory(JNIEnv* env, jobject obj) {
1272 // TODO(creis): Do callers of this need to know if it fails? 1278 // TODO(creis): Do callers of this need to know if it fails?
1273 if (web_contents_->GetController().CanPruneAllButLastCommitted()) 1279 if (web_contents_->GetController().CanPruneAllButLastCommitted())
1274 web_contents_->GetController().PruneAllButLastCommitted(); 1280 web_contents_->GetController().PruneAllButLastCommitted();
1275 } 1281 }
1276 1282
1277 void ContentViewCoreImpl::SetAllowJavascriptInterfacesInspection( 1283 void ContentViewCoreImpl::SetAllowJavascriptInterfacesInspection(
1278 JNIEnv* env, 1284 JNIEnv* env,
1279 jobject obj, 1285 jobject obj,
1280 jboolean allow) { 1286 jboolean allow) {
1281 web_contents_->java_bridge_dispatcher_host_manager() 1287 java_bridge_dispatcher_host_manager_->SetAllowObjectContentsInspection(allow);
1282 ->SetAllowObjectContentsInspection(allow);
1283 } 1288 }
1284 1289
1285 void ContentViewCoreImpl::AddJavascriptInterface( 1290 void ContentViewCoreImpl::AddJavascriptInterface(
1286 JNIEnv* env, 1291 JNIEnv* env,
1287 jobject /* obj */, 1292 jobject /* obj */,
1288 jobject object, 1293 jobject object,
1289 jstring name, 1294 jstring name,
1290 jclass safe_annotation_clazz, 1295 jclass safe_annotation_clazz) {
1291 jobject retained_object_set) {
1292 ScopedJavaLocalRef<jobject> scoped_object(env, object); 1296 ScopedJavaLocalRef<jobject> scoped_object(env, object);
1293 ScopedJavaLocalRef<jclass> scoped_clazz(env, safe_annotation_clazz); 1297 ScopedJavaLocalRef<jclass> scoped_clazz(env, safe_annotation_clazz);
1294 JavaObjectWeakGlobalRef weak_retained_object_set(env, retained_object_set);
1295 1298
1296 // JavaBoundObject creates the NPObject with a ref count of 1, and 1299 // JavaBoundObject creates the NPObject with a ref count of 1, and
1297 // JavaBridgeDispatcherHostManager takes its own ref. 1300 // JavaBridgeDispatcherHostManager takes its own ref.
1298 JavaBridgeDispatcherHostManager* java_bridge = 1301 NPObject* bound_object = JavaBoundObject::Create(
1299 web_contents_->java_bridge_dispatcher_host_manager(); 1302 scoped_object,
1300 java_bridge->SetRetainedObjectSet(weak_retained_object_set); 1303 scoped_clazz,
1301 NPObject* bound_object = 1304 java_bridge_dispatcher_host_manager_->AsWeakPtr(),
1302 JavaBoundObject::Create(scoped_object, 1305 java_bridge_dispatcher_host_manager_->GetAllowObjectContentsInspection());
1303 scoped_clazz, 1306 java_bridge_dispatcher_host_manager_->AddNamedObject(
1304 java_bridge->AsWeakPtr(), 1307 ConvertJavaStringToUTF16(env, name), bound_object);
1305 java_bridge->GetAllowObjectContentsInspection());
1306 java_bridge->AddNamedObject(ConvertJavaStringToUTF16(env, name),
1307 bound_object);
1308 blink::WebBindings::releaseObject(bound_object); 1308 blink::WebBindings::releaseObject(bound_object);
1309 } 1309 }
1310 1310
1311 void ContentViewCoreImpl::RemoveJavascriptInterface(JNIEnv* env, 1311 void ContentViewCoreImpl::RemoveJavascriptInterface(JNIEnv* env,
1312 jobject /* obj */, 1312 jobject /* obj */,
1313 jstring name) { 1313 jstring name) {
1314 web_contents_->java_bridge_dispatcher_host_manager()->RemoveNamedObject( 1314 java_bridge_dispatcher_host_manager_->RemoveNamedObject(
1315 ConvertJavaStringToUTF16(env, name)); 1315 ConvertJavaStringToUTF16(env, name));
1316 } 1316 }
1317 1317
1318 void ContentViewCoreImpl::WasResized(JNIEnv* env, jobject obj) { 1318 void ContentViewCoreImpl::WasResized(JNIEnv* env, jobject obj) {
1319 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 1319 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid();
1320 gfx::Size physical_size( 1320 gfx::Size physical_size(
1321 Java_ContentViewCore_getPhysicalBackingWidthPix(env, obj), 1321 Java_ContentViewCore_getPhysicalBackingWidthPix(env, obj),
1322 Java_ContentViewCore_getPhysicalBackingHeightPix(env, obj)); 1322 Java_ContentViewCore_getPhysicalBackingHeightPix(env, obj));
1323 root_layer_->SetBounds(physical_size); 1323 root_layer_->SetBounds(physical_size);
1324 1324
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 static_cast<WebContentsImpl*>(web_contents)->GetView()); 1681 static_cast<WebContentsImpl*>(web_contents)->GetView());
1682 DCHECK(wcva); 1682 DCHECK(wcva);
1683 wcva->SetContentViewCore(NULL); 1683 wcva->SetContentViewCore(NULL);
1684 } 1684 }
1685 1685
1686 // This is called for each ContentView. 1686 // This is called for each ContentView.
1687 jlong Init(JNIEnv* env, 1687 jlong Init(JNIEnv* env,
1688 jobject obj, 1688 jobject obj,
1689 jlong native_web_contents, 1689 jlong native_web_contents,
1690 jlong view_android, 1690 jlong view_android,
1691 jlong window_android) { 1691 jlong window_android,
1692 jobject retained_objects_set) {
1692 ContentViewCoreImpl* view = new ContentViewCoreImpl( 1693 ContentViewCoreImpl* view = new ContentViewCoreImpl(
1693 env, obj, 1694 env, obj,
1694 reinterpret_cast<WebContents*>(native_web_contents), 1695 reinterpret_cast<WebContents*>(native_web_contents),
1695 reinterpret_cast<ui::ViewAndroid*>(view_android), 1696 reinterpret_cast<ui::ViewAndroid*>(view_android),
1696 reinterpret_cast<ui::WindowAndroid*>(window_android)); 1697 reinterpret_cast<ui::WindowAndroid*>(window_android),
1698 retained_objects_set);
1697 return reinterpret_cast<intptr_t>(view); 1699 return reinterpret_cast<intptr_t>(view);
1698 } 1700 }
1699 1701
1700 bool RegisterContentViewCore(JNIEnv* env) { 1702 bool RegisterContentViewCore(JNIEnv* env) {
1701 return RegisterNativesImpl(env); 1703 return RegisterNativesImpl(env);
1702 } 1704 }
1703 1705
1704 } // namespace content 1706 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/android/content_view_core_impl.h ('k') | content/browser/frame_host/interstitial_page_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698