Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / extensions / shell / browser / shell_native_app_window.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "extensions/shell/browser/shell_native_app_window.h"
6
7 #include "content/public/browser/web_contents.h"
8 #include "extensions/shell/browser/desktop_controller.h"
9 #include "ui/aura/window.h"
10 #include "ui/aura/window_tree_host.h"
11 #include "ui/gfx/geometry/insets.h"
12 #include "ui/gfx/geometry/point.h"
13 #include "ui/gfx/geometry/rect.h"
14 #include "ui/gfx/geometry/size.h"
15 #include "ui/wm/core/window_util.h"
16
17 namespace extensions {
18 namespace {
19
20 gfx::Size GetDesktopWindowSize() {
21   return DesktopController::instance()->GetHost()->window()->bounds().size();
22 }
23
24 }  // namespace
25
26 ShellNativeAppWindow::ShellNativeAppWindow(
27     AppWindow* app_window,
28     const AppWindow::CreateParams& params)
29     : app_window_(app_window) {
30   gfx::Rect bounds = params.GetInitialWindowBounds(GetFrameInsets());
31   bool position_specified =
32       bounds.x() != AppWindow::BoundsSpecification::kUnspecifiedPosition &&
33       bounds.y() != AppWindow::BoundsSpecification::kUnspecifiedPosition;
34   if (!position_specified)
35     bounds.set_origin(GetBounds().origin());
36   SetBounds(bounds);
37 }
38
39 ShellNativeAppWindow::~ShellNativeAppWindow() {
40 }
41
42 bool ShellNativeAppWindow::IsActive() const {
43   // Even though app_shell only supports a single app window, there might be
44   // some sort of system-level dialog open and active.
45   aura::Window* window = GetWindow();
46   return window && wm::IsActiveWindow(window);
47 }
48
49 bool ShellNativeAppWindow::IsMaximized() const {
50   return false;
51 }
52
53 bool ShellNativeAppWindow::IsMinimized() const {
54   return false;
55 }
56
57 bool ShellNativeAppWindow::IsFullscreen() const {
58   // The window in app_shell is considered a "restored" window that happens to
59   // fill the display. This avoids special handling of fullscreen or maximized
60   // windows that app_shell doesn't need.
61   return false;
62 }
63
64 gfx::NativeWindow ShellNativeAppWindow::GetNativeWindow() {
65   return GetWindow();
66 }
67
68 gfx::Rect ShellNativeAppWindow::GetRestoredBounds() const {
69   // app_shell windows cannot be maximized, so the current bounds are the
70   // restored bounds.
71   return GetBounds();
72 }
73
74 ui::WindowShowState ShellNativeAppWindow::GetRestoredState() const {
75   return ui::SHOW_STATE_NORMAL;
76 }
77
78 gfx::Rect ShellNativeAppWindow::GetBounds() const {
79   return GetWindow()->GetBoundsInScreen();
80 }
81
82 void ShellNativeAppWindow::Show() {
83   GetWindow()->Show();
84 }
85
86 void ShellNativeAppWindow::Hide() {
87   GetWindow()->Hide();
88 }
89
90 void ShellNativeAppWindow::ShowInactive() {
91   NOTIMPLEMENTED();
92 }
93
94 void ShellNativeAppWindow::Close() {
95   app_window_->OnNativeClose();
96 }
97
98 void ShellNativeAppWindow::Activate() {
99   aura::Window* window = GetWindow();
100   if (window)
101     wm::ActivateWindow(window);
102 }
103
104 void ShellNativeAppWindow::Deactivate() {
105   aura::Window* window = GetWindow();
106   if (window)
107     wm::DeactivateWindow(window);
108 }
109
110 void ShellNativeAppWindow::Maximize() {
111   NOTIMPLEMENTED();
112 }
113
114 void ShellNativeAppWindow::Minimize() {
115   NOTIMPLEMENTED();
116 }
117
118 void ShellNativeAppWindow::Restore() {
119   NOTIMPLEMENTED();
120 }
121
122 void ShellNativeAppWindow::SetBounds(const gfx::Rect& bounds) {
123   GetWindow()->SetBounds(bounds);
124 }
125
126 void ShellNativeAppWindow::FlashFrame(bool flash) {
127   NOTIMPLEMENTED();
128 }
129
130 bool ShellNativeAppWindow::IsAlwaysOnTop() const {
131   return false;
132 }
133
134 void ShellNativeAppWindow::SetAlwaysOnTop(bool always_on_top) {
135   NOTIMPLEMENTED();
136 }
137
138 gfx::NativeView ShellNativeAppWindow::GetHostView() const {
139   NOTIMPLEMENTED();
140   return NULL;
141 }
142
143 gfx::Point ShellNativeAppWindow::GetDialogPosition(const gfx::Size& size) {
144   NOTIMPLEMENTED();
145   return gfx::Point();
146 }
147
148 void ShellNativeAppWindow::AddObserver(
149       web_modal::ModalDialogHostObserver* observer) {
150   NOTIMPLEMENTED();
151 }
152
153 void ShellNativeAppWindow::RemoveObserver(
154       web_modal::ModalDialogHostObserver* observer) {
155   NOTIMPLEMENTED();
156 }
157
158 gfx::Size ShellNativeAppWindow::GetMaximumDialogSize() {
159   NOTIMPLEMENTED();
160   return gfx::Size();
161 }
162
163 void ShellNativeAppWindow::SetFullscreen(int fullscreen_types) {
164   NOTIMPLEMENTED();
165 }
166
167 bool ShellNativeAppWindow::IsFullscreenOrPending() const {
168   // See comment in IsFullscreen().
169   return false;
170 }
171
172 void ShellNativeAppWindow::UpdateWindowIcon() {
173   // No icon to update.
174 }
175
176 void ShellNativeAppWindow::UpdateWindowTitle() {
177   // No window title to update.
178 }
179
180 void ShellNativeAppWindow::UpdateBadgeIcon() {
181   // No badge to update.
182 }
183
184 void ShellNativeAppWindow::UpdateDraggableRegions(
185     const std::vector<DraggableRegion>& regions) {
186   NOTIMPLEMENTED();
187 }
188
189 SkRegion* ShellNativeAppWindow::GetDraggableRegion() {
190   NOTIMPLEMENTED();
191   return NULL;
192 }
193
194 void ShellNativeAppWindow::UpdateShape(scoped_ptr<SkRegion> region) {
195   NOTIMPLEMENTED();
196 }
197
198 void ShellNativeAppWindow::HandleKeyboardEvent(
199       const content::NativeWebKeyboardEvent& event) {
200   // No special handling. The WebContents will handle it.
201 }
202
203 bool ShellNativeAppWindow::IsFrameless() const {
204   NOTIMPLEMENTED();
205   return false;
206 }
207
208 bool ShellNativeAppWindow::HasFrameColor() const {
209   return false;
210 }
211
212 SkColor ShellNativeAppWindow::ActiveFrameColor() const {
213   return SkColor();
214 }
215
216 SkColor ShellNativeAppWindow::InactiveFrameColor() const {
217   return SkColor();
218 }
219
220 gfx::Insets ShellNativeAppWindow::GetFrameInsets() const {
221   return gfx::Insets();
222 }
223
224 void ShellNativeAppWindow::ShowWithApp() {
225   NOTIMPLEMENTED();
226 }
227
228 void ShellNativeAppWindow::HideWithApp() {
229   NOTIMPLEMENTED();
230 }
231
232 void ShellNativeAppWindow::UpdateShelfMenu() {
233   // app_shell has no shelf, dock, or system-tray to update.
234 }
235
236 gfx::Size ShellNativeAppWindow::GetContentMinimumSize() const {
237   // Content fills the desktop and cannot be resized.
238   return GetDesktopWindowSize();
239 }
240
241 gfx::Size ShellNativeAppWindow::GetContentMaximumSize() const {
242   // Content fills the desktop and cannot be resized.
243   return GetDesktopWindowSize();
244 }
245
246 void ShellNativeAppWindow::SetContentSizeConstraints(
247     const gfx::Size& min_size,
248     const gfx::Size& max_size) {
249   NOTIMPLEMENTED();
250 }
251
252 void ShellNativeAppWindow::SetVisibleOnAllWorkspaces(bool always_visible) {
253   NOTIMPLEMENTED();
254 }
255
256 bool ShellNativeAppWindow::CanHaveAlphaEnabled() const {
257   // No background to display if the window was transparent.
258   return false;
259 }
260
261 aura::Window* ShellNativeAppWindow::GetWindow() const {
262   return app_window_->web_contents()->GetNativeView();
263 }
264
265 }  // namespace extensions