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 "apps/shell/browser/shell_desktop_controller.h" | 5 #include "apps/shell/browser/shell_desktop_controller.h" |
6 | 6 |
7 #include "apps/shell/browser/shell_app_window.h" | 7 #include "apps/shell/browser/shell_app_window_controller.h" |
8 #include "content/public/browser/context_factory.h" | 8 #include "content/public/browser/context_factory.h" |
9 #include "ui/aura/client/cursor_client.h" | 9 #include "ui/aura/client/cursor_client.h" |
10 #include "ui/aura/client/default_capture_client.h" | 10 #include "ui/aura/client/default_capture_client.h" |
11 #include "ui/aura/env.h" | 11 #include "ui/aura/env.h" |
12 #include "ui/aura/layout_manager.h" | 12 #include "ui/aura/layout_manager.h" |
13 #include "ui/aura/test/test_screen.h" | 13 #include "ui/aura/test/test_screen.h" |
14 #include "ui/aura/window.h" | 14 #include "ui/aura/window.h" |
15 #include "ui/aura/window_event_dispatcher.h" | 15 #include "ui/aura/window_event_dispatcher.h" |
16 #include "ui/aura/window_tree_host.h" | 16 #include "ui/aura/window_tree_host.h" |
17 #include "ui/base/cursor/cursor.h" | 17 #include "ui/base/cursor/cursor.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 display_configurator_->ForceInitialConfigure(0); | 166 display_configurator_->ForceInitialConfigure(0); |
167 display_configurator_->AddObserver(this); | 167 display_configurator_->AddObserver(this); |
168 #endif | 168 #endif |
169 aura::Env::CreateInstance(true); | 169 aura::Env::CreateInstance(true); |
170 aura::Env::GetInstance()->set_context_factory(content::GetContextFactory()); | 170 aura::Env::GetInstance()->set_context_factory(content::GetContextFactory()); |
171 | 171 |
172 g_instance = this; | 172 g_instance = this; |
173 } | 173 } |
174 | 174 |
175 ShellDesktopController::~ShellDesktopController() { | 175 ShellDesktopController::~ShellDesktopController() { |
176 // The app window must be explicitly closed before desktop teardown. | 176 app_window_controller_.reset(); |
177 DCHECK(!app_window_); | |
178 g_instance = NULL; | 177 g_instance = NULL; |
179 DestroyRootWindow(); | 178 DestroyRootWindow(); |
180 aura::Env::DeleteInstance(); | 179 aura::Env::DeleteInstance(); |
181 } | 180 } |
182 | 181 |
183 // static | 182 // static |
184 ShellDesktopController* ShellDesktopController::instance() { | 183 ShellDesktopController* ShellDesktopController::instance() { |
185 return g_instance; | 184 return g_instance; |
186 } | 185 } |
187 | 186 |
| 187 void ShellDesktopController::SetAppWindowController( |
| 188 ShellAppWindowController* app_window_controller) { |
| 189 app_window_controller_.reset(app_window_controller); |
| 190 } |
| 191 |
188 ShellAppWindow* ShellDesktopController::CreateAppWindow( | 192 ShellAppWindow* ShellDesktopController::CreateAppWindow( |
189 content::BrowserContext* context) { | 193 content::BrowserContext* context) { |
190 aura::Window* root_window = host_->window(); | 194 return app_window_controller_->CreateAppWindow(context); |
191 | |
192 app_window_.reset(new ShellAppWindow); | |
193 app_window_->Init(context, root_window->bounds().size()); | |
194 | |
195 // Attach the web contents view to our window hierarchy. | |
196 aura::Window* content = app_window_->GetNativeWindow(); | |
197 root_window->AddChild(content); | |
198 content->Show(); | |
199 | |
200 return app_window_.get(); | |
201 } | 195 } |
202 | 196 |
203 void ShellDesktopController::CloseAppWindow() { app_window_.reset(); } | 197 void ShellDesktopController::CloseAppWindows() { |
| 198 if (app_window_controller_) |
| 199 app_window_controller_->CloseAppWindows(); |
| 200 } |
204 | 201 |
205 aura::Window* ShellDesktopController::GetDefaultParent( | 202 aura::Window* ShellDesktopController::GetDefaultParent( |
206 aura::Window* context, | 203 aura::Window* context, |
207 aura::Window* window, | 204 aura::Window* window, |
208 const gfx::Rect& bounds) { | 205 const gfx::Rect& bounds) { |
209 return host_->window(); | 206 return host_->window(); |
210 } | 207 } |
211 | 208 |
212 #if defined(OS_CHROMEOS) | 209 #if defined(OS_CHROMEOS) |
213 void ShellDesktopController::OnDisplayModeChanged( | 210 void ShellDesktopController::OnDisplayModeChanged( |
214 const std::vector<ui::DisplayConfigurator::DisplayState>& displays) { | 211 const std::vector<ui::DisplayConfigurator::DisplayState>& displays) { |
215 gfx::Size size = GetPrimaryDisplaySize(); | 212 gfx::Size size = GetPrimaryDisplaySize(); |
216 if (!size.IsEmpty()) | 213 if (!size.IsEmpty()) |
217 host_->UpdateRootWindowSize(size); | 214 host_->UpdateRootWindowSize(size); |
218 } | 215 } |
219 #endif | 216 #endif |
220 | 217 |
221 void ShellDesktopController::OnHostCloseRequested( | 218 void ShellDesktopController::OnHostCloseRequested( |
222 const aura::WindowTreeHost* host) { | 219 const aura::WindowTreeHost* host) { |
223 DCHECK_EQ(host_.get(), host); | 220 DCHECK_EQ(host_.get(), host); |
224 CloseAppWindow(); | 221 CloseAppWindows(); |
225 base::MessageLoop::current()->PostTask(FROM_HERE, | 222 base::MessageLoop::current()->PostTask(FROM_HERE, |
226 base::MessageLoop::QuitClosure()); | 223 base::MessageLoop::QuitClosure()); |
227 } | 224 } |
228 | 225 |
229 void ShellDesktopController::CreateRootWindow() { | 226 void ShellDesktopController::CreateRootWindow() { |
230 test_screen_.reset(aura::TestScreen::Create()); | 227 test_screen_.reset(aura::TestScreen::Create()); |
231 // TODO(jamescook): Replace this with a real Screen implementation. | 228 // TODO(jamescook): Replace this with a real Screen implementation. |
232 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get()); | 229 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get()); |
233 // TODO(mukai): Set up input method. | 230 // TODO(mukai): Set up input method. |
234 | 231 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 if (displays.empty()) | 316 if (displays.empty()) |
320 return gfx::Size(); | 317 return gfx::Size(); |
321 const ui::DisplayMode* mode = displays[0].display->current_mode(); | 318 const ui::DisplayMode* mode = displays[0].display->current_mode(); |
322 return mode ? mode->size() : gfx::Size(); | 319 return mode ? mode->size() : gfx::Size(); |
323 #else | 320 #else |
324 return gfx::Size(); | 321 return gfx::Size(); |
325 #endif | 322 #endif |
326 } | 323 } |
327 | 324 |
328 } // namespace apps | 325 } // namespace apps |
OLD | NEW |