Index: chrome/browser/ui/extensions/shell_window.cc |
diff --git a/chrome/browser/ui/extensions/shell_window.cc b/chrome/browser/ui/extensions/shell_window.cc |
index 2c4e5a7a2777346692da0def1c592c7362d77924..e0e5ddb96f63997464ba98136053c48d27d181b8 100644 |
--- a/chrome/browser/ui/extensions/shell_window.cc |
+++ b/chrome/browser/ui/extensions/shell_window.cc |
@@ -50,6 +50,10 @@ |
namespace app_window = extensions::api::app_window; |
+#if defined(USE_ASH) |
+#include "chrome/browser/ui/ash/shell_panel_ash.h" |
+#endif |
+ |
using content::BrowserThread; |
using content::ConsoleMessageLevel; |
using content::RenderViewHost; |
@@ -74,7 +78,8 @@ void SuspendRenderViewHost(RenderViewHost* rvh) { |
} // namespace |
ShellWindow::CreateParams::CreateParams() |
- : frame(ShellWindow::CreateParams::FRAME_CHROME), |
+ : window_type(ShellWindow::WINDOW_TYPE_DEFAULT), |
+ frame(ShellWindow::CreateParams::FRAME_CHROME), |
bounds(INT_MIN, INT_MIN, INT_MIN, INT_MIN), |
restore_position(true), restore_size(true), |
creator_process_id(0), hidden(false) { |
@@ -86,19 +91,21 @@ ShellWindow::CreateParams::~CreateParams() { |
ShellWindow* ShellWindow::Create(Profile* profile, |
const extensions::Extension* extension, |
const GURL& url, |
- const ShellWindow::CreateParams& params) { |
+ const CreateParams& params) { |
// This object will delete itself when the window is closed. |
- ShellWindow* window = new ShellWindow(profile, extension); |
+ ShellWindow* window = new ShellWindow(params.window_type, profile, extension); |
window->Init(url, params); |
extensions::ShellWindowRegistry::Get(profile)->AddShellWindow(window); |
return window; |
} |
-ShellWindow::ShellWindow(Profile* profile, |
+ShellWindow::ShellWindow(WindowType window_type, |
+ Profile* profile, |
const extensions::Extension* extension) |
: profile_(profile), |
extension_(extension), |
web_contents_(NULL), |
+ window_type_(window_type), |
ALLOW_THIS_IN_INITIALIZER_LIST( |
extension_function_dispatcher_(profile, this)) { |
} |
@@ -151,11 +158,22 @@ void ShellWindow::Init(const GURL& url, |
ShellWindow::CreateParams new_params = params; |
new_params.bounds = bounds; |
- native_window_.reset(NativeShellWindow::Create(this, new_params)); |
+ DCHECK(!native_window_.get()); |
+#if defined(USE_ASH) |
+ if (params.window_type == WINDOW_TYPE_PANEL) |
+ native_window_.reset(new ShellPanelAsh(this, params)); |
+#endif |
+ if (!native_window_.get()) |
+ native_window_.reset(NativeShellWindow::Create(this, new_params)); |
+ |
SaveWindowPosition(); |
- if (!params.hidden) |
- GetBaseWindow()->Show(); |
+ if (!params.hidden) { |
+ if (params.window_type != WINDOW_TYPE_PANEL) |
jeremya
2012/11/15 01:09:25
Shouldn't this be == then?
stevenjb
2012/11/16 23:42:40
Yes. Done.
|
+ GetBaseWindow()->ShowInactive(); // Panels are not activated by default. |
+ else |
+ GetBaseWindow()->Show(); |
+ } |
// If the new view is in the same process as the creator, block the created |
// RVH from loading anything until the background page has had a chance to do |
@@ -304,7 +322,8 @@ string16 ShellWindow::GetTitle() const { |
// WebContents::GetTitle() will return the page's URL if there's no <title> |
// specified. However, we'd prefer to show the name of the extension in that |
// case, so we directly inspect the NavigationEntry's title. |
- if (!web_contents()->GetController().GetActiveEntry() || |
+ if (!web_contents() || |
+ !web_contents()->GetController().GetActiveEntry() || |
web_contents()->GetController().GetActiveEntry()->GetTitle().empty()) |
return UTF8ToUTF16(extension()->name()); |
string16 title = web_contents()->GetTitle(); |