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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 1711103002: Implement lifetime observer on RenderWidgetHostViewBase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased to r378132. Created 4 years, 9 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/renderer_host/render_widget_host_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #import <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <OpenGL/gl.h> 8 #include <OpenGL/gl.h>
9 #include <QuartzCore/QuartzCore.h> 9 #include <QuartzCore/QuartzCore.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 556
557 RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { 557 RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
558 gfx::Screen::GetScreen()->RemoveObserver(this); 558 gfx::Screen::GetScreen()->RemoveObserver(this);
559 559
560 // This is being called from |cocoa_view_|'s destructor, so invalidate the 560 // This is being called from |cocoa_view_|'s destructor, so invalidate the
561 // pointer. 561 // pointer.
562 cocoa_view_ = nil; 562 cocoa_view_ = nil;
563 563
564 UnlockMouse(); 564 UnlockMouse();
565 565
566 if (render_widget_host_ && render_widget_host_->delegate() &&
567 render_widget_host_->delegate()->GetInputEventRouter()) {
568 render_widget_host_->delegate()
569 ->GetInputEventRouter()
570 ->RemoveSurfaceIdNamespaceOwner(GetSurfaceIdNamespace());
571 }
572
573 // Ensure that the browser compositor is destroyed in a safe order. 566 // Ensure that the browser compositor is destroyed in a safe order.
574 ShutdownBrowserCompositor(); 567 ShutdownBrowserCompositor();
575 568
576 // We are owned by RenderWidgetHostViewCocoa, so if we go away before the 569 // We are owned by RenderWidgetHostViewCocoa, so if we go away before the
577 // RenderWidgetHost does we need to tell it not to hold a stale pointer to 570 // RenderWidgetHost does we need to tell it not to hold a stale pointer to
578 // us. 571 // us.
579 if (render_widget_host_) { 572 if (render_widget_host_) {
580 // If this is a RenderWidgetHostViewGuest's platform_view_, we're not the 573 // If this is a RenderWidgetHostViewGuest's platform_view_, we're not the
581 // RWH's view, the RenderWidgetHostViewGuest is. So don't reset the RWH's 574 // RWH's view, the RenderWidgetHostViewGuest is. So don't reset the RWH's
582 // view, the RenderWidgetHostViewGuest will do it. 575 // view, the RenderWidgetHostViewGuest will do it.
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 composition_range_ = range; 1046 composition_range_ = range;
1054 composition_bounds_ = character_bounds; 1047 composition_bounds_ = character_bounds;
1055 } 1048 }
1056 1049
1057 void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status, 1050 void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status,
1058 int error_code) { 1051 int error_code) {
1059 Destroy(); 1052 Destroy();
1060 } 1053 }
1061 1054
1062 void RenderWidgetHostViewMac::Destroy() { 1055 void RenderWidgetHostViewMac::Destroy() {
1056 // SurfaceIdNamespaces registered with RenderWidgetHostInputEventRouter
1057 // have already been cleared when RenderWidgetHostViewBase notified its
1058 // observers of our impending destruction.
1063 [[NSNotificationCenter defaultCenter] 1059 [[NSNotificationCenter defaultCenter]
1064 removeObserver:cocoa_view_ 1060 removeObserver:cocoa_view_
1065 name:NSWindowWillCloseNotification 1061 name:NSWindowWillCloseNotification
1066 object:popup_window_]; 1062 object:popup_window_];
1067 1063
1068 // We've been told to destroy. 1064 // We've been told to destroy.
1069 [cocoa_view_ retain]; 1065 [cocoa_view_ retain];
1070 [cocoa_view_ removeFromSuperview]; 1066 [cocoa_view_ removeFromSuperview];
1071 [cocoa_view_ autorelease]; 1067 [cocoa_view_ autorelease];
1072 1068
1073 [popup_window_ close]; 1069 [popup_window_ close];
1074 popup_window_.autorelease(); 1070 popup_window_.autorelease();
1075 1071
1076 [fullscreen_window_manager_ exitFullscreenMode]; 1072 [fullscreen_window_manager_ exitFullscreenMode];
1077 fullscreen_window_manager_.reset(); 1073 fullscreen_window_manager_.reset();
1078 [pepper_fullscreen_window_ close]; 1074 [pepper_fullscreen_window_ close];
1079 1075
1080 // This can be called as part of processing the window's responder 1076 // This can be called as part of processing the window's responder
1081 // chain, for instance |-performKeyEquivalent:|. In that case the 1077 // chain, for instance |-performKeyEquivalent:|. In that case the
1082 // object needs to survive until the stack unwinds. 1078 // object needs to survive until the stack unwinds.
1083 pepper_fullscreen_window_.autorelease(); 1079 pepper_fullscreen_window_.autorelease();
1084 1080
1085 // Clear SurfaceID namespace ownership before we shutdown the
1086 // compositor.
1087 if (render_widget_host_ && render_widget_host_->delegate() &&
1088 render_widget_host_->delegate()->GetInputEventRouter()) {
1089 render_widget_host_->delegate()
1090 ->GetInputEventRouter()
1091 ->RemoveSurfaceIdNamespaceOwner(GetSurfaceIdNamespace());
1092 }
1093
1094 // Delete the delegated frame state, which will reach back into 1081 // Delete the delegated frame state, which will reach back into
1095 // render_widget_host_. 1082 // render_widget_host_.
1096 ShutdownBrowserCompositor(); 1083 ShutdownBrowserCompositor();
1097 1084
1085 // Make sure none of our observers send events for us to process after
1086 // we release render_widget_host_.
1087 NotifyObserversAboutShutdown();
1088
1098 // We get this call just before |render_widget_host_| deletes 1089 // We get this call just before |render_widget_host_| deletes
1099 // itself. But we are owned by |cocoa_view_|, which may be retained 1090 // itself. But we are owned by |cocoa_view_|, which may be retained
1100 // by some other code. Examples are WebContentsViewMac's 1091 // by some other code. Examples are WebContentsViewMac's
1101 // |latent_focus_view_| and TabWindowController's 1092 // |latent_focus_view_| and TabWindowController's
1102 // |cachedContentView_|. 1093 // |cachedContentView_|.
1103 render_widget_host_ = NULL; 1094 render_widget_host_ = NULL;
1104 } 1095 }
1105 1096
1106 // Called from the renderer to tell us what the tooltip text should be. It 1097 // Called from the renderer to tell us what the tooltip text should be. It
1107 // calls us frequently so we need to cache the value to prevent doing a lot 1098 // calls us frequently so we need to cache the value to prevent doing a lot
(...skipping 2341 matching lines...) Expand 10 before | Expand all | Expand 10 after
3449 3440
3450 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 3441 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
3451 // regions that are not draggable. (See ControlRegionView in 3442 // regions that are not draggable. (See ControlRegionView in
3452 // native_app_window_cocoa.mm). This requires the render host view to be 3443 // native_app_window_cocoa.mm). This requires the render host view to be
3453 // draggable by default. 3444 // draggable by default.
3454 - (BOOL)mouseDownCanMoveWindow { 3445 - (BOOL)mouseDownCanMoveWindow {
3455 return YES; 3446 return YES;
3456 } 3447 }
3457 3448
3458 @end 3449 @end
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_base_observer.cc ('k') | content/content_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698