Chromium Code Reviews| 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 2b521eeab8ab5d16927f7318ec53b9656f663b42..8312f0ff62c2c5cdca85dccf475f245f184a9c48 100644 |
| --- a/chrome/browser/ui/extensions/shell_window.cc |
| +++ b/chrome/browser/ui/extensions/shell_window.cc |
| @@ -73,7 +73,11 @@ ShellWindow::CreateParams::CreateParams() |
| frame(ShellWindow::FRAME_CHROME), |
| transparent_background(false), |
| bounds(INT_MIN, INT_MIN, 0, 0), |
| - creator_process_id(0), hidden(false), resizable(true), focused(true) { |
| + creator_process_id(0), |
| + state(STATE_NORMAL), |
| + hidden(false), |
| + resizable(true), |
| + focused(true) { |
| } |
| ShellWindow::CreateParams::~CreateParams() { |
| @@ -95,7 +99,9 @@ ShellWindow::ShellWindow(Profile* profile, |
| : profile_(profile), |
| extension_(extension), |
| window_type_(WINDOW_TYPE_DEFAULT), |
| - ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_ptr_factory_(this)) { |
| + ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_ptr_factory_(this)), |
| + fullscreen_for_window_api_(false), |
| + fullscreen_for_tab_(false) { |
| } |
| void ShellWindow::Init(const GURL& url, |
| @@ -163,6 +169,20 @@ void ShellWindow::Init(const GURL& url, |
| native_app_window_.reset(NativeAppWindow::Create(this, new_params)); |
| OnNativeWindowChanged(); |
| + switch (params.state) { |
| + case CreateParams::STATE_NORMAL: |
| + break; |
| + case CreateParams::STATE_FULLSCREEN: |
| + Fullscreen(); |
| + break; |
| + case CreateParams::STATE_MAXIMIZED: |
| + Maximize(); |
| + break; |
| + case CreateParams::STATE_MINIMIZED: |
| + Minimize(); |
| + break; |
| + } |
|
jeremya
2013/04/05 20:00:35
default: NOTREACHED()?
Are these all okay to do b
scheib
2013/04/05 21:47:52
Google code style suggests NOT having a default if
jeremya
2013/04/08 17:13:54
I hope nobody ever upcasts an int into that enum,
|
| + |
| if (!params.hidden) { |
| if (window_type_is_panel()) |
| GetBaseWindow()->ShowInactive(); // Panels are not activated by default. |
| @@ -380,6 +400,29 @@ void ShellWindow::UpdateAppIcon(const gfx::Image& image) { |
| extensions::ShellWindowRegistry::Get(profile_)->ShellWindowIconChanged(this); |
| } |
| +void ShellWindow::Fullscreen() { |
| + fullscreen_for_window_api_ = true; |
| + GetBaseWindow()->SetFullscreen(true); |
| +} |
| + |
| +void ShellWindow::Maximize() { |
| + GetBaseWindow()->Maximize(); |
| +} |
| + |
| +void ShellWindow::Minimize() { |
| + GetBaseWindow()->Minimize(); |
| +} |
| + |
| +void ShellWindow::Restore() { |
| + fullscreen_for_window_api_ = false; |
| + fullscreen_for_tab_ = false; |
| + if (GetBaseWindow()->IsFullscreenOrPending()) { |
| + GetBaseWindow()->SetFullscreen(false); |
| + } else { |
| + GetBaseWindow()->Restore(); |
| + } |
| +} |
| + |
| //------------------------------------------------------------------------------ |
| // Private methods |
| @@ -453,18 +496,25 @@ void ShellWindow::NavigationStateChanged( |
| void ShellWindow::ToggleFullscreenModeForTab(content::WebContents* source, |
| bool enter_fullscreen) { |
| - bool has_permission = IsExtensionWithPermissionOrSuggestInConsole( |
| + if (!IsExtensionWithPermissionOrSuggestInConsole( |
| APIPermission::kFullscreen, |
| extension_, |
| - source->GetRenderViewHost()); |
| + source->GetRenderViewHost())) { |
| + return; |
| + } |
| - if (has_permission) |
| - native_app_window_->SetFullscreen(enter_fullscreen); |
| + fullscreen_for_tab_ = enter_fullscreen; |
| + |
| + if (enter_fullscreen) { |
| + native_app_window_->SetFullscreen(true); |
| + } else if (!fullscreen_for_window_api_) { |
|
jeremya
2013/04/05 20:00:35
fdsdsffasafdsf.
There must be a better way :(
scheib
2013/04/05 21:47:52
I haven't thought of it. We can fold these two var
jeremya
2013/04/08 17:13:54
I guess there's no way to combine it all into one
|
| + native_app_window_->SetFullscreen(false); |
| + } |
| } |
| bool ShellWindow::IsFullscreenForTabOrPending( |
| const content::WebContents* source) const { |
| - return native_app_window_->IsFullscreenOrPending(); |
| + return fullscreen_for_tab_; |
| } |
| void ShellWindow::Observe(int type, |