diff options
author | jeremya@chromium.org <jeremya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-25 04:59:15 +0000 |
---|---|---|
committer | jeremya@chromium.org <jeremya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-25 04:59:15 +0000 |
commit | 7d412f74d3cb9166de934209d4e366e8aef5b7bf (patch) | |
tree | 4337b0a0680aa2cc613ad5b29967f30468c408e2 | |
parent | 179fe754b91c9ca114287186743483cc1754a47f (diff) | |
download | chromium_src-7d412f74d3cb9166de934209d4e366e8aef5b7bf.zip chromium_src-7d412f74d3cb9166de934209d4e366e8aef5b7bf.tar.gz chromium_src-7d412f74d3cb9166de934209d4e366e8aef5b7bf.tar.bz2 |
Add a 'hidden' option to chrome.app.window.create()
This also adds AppWindow.show()/hide(), to manipulate the visibility of the
window once it has been created.
R=asargent@chromium.org,ben@chromium.org
BUG=131742
Review URL: https://chromiumcodereview.appspot.com/11147037
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164016 0039d316-1c4b-4281-b951-d872f2087c98
23 files changed, 95 insertions, 15 deletions
diff --git a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc b/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc index fceefe3..5619b65 100644 --- a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc +++ b/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc @@ -68,4 +68,16 @@ bool AppCurrentWindowInternalClearAttentionFunction::RunWithWindow( return true; } +bool AppCurrentWindowInternalShowFunction::RunWithWindow( + ShellWindow* window) { + window->GetBaseWindow()->Show(); + return true; +} + +bool AppCurrentWindowInternalHideFunction::RunWithWindow( + ShellWindow* window) { + window->GetBaseWindow()->Hide(); + return true; +} + } // namespace extensions diff --git a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.h b/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.h index da0e359..26aafcd 100644 --- a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.h +++ b/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.h @@ -82,6 +82,26 @@ class AppCurrentWindowInternalClearAttentionFunction virtual bool RunWithWindow(ShellWindow* window) OVERRIDE; }; +class AppCurrentWindowInternalShowFunction + : public AppCurrentWindowInternalExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION_NAME("app.currentWindowInternal.show"); + + protected: + virtual ~AppCurrentWindowInternalShowFunction() {} + virtual bool RunWithWindow(ShellWindow* window) OVERRIDE; +}; + +class AppCurrentWindowInternalHideFunction + : public AppCurrentWindowInternalExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION_NAME("app.currentWindowInternal.hide"); + + protected: + virtual ~AppCurrentWindowInternalHideFunction() {} + virtual bool RunWithWindow(ShellWindow* window) OVERRIDE; +}; + } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_APP_CURRENT_WINDOW_INTERNAL_APP_CURRENT_WINDOW_INTERNAL_API_H_ diff --git a/chrome/browser/extensions/api/app_window/app_window_api.cc b/chrome/browser/extensions/api/app_window/app_window_api.cc index efe0d16..3578935 100644 --- a/chrome/browser/extensions/api/app_window/app_window_api.cc +++ b/chrome/browser/extensions/api/app_window/app_window_api.cc @@ -179,6 +179,9 @@ bool AppWindowCreateFunction::RunImpl() { create_params.bounds.set_height(maximum_size.height()); if (create_params.bounds.height() < minimum_size.height()) create_params.bounds.set_height(minimum_size.height()); + + if (options->hidden.get()) + create_params.hidden = *options->hidden.get(); } create_params.creator_process_id = @@ -186,7 +189,6 @@ bool AppWindowCreateFunction::RunImpl() { ShellWindow* shell_window = ShellWindow::Create(profile(), GetExtension(), url, create_params); - shell_window->GetBaseWindow()->Show(); content::RenderViewHost* created_view = shell_window->web_contents()->GetRenderViewHost(); diff --git a/chrome/browser/ui/base_window.h b/chrome/browser/ui/base_window.h index 70c8ce6..deaa700 100644 --- a/chrome/browser/ui/base_window.h +++ b/chrome/browser/ui/base_window.h @@ -46,6 +46,9 @@ class BaseWindow { // Shows the window, or activates it if it's already visible. virtual void Show() = 0; + // Hides the window. + virtual void Hide() = 0; + // Show the window, but do not activate it. Does nothing if window // is already visible. virtual void ShowInactive() = 0; diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.h b/chrome/browser/ui/cocoa/browser_window_cocoa.h index 1b88cb6..d815aba 100644 --- a/chrome/browser/ui/cocoa/browser_window_cocoa.h +++ b/chrome/browser/ui/cocoa/browser_window_cocoa.h @@ -42,6 +42,7 @@ class BrowserWindowCocoa : // Overridden from BrowserWindow virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; + virtual void Hide() OVERRIDE; virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; virtual void Close() OVERRIDE; virtual void Activate() OVERRIDE; diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_cocoa.mm index a637f6f..b15fb7c 100644 --- a/chrome/browser/ui/cocoa/browser_window_cocoa.mm +++ b/chrome/browser/ui/cocoa/browser_window_cocoa.mm @@ -145,6 +145,10 @@ void BrowserWindowCocoa::ShowInactive() { [window() orderFront:controller_]; } +void BrowserWindowCocoa::Hide() { + // Not implemented. +} + void BrowserWindowCocoa::SetBounds(const gfx::Rect& bounds) { gfx::Rect real_bounds = [controller_ enforceMinWindowSize:bounds]; diff --git a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.h b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.h index 01b0288..a719741 100644 --- a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.h +++ b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.h @@ -61,6 +61,7 @@ class ShellWindowCocoa : public NativeShellWindow { virtual gfx::Rect GetBounds() const OVERRIDE; virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; + virtual void Hide() OVERRIDE; virtual void Close() OVERRIDE; virtual void Activate() OVERRIDE; virtual void Deactivate() OVERRIDE; diff --git a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm index 917b827..a87b7ca 100644 --- a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm +++ b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm @@ -397,6 +397,10 @@ void ShellWindowCocoa::ShowInactive() { [window() orderFront:window_controller_]; } +void ShellWindowCocoa::Hide() { + [window() orderOut:window_controller_]; +} + void ShellWindowCocoa::Close() { [window() performClose:nil]; } diff --git a/chrome/browser/ui/extensions/shell_window.cc b/chrome/browser/ui/extensions/shell_window.cc index 4b61960..a8c1bb9 100644 --- a/chrome/browser/ui/extensions/shell_window.cc +++ b/chrome/browser/ui/extensions/shell_window.cc @@ -71,7 +71,7 @@ ShellWindow::CreateParams::CreateParams() : frame(ShellWindow::CreateParams::FRAME_CHROME), bounds(-1, -1, kDefaultWidth, kDefaultHeight), restore_position(true), restore_size(true), - creator_process_id(0) { + creator_process_id(0), hidden(false) { } ShellWindow::CreateParams::~CreateParams() { @@ -115,6 +115,9 @@ void ShellWindow::Init(const GURL& url, native_window_.reset(NativeShellWindow::Create(this, params)); + if (!params.hidden) + GetBaseWindow()->Show(); + if (!params.window_key.empty()) { window_key_ = params.window_key; diff --git a/chrome/browser/ui/extensions/shell_window.h b/chrome/browser/ui/extensions/shell_window.h index 3aa30fd..231bb62 100644 --- a/chrome/browser/ui/extensions/shell_window.h +++ b/chrome/browser/ui/extensions/shell_window.h @@ -68,6 +68,9 @@ class ShellWindow : public content::NotificationObserver, // The process ID of the process that requested the create. int32 creator_process_id; + + // If true, don't show the window after creation. + bool hidden; }; static ShellWindow* Create(Profile* profile, diff --git a/chrome/browser/ui/gtk/browser_window_gtk.cc b/chrome/browser/ui/gtk/browser_window_gtk.cc index 314feac..2ae6951 100644 --- a/chrome/browser/ui/gtk/browser_window_gtk.cc +++ b/chrome/browser/ui/gtk/browser_window_gtk.cc @@ -610,6 +610,10 @@ void BrowserWindowGtk::ShowInactive() { gtk_widget_show(GTK_WIDGET(window_)); } +void BrowserWindowGtk::Hide() { + // Not implemented. +} + void BrowserWindowGtk::SetBoundsImpl(const gfx::Rect& bounds, bool exterior, bool move) { diff --git a/chrome/browser/ui/gtk/browser_window_gtk.h b/chrome/browser/ui/gtk/browser_window_gtk.h index 234a3cf..952c7dc 100644 --- a/chrome/browser/ui/gtk/browser_window_gtk.h +++ b/chrome/browser/ui/gtk/browser_window_gtk.h @@ -73,6 +73,7 @@ class BrowserWindowGtk // Overridden from BrowserWindow: virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; + virtual void Hide() OVERRIDE; virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; virtual void Close() OVERRIDE; virtual void Activate() OVERRIDE; diff --git a/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc b/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc index 5a926ad..bba8a74 100644 --- a/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc +++ b/chrome/browser/ui/gtk/extensions/shell_window_gtk.cc @@ -168,6 +168,10 @@ void ShellWindowGtk::ShowInactive() { gtk_widget_show(GTK_WIDGET(window_)); } +void ShellWindowGtk::Hide() { + gtk_widget_hide(GTK_WIDGET(window_)); +} + void ShellWindowGtk::Close() { shell_window_->SaveWindowPosition(); diff --git a/chrome/browser/ui/gtk/extensions/shell_window_gtk.h b/chrome/browser/ui/gtk/extensions/shell_window_gtk.h index 67226aa..bcd1f38 100644 --- a/chrome/browser/ui/gtk/extensions/shell_window_gtk.h +++ b/chrome/browser/ui/gtk/extensions/shell_window_gtk.h @@ -40,6 +40,7 @@ class ShellWindowGtk : public NativeShellWindow, virtual gfx::Rect GetBounds() const OVERRIDE; virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; + virtual void Hide() OVERRIDE; virtual void Close() OVERRIDE; virtual void Activate() OVERRIDE; virtual void Deactivate() OVERRIDE; diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc index 32812a9..be52d97 100644 --- a/chrome/browser/ui/panels/panel.cc +++ b/chrome/browser/ui/panels/panel.cc @@ -419,6 +419,10 @@ void Panel::ShowInactive() { native_panel_->ShowPanelInactive(); } +void Panel::Hide() { + // Not implemented. +} + void Panel::SetBounds(const gfx::Rect& bounds) { // Ignore bounds position as the panel manager controls all positioning. if (!panel_strip_) diff --git a/chrome/browser/ui/panels/panel.h b/chrome/browser/ui/panels/panel.h index b913e1d..6264e97 100644 --- a/chrome/browser/ui/panels/panel.h +++ b/chrome/browser/ui/panels/panel.h @@ -123,6 +123,7 @@ class Panel : public BaseWindow, virtual gfx::Rect GetBounds() const OVERRIDE; virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; + virtual void Hide() OVERRIDE; virtual void Close() OVERRIDE; virtual void Activate() OVERRIDE; virtual void Deactivate() OVERRIDE; diff --git a/chrome/browser/ui/views/extensions/shell_window_views.cc b/chrome/browser/ui/views/extensions/shell_window_views.cc index bceea4e..3928d97 100644 --- a/chrome/browser/ui/views/extensions/shell_window_views.cc +++ b/chrome/browser/ui/views/extensions/shell_window_views.cc @@ -353,8 +353,6 @@ ShellWindowViews::ShellWindowViews(ShellWindow* shell_window, shell_window_)); OnViewWasResized(); - - window_->Show(); } views::View* ShellWindowViews::GetInitiallyFocusedView() { @@ -455,6 +453,10 @@ void ShellWindowViews::ShowInactive() { window_->ShowInactive(); } +void ShellWindowViews::Hide() { + window_->Hide(); +} + void ShellWindowViews::Close() { window_->Close(); } diff --git a/chrome/browser/ui/views/extensions/shell_window_views.h b/chrome/browser/ui/views/extensions/shell_window_views.h index 80c5fc5..7f5e1f6 100644 --- a/chrome/browser/ui/views/extensions/shell_window_views.h +++ b/chrome/browser/ui/views/extensions/shell_window_views.h @@ -48,6 +48,7 @@ class ShellWindowViews : public NativeShellWindow, virtual gfx::Rect GetBounds() const OVERRIDE; virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; + virtual void Hide() OVERRIDE; virtual void Close() OVERRIDE; virtual void Activate() OVERRIDE; virtual void Deactivate() OVERRIDE; diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index 54f2ec6..b67952d 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -618,6 +618,10 @@ void BrowserView::ShowInactive() { frame_->ShowInactive(); } +void BrowserView::Hide() { + // Not implemented. +} + void BrowserView::SetBounds(const gfx::Rect& bounds) { ExitFullscreen(); GetWidget()->SetBounds(bounds); diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index c5905c8..3edbd93 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h @@ -237,6 +237,7 @@ class BrowserView : public BrowserWindow, // Overridden from BrowserWindow: virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; + virtual void Hide() OVERRIDE; virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; virtual void Close() OVERRIDE; virtual void Activate() OVERRIDE; diff --git a/chrome/common/extensions/api/app_current_window_internal.idl b/chrome/common/extensions/api/app_current_window_internal.idl index 7cc6f95..2bf231b 100644 --- a/chrome/common/extensions/api/app_current_window_internal.idl +++ b/chrome/common/extensions/api/app_current_window_internal.idl @@ -2,24 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// This is used by the app window API internally to pass through messages to +// the shell window. [internal, nodoc] namespace app.currentWindowInternal { interface Functions { - // Focus the window. static void focus(); - - // Minimize the window. static void minimize(); - - // Maximize the window. static void maximize(); - - // Restore the window. static void restore(); - - // Draw attention to the window. static void drawAttention(); - - // Clear attention to the window. static void clearAttention(); + static void show(); + static void hide(); }; }; diff --git a/chrome/common/extensions/api/app_window.idl b/chrome/common/extensions/api/app_window.idl index fe8fa9c..dd576d5 100644 --- a/chrome/common/extensions/api/app_window.idl +++ b/chrome/common/extensions/api/app_window.idl @@ -50,6 +50,10 @@ namespace app.window { // Frame type: 'none' or 'chrome' (defaults to 'chrome'). DOMString? frame; + + // If true, the window will be created in a hidden state. Call show() on + // the window to show it once it has been created. Defaults to false. + boolean? hidden; }; callback CreateWindowCallback = @@ -83,6 +87,12 @@ namespace app.window { // Close the window. static void close(); + // Show the window. Does nothing if the window is already visible. + static void show(); + + // Hide the window. Does nothing if the window is already hidden. + static void hide(); + // The JavaScript 'window' object for the created child. [instanceOf=global] object contentWindow; }; diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h index eb3e34a..9f92754 100644 --- a/chrome/test/base/test_browser_window.h +++ b/chrome/test/base/test_browser_window.h @@ -28,6 +28,7 @@ class TestBrowserWindow : public BrowserWindow { // BrowserWindow: virtual void Show() OVERRIDE {} virtual void ShowInactive() OVERRIDE {} + virtual void Hide() OVERRIDE {} virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE {} virtual void Close() OVERRIDE {} virtual void Activate() OVERRIDE {} |