summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/browser_bubble.cc
diff options
context:
space:
mode:
authortwiz@google.com <twiz@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-10 01:59:11 +0000
committertwiz@google.com <twiz@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-10 01:59:11 +0000
commita95631cb9427e4d20c243dcd0f36da3fd3e7cb55 (patch)
tree09da2c4493a7303671961051b32718830c451ad7 /chrome/browser/views/browser_bubble.cc
parent2007ad49132097b2a2eb10d0025361d1bf7a9340 (diff)
downloadchromium_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.cc30
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() {