diff options
author | twiz@google.com <twiz@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-10 01:59:11 +0000 |
---|---|---|
committer | twiz@google.com <twiz@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-10 01:59:11 +0000 |
commit | a95631cb9427e4d20c243dcd0f36da3fd3e7cb55 (patch) | |
tree | 09da2c4493a7303671961051b32718830c451ad7 /chrome/browser/views/browser_bubble.cc | |
parent | 2007ad49132097b2a2eb10d0025361d1bf7a9340 (diff) | |
download | chromium_src-a95631cb9427e4d20c243dcd0f36da3fd3e7cb55.zip chromium_src-a95631cb9427e4d20c243dcd0f36da3fd3e7cb55.tar.gz chromium_src-a95631cb9427e4d20c243dcd0f36da3fd3e7cb55.tar.bz2 |
A collection of fixes allowing the chrome.experimental.popup.* set of APIs to function in circumstances where there is no Browser instance present. This is a symptom of a tab-contents view hosted in an ExternalTabContainer.The major change here is the removal of the explicit dependency on a Browser instance across all of the delegates involved when showing a pop-up API. I modified the following delegates:- ExtensionPopupHost::Delegate- TabContentsDelegate- ExtensionFunctionDispatcher::DelegateBecause the pop-up requires a Profile, and a gfx::NativeWindow, I added methods to the above interfaces to provide them.BUG=noneTEST=ExtensionApiTest.FLAKY_Popup
Review URL: http://codereview.chromium.org/434046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34219 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/browser_bubble.cc')
-rw-r--r-- | chrome/browser/views/browser_bubble.cc | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/chrome/browser/views/browser_bubble.cc b/chrome/browser/views/browser_bubble.cc index 087b3b5..6712082 100644 --- a/chrome/browser/views/browser_bubble.cc +++ b/chrome/browser/views/browser_bubble.cc @@ -9,6 +9,21 @@ #include "views/widget/root_view.h" #include "views/window/window.h" +namespace { + +BrowserView* GetBrowserViewFromFrame(views::Widget* frame) { + BrowserView* browser_view = NULL; + views::Window* window = frame->GetWindow(); + if (window) { + browser_view = BrowserView::GetBrowserViewForNativeWindow( + window->GetNativeWindow()); + DCHECK(browser_view); + } + return browser_view; +} + +} // namespace + BrowserBubble::BrowserBubble(views::View* view, views::Widget* frame, const gfx::Point& origin) : frame_(frame), @@ -39,8 +54,8 @@ void BrowserBubble::DetachFromBrowser() { if (!attached_) return; attached_ = false; - BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow( - frame_->GetWindow()->GetNativeWindow()); + + BrowserView* browser_view = GetBrowserViewFromFrame(frame_); if (browser_view) browser_view->DetachBrowserBubble(this); } @@ -49,13 +64,12 @@ void BrowserBubble::AttachToBrowser() { DCHECK(!attached_); if (attached_) return; - BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow( - frame_->GetWindow()->GetNativeWindow()); - DCHECK(browser_view); - if (browser_view) { + + BrowserView* browser_view = GetBrowserViewFromFrame(frame_); + if (browser_view) browser_view->AttachBrowserBubble(this); - attached_ = true; - } + + attached_ = true; } void BrowserBubble::BrowserWindowMoved() { |