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