Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: extensions/shell/browser/shell_desktop_controller.cc

Issue 543123004: Close AppWindow to perform clean shutdown (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@apifeatures
Patch Set: Add comments Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_desktop_controller.h" 5 #include "extensions/shell/browser/shell_desktop_controller.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "extensions/browser/app_window/app_window.h"
9 #include "extensions/browser/app_window/native_app_window.h"
10 #include "extensions/shell/browser/shell_app_delegate.h"
8 #include "extensions/shell/browser/shell_app_window.h" 11 #include "extensions/shell/browser/shell_app_window.h"
9 #include "extensions/shell/common/switches.h" 12 #include "extensions/shell/common/switches.h"
10 #include "ui/aura/client/cursor_client.h" 13 #include "ui/aura/client/cursor_client.h"
11 #include "ui/aura/client/default_capture_client.h" 14 #include "ui/aura/client/default_capture_client.h"
12 #include "ui/aura/layout_manager.h" 15 #include "ui/aura/layout_manager.h"
13 #include "ui/aura/test/test_screen.h" 16 #include "ui/aura/test/test_screen.h"
14 #include "ui/aura/window.h" 17 #include "ui/aura/window.h"
15 #include "ui/aura/window_event_dispatcher.h" 18 #include "ui/aura/window_event_dispatcher.h"
16 #include "ui/aura/window_tree_host.h" 19 #include "ui/aura/window_tree_host.h"
17 #include "ui/base/cursor/cursor.h" 20 #include "ui/base/cursor/cursor.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 virtual bool SupportsChildActivation(aura::Window* window) const OVERRIDE { 149 virtual bool SupportsChildActivation(aura::Window* window) const OVERRIDE {
147 return true; 150 return true;
148 } 151 }
149 152
150 private: 153 private:
151 DISALLOW_COPY_AND_ASSIGN(AppsFocusRules); 154 DISALLOW_COPY_AND_ASSIGN(AppsFocusRules);
152 }; 155 };
153 156
154 } // namespace 157 } // namespace
155 158
156 ShellDesktopController::ShellDesktopController() { 159 ShellDesktopController::ShellDesktopController()
160 : app_window_(NULL) {
157 #if defined(OS_CHROMEOS) 161 #if defined(OS_CHROMEOS)
158 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> 162 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
159 AddObserver(this); 163 AddObserver(this);
160 display_configurator_.reset(new ui::DisplayConfigurator); 164 display_configurator_.reset(new ui::DisplayConfigurator);
161 display_configurator_->Init(false); 165 display_configurator_->Init(false);
162 display_configurator_->ForceInitialConfigure(0); 166 display_configurator_->ForceInitialConfigure(0);
163 display_configurator_->AddObserver(this); 167 display_configurator_->AddObserver(this);
164 #endif 168 #endif
165 169
166 CreateRootWindow(); 170 CreateRootWindow();
167 } 171 }
168 172
169 ShellDesktopController::~ShellDesktopController() { 173 ShellDesktopController::~ShellDesktopController() {
170 app_window_.reset(); 174 CloseAppWindows();
171 DestroyRootWindow(); 175 DestroyRootWindow();
172 #if defined(OS_CHROMEOS) 176 #if defined(OS_CHROMEOS)
173 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> 177 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
174 RemoveObserver(this); 178 RemoveObserver(this);
175 #endif 179 #endif
176 } 180 }
177 181
178 aura::WindowTreeHost* ShellDesktopController::GetHost() { 182 aura::WindowTreeHost* ShellDesktopController::GetHost() {
179 return host_.get(); 183 return host_.get();
180 } 184 }
181 185
182 ShellAppWindow* ShellDesktopController::CreateAppWindow( 186 ShellAppWindow* ShellDesktopController::CreateShellAppWindow(
183 content::BrowserContext* context, 187 content::BrowserContext* context,
184 const Extension* extension) { 188 const Extension* extension) {
185 aura::Window* root_window = GetHost()->window(); 189 aura::Window* root_window = GetHost()->window();
186 190
187 app_window_.reset(new ShellAppWindow); 191 shell_app_window_.reset(new ShellAppWindow);
188 app_window_->Init(context, extension, root_window->bounds().size()); 192 shell_app_window_->Init(context, extension, root_window->bounds().size());
189 193
190 // Attach the web contents view to our window hierarchy. 194 // Attach the web contents view to our window hierarchy.
191 aura::Window* content = app_window_->GetNativeWindow(); 195 aura::Window* content = shell_app_window_->GetNativeWindow();
192 AddAppWindow(content); 196 AddAppWindow(content);
193 content->Show(); 197 content->Show();
194 198
195 return app_window_.get(); 199 return shell_app_window_.get();
200 }
201
202 AppWindow* ShellDesktopController::CreateAppWindow(
203 content::BrowserContext* context,
204 const Extension* extension) {
205 app_window_ = new AppWindow(context, new ShellAppDelegate, extension);
206 return app_window_;
196 } 207 }
197 208
198 void ShellDesktopController::AddAppWindow(aura::Window* window) { 209 void ShellDesktopController::AddAppWindow(aura::Window* window) {
199 aura::Window* root_window = GetHost()->window(); 210 aura::Window* root_window = GetHost()->window();
200 root_window->AddChild(window); 211 root_window->AddChild(window);
201 } 212 }
202 213
203 void ShellDesktopController::CloseAppWindows() { 214 void ShellDesktopController::CloseAppWindows() {
204 app_window_.reset(); 215 shell_app_window_.reset();
216 if (app_window_) {
217 app_window_->GetBaseWindow()->Close(); // Close() deletes |app_window_|.
218 app_window_ = NULL;
219 }
205 } 220 }
206 221
207 aura::Window* ShellDesktopController::GetDefaultParent( 222 aura::Window* ShellDesktopController::GetDefaultParent(
208 aura::Window* context, 223 aura::Window* context,
209 aura::Window* window, 224 aura::Window* window,
210 const gfx::Rect& bounds) { 225 const gfx::Rect& bounds) {
211 return host_->window(); 226 return host_->window();
212 } 227 }
213 228
214 #if defined(OS_CHROMEOS) 229 #if defined(OS_CHROMEOS)
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 if (displays.empty()) 355 if (displays.empty())
341 return gfx::Size(); 356 return gfx::Size();
342 const ui::DisplayMode* mode = displays[0].display->current_mode(); 357 const ui::DisplayMode* mode = displays[0].display->current_mode();
343 return mode ? mode->size() : gfx::Size(); 358 return mode ? mode->size() : gfx::Size();
344 #else 359 #else
345 return gfx::Size(); 360 return gfx::Size();
346 #endif 361 #endif
347 } 362 }
348 363
349 } // namespace extensions 364 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/shell/browser/shell_desktop_controller.h ('k') | extensions/shell/browser/shell_native_app_window.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698