Index: chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm |
diff --git a/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm |
index 94d0dca5f38b18171b6e6272a14f0257a599f7dd..bddbc41dd227af8d5cd8c61b9fb14b2b402fd474 100644 |
--- a/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm |
+++ b/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm |
@@ -214,17 +214,20 @@ class DevtoolsNotificationBridge : public content::NotificationObserver { |
modalDialogManager->IsDialogActive()) { |
return; |
} |
+ // We must shutdown host_ immediately, and it will notify RendererProcess |
+ // right away. We can't wait to do it in |
+ // -[ExtensionPopController windowWillClose:...] |
+ if (host_->view()) |
+ host_->view()->set_container(NULL); |
+ host_.reset(); |
} |
[super close]; |
} |
-- (void)windowWillClose:(NSNotification *)notification { |
+- (void)windowWillClose:(NSNotification*)notification { |
[super windowWillClose:notification]; |
if (gPopup == self) |
gPopup = nil; |
- if (host_->view()) |
- host_->view()->set_container(NULL); |
- host_.reset(); |
} |
- (void)windowDidResignKey:(NSNotification*)notification { |
@@ -280,6 +283,11 @@ class DevtoolsNotificationBridge : public content::NotificationObserver { |
if (!host) |
return nil; |
+ // Since we only close without releasing(see bug:351278), we need to shutdown |
+ // host_ in -[ExtensionPopupController close] immediately. If not, host_ might |
+ // not be released even when new ExtensionPopupController is ready. And |
+ // this causes bug:376511. |
+ // See above -[ExtensionPopupController close]. |
[gPopup close]; |
Xuefei Ren
2014/06/10 05:24:32
See bug:361278, and patch is 64ced6a2af4cb2b46756b
|
// Takes ownership of |host|. Also will autorelease itself when the popup is |
@@ -384,13 +392,13 @@ class DevtoolsNotificationBridge : public content::NotificationObserver { |
- (void)windowDidResize:(NSNotification*)notification { |
// Let the extension view know, so that it can tell plugins. |
- if (host_->view()) |
+ if (host_ && host_->view()) |
host_->view()->WindowFrameChanged(); |
} |
- (void)windowDidMove:(NSNotification*)notification { |
// Let the extension view know, so that it can tell plugins. |
- if (host_->view()) |
+ if (host_ && host_->view()) |
host_->view()->WindowFrameChanged(); |
} |