Index: chrome/browser/views/extensions/extension_popup.cc |
=================================================================== |
--- chrome/browser/views/extensions/extension_popup.cc (revision 34039) |
+++ chrome/browser/views/extensions/extension_popup.cc (working copy) |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/views/extensions/extension_popup.h" |
#include "chrome/browser/browser.h" |
+#include "chrome/browser/browser_list.h" |
#include "chrome/browser/browser_window.h" |
#include "chrome/browser/profile.h" |
#include "chrome/browser/extensions/extension_process_manager.h" |
@@ -27,7 +28,7 @@ |
const int ExtensionPopup::kMaxHeight = 600; |
ExtensionPopup::ExtensionPopup(ExtensionHost* host, |
- Widget* frame, |
+ views::Widget* frame, |
const gfx::Rect& relative_to, |
BubbleBorder::ArrowLocation arrow_location, |
bool activate_on_show) |
@@ -79,7 +80,8 @@ |
return; |
#if defined(OS_WIN) |
- frame_->GetWindow()->DisableInactiveRendering(); |
+ if (frame_->GetWindow()) |
+ frame_->GetWindow()->DisableInactiveRendering(); |
#endif |
ResizeToView(); |
@@ -142,20 +144,32 @@ |
// static |
ExtensionPopup* ExtensionPopup::Show( |
- const GURL& url, Browser* browser, |
+ const GURL& url, |
+ Browser* browser, |
+ Profile* profile, |
+ gfx::NativeWindow frame_window, |
const gfx::Rect& relative_to, |
BubbleBorder::ArrowLocation arrow_location, |
bool activate_on_show) { |
- ExtensionProcessManager* manager = |
- browser->profile()->GetExtensionProcessManager(); |
+ DCHECK(profile); |
+ DCHECK(frame_window); |
+ ExtensionProcessManager* manager = profile->GetExtensionProcessManager(); |
DCHECK(manager); |
if (!manager) |
return NULL; |
+ // If no Browser instance was given, attempt to look up one matching the given |
+ // profile. |
+ if (!browser) |
+ browser = BrowserList::FindBrowserWithProfile(profile); |
+ |
+ Widget* frame_widget = Widget::GetWidgetFromNativeWindow(frame_window); |
+ DCHECK(frame_widget); |
+ if (!frame_widget) |
+ return NULL; |
+ |
ExtensionHost* host = manager->CreatePopup(url, browser); |
- views::Widget* frame = BrowserView::GetBrowserViewForNativeWindow( |
- browser->window()->GetNativeHandle())->GetWidget(); |
- ExtensionPopup* popup = new ExtensionPopup(host, frame, relative_to, |
+ ExtensionPopup* popup = new ExtensionPopup(host, frame_widget, relative_to, |
arrow_location, activate_on_show); |
// If the host had somehow finished loading, then we'd miss the notification |