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

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

Issue 81243003: Remove notifications from ContentViewCore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: resuming 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 25 matching lines...) Expand all
36 #include "content/browser/renderer_host/render_widget_host_view_android.h" 36 #include "content/browser/renderer_host/render_widget_host_view_android.h"
37 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host. h" 37 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host. h"
38 #include "content/browser/ssl/ssl_host_state.h" 38 #include "content/browser/ssl/ssl_host_state.h"
39 #include "content/browser/web_contents/web_contents_view_android.h" 39 #include "content/browser/web_contents/web_contents_view_android.h"
40 #include "content/common/input/web_input_event_traits.h" 40 #include "content/common/input/web_input_event_traits.h"
41 #include "content/common/input_messages.h" 41 #include "content/common/input_messages.h"
42 #include "content/common/view_messages.h" 42 #include "content/common/view_messages.h"
43 #include "content/public/browser/browser_accessibility_state.h" 43 #include "content/public/browser/browser_accessibility_state.h"
44 #include "content/public/browser/browser_context.h" 44 #include "content/public/browser/browser_context.h"
45 #include "content/public/browser/favicon_status.h" 45 #include "content/public/browser/favicon_status.h"
46 #include "content/public/browser/notification_details.h"
47 #include "content/public/browser/notification_service.h"
48 #include "content/public/browser/notification_source.h"
49 #include "content/public/browser/notification_types.h"
50 #include "content/public/browser/render_frame_host.h" 46 #include "content/public/browser/render_frame_host.h"
51 #include "content/public/browser/web_contents.h" 47 #include "content/public/browser/web_contents.h"
52 #include "content/public/common/content_client.h" 48 #include "content/public/common/content_client.h"
53 #include "content/public/common/content_switches.h" 49 #include "content/public/common/content_switches.h"
54 #include "content/public/common/menu_item.h" 50 #include "content/public/common/menu_item.h"
55 #include "content/public/common/page_transition_types.h" 51 #include "content/public/common/page_transition_types.h"
56 #include "content/public/common/user_agent.h" 52 #include "content/public/common/user_agent.h"
57 #include "jni/ContentViewCore_jni.h" 53 #include "jni/ContentViewCore_jni.h"
58 #include "third_party/WebKit/public/web/WebBindings.h" 54 #include "third_party/WebKit/public/web/WebBindings.h"
59 #include "third_party/WebKit/public/web/WebInputEvent.h" 55 #include "third_party/WebKit/public/web/WebInputEvent.h"
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 } 251 }
256 252
257 ContentViewCoreImpl::~ContentViewCoreImpl() { 253 ContentViewCoreImpl::~ContentViewCoreImpl() {
258 JNIEnv* env = base::android::AttachCurrentThread(); 254 JNIEnv* env = base::android::AttachCurrentThread();
259 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 255 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
260 java_ref_.reset(); 256 java_ref_.reset();
261 if (!j_obj.is_null()) { 257 if (!j_obj.is_null()) {
262 Java_ContentViewCore_onNativeContentViewCoreDestroyed( 258 Java_ContentViewCore_onNativeContentViewCoreDestroyed(
263 env, j_obj.obj(), reinterpret_cast<intptr_t>(this)); 259 env, j_obj.obj(), reinterpret_cast<intptr_t>(this));
264 } 260 }
265 // Make sure nobody calls back into this object while we are tearing things
266 // down.
267 notification_registrar_.RemoveAll();
268 } 261 }
269 262
270 base::android::ScopedJavaLocalRef<jobject> 263 base::android::ScopedJavaLocalRef<jobject>
271 ContentViewCoreImpl::GetWebContentsAndroid(JNIEnv* env, jobject obj) { 264 ContentViewCoreImpl::GetWebContentsAndroid(JNIEnv* env, jobject obj) {
272 return web_contents_->GetJavaWebContents(); 265 return web_contents_->GetJavaWebContents();
273 } 266 }
274 267
275 void ContentViewCoreImpl::OnJavaContentViewCoreDestroyed(JNIEnv* env, 268 void ContentViewCoreImpl::OnJavaContentViewCoreDestroyed(JNIEnv* env,
276 jobject obj) { 269 jobject obj) {
277 DCHECK(env->IsSameObject(java_ref_.get(env).obj(), obj)); 270 DCHECK(env->IsSameObject(java_ref_.get(env).obj(), obj));
278 java_ref_.reset(); 271 java_ref_.reset();
279 } 272 }
280 273
281 void ContentViewCoreImpl::InitWebContents() { 274 void ContentViewCoreImpl::InitWebContents() {
282 DCHECK(web_contents_); 275 DCHECK(web_contents_);
283 notification_registrar_.Add(
284 this, NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
285 Source<WebContents>(web_contents_));
286 notification_registrar_.Add(
287 this, NOTIFICATION_RENDERER_PROCESS_CREATED,
288 content::NotificationService::AllBrowserContextsAndSources());
289 notification_registrar_.Add(
290 this, NOTIFICATION_WEB_CONTENTS_CONNECTED,
291 Source<WebContents>(web_contents_));
292
293 static_cast<WebContentsViewAndroid*>( 276 static_cast<WebContentsViewAndroid*>(
294 static_cast<WebContentsImpl*>(web_contents_)->GetView())-> 277 static_cast<WebContentsImpl*>(web_contents_)->GetView())->
295 SetContentViewCore(this); 278 SetContentViewCore(this);
296 DCHECK(!web_contents_->GetUserData(kContentViewUserDataKey)); 279 DCHECK(!web_contents_->GetUserData(kContentViewUserDataKey));
297 web_contents_->SetUserData(kContentViewUserDataKey, 280 web_contents_->SetUserData(kContentViewUserDataKey,
298 new ContentViewUserData(this)); 281 new ContentViewUserData(this));
299 } 282 }
300 283
301 void ContentViewCoreImpl::Observe(int type, 284 void ContentViewCoreImpl::RenderViewReady() {
302 const NotificationSource& source, 285 JNIEnv* env = AttachCurrentThread();
303 const NotificationDetails& details) { 286 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
304 switch (type) { 287 if (!obj.is_null())
305 case NOTIFICATION_RENDER_VIEW_HOST_CHANGED: { 288 Java_ContentViewCore_onRenderProcessChange(env, obj.obj());
306 std::pair<RenderViewHost*, RenderViewHost*>* switched_details =
307 Details<std::pair<RenderViewHost*, RenderViewHost*> >(details).ptr();
308 int old_pid = 0;
309 if (switched_details->first) {
310 old_pid = GetRenderProcessIdFromRenderViewHost(
311 switched_details->first);
312 289
313 RenderWidgetHostViewAndroid* view =
314 static_cast<RenderWidgetHostViewAndroid*>(
315 switched_details->first->GetView());
316 if (view)
317 view->SetContentViewCore(NULL);
318
319 view = static_cast<RenderWidgetHostViewAndroid*>(
320 switched_details->second->GetView());
321
322 if (view)
323 view->SetContentViewCore(this);
324 }
325 int new_pid = GetRenderProcessIdFromRenderViewHost(
326 web_contents_->GetRenderViewHost());
327 if (new_pid != old_pid) {
328 // Notify the Java side of the change of the current renderer process.
329 JNIEnv* env = AttachCurrentThread();
330 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
331 if (!obj.is_null()) {
332 Java_ContentViewCore_onRenderProcessSwap(env, obj.obj());
333 }
334 }
335 SetFocusInternal(HasFocus());
336
337 SetAccessibilityEnabledInternal(accessibility_enabled_);
338 break;
339 }
340 case NOTIFICATION_RENDERER_PROCESS_CREATED: {
341 // Notify the Java side of the current renderer process.
342 RenderProcessHost* source_process_host =
343 Source<RenderProcessHost>(source).ptr();
344 RenderProcessHost* current_process_host =
345 web_contents_->GetRenderViewHost()->GetProcess();
346
347 if (source_process_host == current_process_host) {
348 JNIEnv* env = AttachCurrentThread();
349 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
350 if (!obj.is_null()) {
351 Java_ContentViewCore_onRenderProcessSwap(env, obj.obj());
352 }
353 }
354 break;
355 }
356 case NOTIFICATION_WEB_CONTENTS_CONNECTED: {
357 JNIEnv* env = AttachCurrentThread();
358 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
359 if (!obj.is_null()) {
360 Java_ContentViewCore_onWebContentsConnected(env, obj.obj());
361 }
362 break;
363 }
364 }
365 }
366
367 void ContentViewCoreImpl::RenderViewReady() {
368 if (device_orientation_ != 0) 290 if (device_orientation_ != 0)
369 SendOrientationChangeEventInternal(); 291 SendOrientationChangeEventInternal();
370 } 292 }
371 293
294 void ContentViewCoreImpl::RenderViewHostChanged(RenderViewHost* old_host,
295 RenderViewHost* new_host) {
296 int old_pid = 0;
297 if (old_host) {
298 old_pid = GetRenderProcessIdFromRenderViewHost(old_host);
299
300 RenderWidgetHostViewAndroid* view =
301 static_cast<RenderWidgetHostViewAndroid*>(old_host->GetView());
302 if (view)
303 view->SetContentViewCore(NULL);
304
305 view = static_cast<RenderWidgetHostViewAndroid*>(new_host->GetView());
306 if (view)
307 view->SetContentViewCore(this);
ppi 2014/05/22 15:58:44 Looking at what attachImeAdapter() cares about (at
no sievers 2014/05/22 20:44:57 I don't think the patch is changing the behavior i
Avi (use Gerrit) 2014/05/22 21:14:27 This is exactly the analog to NOTIFICATION_RENDER_
308 }
309 int new_pid = GetRenderProcessIdFromRenderViewHost(
310 web_contents_->GetRenderViewHost());
311 if (new_pid != old_pid) {
312 // Notify the Java side that the renderer process changed.
313 JNIEnv* env = AttachCurrentThread();
314 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
315 if (!obj.is_null()) {
316 Java_ContentViewCore_onRenderProcessChange(env, obj.obj());
317 }
318 }
319
320 SetFocusInternal(HasFocus());
321 SetAccessibilityEnabledInternal(accessibility_enabled_);
322 }
323
372 RenderWidgetHostViewAndroid* 324 RenderWidgetHostViewAndroid*
373 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() { 325 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() {
374 RenderWidgetHostView* rwhv = NULL; 326 RenderWidgetHostView* rwhv = NULL;
375 if (web_contents_) { 327 if (web_contents_) {
376 rwhv = web_contents_->GetRenderWidgetHostView(); 328 rwhv = web_contents_->GetRenderWidgetHostView();
377 if (web_contents_->ShowingInterstitialPage()) { 329 if (web_contents_->ShowingInterstitialPage()) {
378 rwhv = static_cast<InterstitialPageImpl*>( 330 rwhv = static_cast<InterstitialPageImpl*>(
379 web_contents_->GetInterstitialPage())-> 331 web_contents_->GetInterstitialPage())->
380 GetRenderViewHost()->GetView(); 332 GetRenderViewHost()->GetView();
381 } 333 }
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 reinterpret_cast<ui::WindowAndroid*>(window_android), 1615 reinterpret_cast<ui::WindowAndroid*>(window_android),
1664 retained_objects_set); 1616 retained_objects_set);
1665 return reinterpret_cast<intptr_t>(view); 1617 return reinterpret_cast<intptr_t>(view);
1666 } 1618 }
1667 1619
1668 bool RegisterContentViewCore(JNIEnv* env) { 1620 bool RegisterContentViewCore(JNIEnv* env) {
1669 return RegisterNativesImpl(env); 1621 return RegisterNativesImpl(env);
1670 } 1622 }
1671 1623
1672 } // namespace content 1624 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698