summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjeremya@chromium.org <jeremya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-25 04:59:15 +0000
committerjeremya@chromium.org <jeremya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-25 04:59:15 +0000
commit7d412f74d3cb9166de934209d4e366e8aef5b7bf (patch)
tree4337b0a0680aa2cc613ad5b29967f30468c408e2
parent179fe754b91c9ca114287186743483cc1754a47f (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc12
-rw-r--r--chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.h20
-rw-r--r--chrome/browser/extensions/api/app_window/app_window_api.cc4
-rw-r--r--chrome/browser/ui/base_window.h3
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.h1
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.mm4
-rw-r--r--chrome/browser/ui/cocoa/extensions/shell_window_cocoa.h1
-rw-r--r--chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm4
-rw-r--r--chrome/browser/ui/extensions/shell_window.cc5
-rw-r--r--chrome/browser/ui/extensions/shell_window.h3
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.cc4
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.h1
-rw-r--r--chrome/browser/ui/gtk/extensions/shell_window_gtk.cc4
-rw-r--r--chrome/browser/ui/gtk/extensions/shell_window_gtk.h1
-rw-r--r--chrome/browser/ui/panels/panel.cc4
-rw-r--r--chrome/browser/ui/panels/panel.h1
-rw-r--r--chrome/browser/ui/views/extensions/shell_window_views.cc6
-rw-r--r--chrome/browser/ui/views/extensions/shell_window_views.h1
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc4
-rw-r--r--chrome/browser/ui/views/frame/browser_view.h1
-rw-r--r--chrome/common/extensions/api/app_current_window_internal.idl15
-rw-r--r--chrome/common/extensions/api/app_window.idl10
-rw-r--r--chrome/test/base/test_browser_window.h1
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 {}