Index: chrome/browser/external_tab_container.cc |
=================================================================== |
--- chrome/browser/external_tab_container.cc (revision 10800) |
+++ chrome/browser/external_tab_container.cc (working copy) |
@@ -35,6 +35,7 @@ |
} |
ExternalTabContainer::~ExternalTabContainer() { |
+ Uninitialize(m_hWnd); |
} |
bool ExternalTabContainer::Init(Profile* profile, HWND parent, |
@@ -120,16 +121,18 @@ |
SetParent(parent); |
::ShowWindow(tab_contents_->GetNativeView(), SW_SHOWNA); |
- |
return true; |
} |
-void ExternalTabContainer::OnDestroy() { |
- views::FocusManager* focus_manager = |
- views::FocusManager::GetFocusManager(GetHWND()); |
- if (focus_manager) { |
- focus_manager->RemoveKeystrokeListener(this); |
+bool ExternalTabContainer::Uninitialize(HWND window) { |
+ if (::IsWindow(window)) { |
+ views::FocusManager* focus_manager = |
+ views::FocusManager::GetFocusManager(window); |
+ if (focus_manager) { |
+ focus_manager->RemoveKeystrokeListener(this); |
+ } |
} |
+ |
root_view_.RemoveAllChildViews(true); |
if (tab_contents_) { |
NavigationController* controller = tab_contents_->controller(); |
@@ -139,14 +142,18 @@ |
NotificationType::EXTERNAL_TAB_CLOSED, |
Source<NavigationController>(controller), |
Details<ExternalTabContainer>(this)); |
+ |
tab_contents_->set_delegate(NULL); |
tab_contents_->CloseContents(); |
// WARNING: tab_contents_ has likely been deleted. |
tab_contents_ = NULL; |
} |
+ |
+ return true; |
} |
void ExternalTabContainer::OnFinalMessage(HWND window) { |
+ Uninitialize(window); |
delete this; |
} |