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

Side by Side Diff: trunk/src/apps/shell_window.cc

Issue 163913004: Revert 250826 "Remove Profile dependency from apps::ShellWindow" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_window.h" 5 #include "apps/shell_window.h"
6 6
7 #include "apps/shell_window_geometry_cache.h" 7 #include "apps/shell_window_geometry_cache.h"
8 #include "apps/shell_window_registry.h" 8 #include "apps/shell_window_registry.h"
9 #include "apps/ui/native_app_window.h" 9 #include "apps/ui/native_app_window.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "chrome/browser/chrome_notification_types.h" 14 #include "chrome/browser/chrome_notification_types.h"
15 #include "chrome/browser/extensions/extension_web_contents_observer.h" 15 #include "chrome/browser/extensions/extension_web_contents_observer.h"
16 #include "chrome/browser/extensions/suggest_permission_util.h" 16 #include "chrome/browser/extensions/suggest_permission_util.h"
17 #include "chrome/browser/lifetime/application_lifetime.h" 17 #include "chrome/browser/lifetime/application_lifetime.h"
18 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/common/chrome_switches.h" 19 #include "chrome/common/chrome_switches.h"
19 #include "chrome/common/extensions/extension_messages.h" 20 #include "chrome/common/extensions/extension_messages.h"
20 #include "chrome/common/extensions/manifest_handlers/icons_handler.h" 21 #include "chrome/common/extensions/manifest_handlers/icons_handler.h"
21 #include "components/web_modal/web_contents_modal_dialog_manager.h" 22 #include "components/web_modal/web_contents_modal_dialog_manager.h"
22 #include "content/public/browser/browser_context.h"
23 #include "content/public/browser/invalidate_type.h" 23 #include "content/public/browser/invalidate_type.h"
24 #include "content/public/browser/navigation_entry.h" 24 #include "content/public/browser/navigation_entry.h"
25 #include "content/public/browser/notification_details.h" 25 #include "content/public/browser/notification_details.h"
26 #include "content/public/browser/notification_service.h" 26 #include "content/public/browser/notification_service.h"
27 #include "content/public/browser/notification_source.h" 27 #include "content/public/browser/notification_source.h"
28 #include "content/public/browser/notification_types.h" 28 #include "content/public/browser/notification_types.h"
29 #include "content/public/browser/render_view_host.h" 29 #include "content/public/browser/render_view_host.h"
30 #include "content/public/browser/resource_dispatcher_host.h" 30 #include "content/public/browser/resource_dispatcher_host.h"
31 #include "content/public/browser/web_contents.h" 31 #include "content/public/browser/web_contents.h"
32 #include "content/public/browser/web_contents_view.h" 32 #include "content/public/browser/web_contents_view.h"
33 #include "content/public/common/media_stream_request.h" 33 #include "content/public/common/media_stream_request.h"
34 #include "extensions/browser/extension_system.h" 34 #include "extensions/browser/extension_system.h"
35 #include "extensions/browser/extensions_browser_client.h"
36 #include "extensions/browser/process_manager.h" 35 #include "extensions/browser/process_manager.h"
37 #include "extensions/browser/view_type_utils.h" 36 #include "extensions/browser/view_type_utils.h"
38 #include "extensions/common/extension.h" 37 #include "extensions/common/extension.h"
39 #include "third_party/skia/include/core/SkRegion.h" 38 #include "third_party/skia/include/core/SkRegion.h"
40 #include "ui/gfx/screen.h" 39 #include "ui/gfx/screen.h"
41 40
42 #if !defined(OS_MACOSX) 41 #if !defined(OS_MACOSX)
43 #include "apps/pref_names.h" 42 #include "apps/pref_names.h"
44 #include "base/prefs/pref_service.h" 43 #include "base/prefs/pref_service.h"
45 #endif 44 #endif
46 45
47 using content::BrowserContext;
48 using content::ConsoleMessageLevel; 46 using content::ConsoleMessageLevel;
49 using content::WebContents; 47 using content::WebContents;
50 using extensions::APIPermission; 48 using extensions::APIPermission;
51 using web_modal::WebContentsModalDialogHost; 49 using web_modal::WebContentsModalDialogHost;
52 using web_modal::WebContentsModalDialogManager; 50 using web_modal::WebContentsModalDialogManager;
53 51
54 namespace { 52 namespace {
55 53
56 const int kDefaultWidth = 512; 54 const int kDefaultWidth = 512;
57 const int kDefaultHeight = 384; 55 const int kDefaultHeight = 384;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 state(ui::SHOW_STATE_DEFAULT), 130 state(ui::SHOW_STATE_DEFAULT),
133 hidden(false), 131 hidden(false),
134 resizable(true), 132 resizable(true),
135 focused(true), 133 focused(true),
136 always_on_top(false) {} 134 always_on_top(false) {}
137 135
138 ShellWindow::CreateParams::~CreateParams() {} 136 ShellWindow::CreateParams::~CreateParams() {}
139 137
140 ShellWindow::Delegate::~Delegate() {} 138 ShellWindow::Delegate::~Delegate() {}
141 139
142 ShellWindow::ShellWindow(BrowserContext* context, 140 ShellWindow::ShellWindow(Profile* profile,
143 Delegate* delegate, 141 Delegate* delegate,
144 const extensions::Extension* extension) 142 const extensions::Extension* extension)
145 : browser_context_(context), 143 : profile_(profile),
146 extension_(extension), 144 extension_(extension),
147 extension_id_(extension->id()), 145 extension_id_(extension->id()),
148 window_type_(WINDOW_TYPE_DEFAULT), 146 window_type_(WINDOW_TYPE_DEFAULT),
149 delegate_(delegate), 147 delegate_(delegate),
150 image_loader_ptr_factory_(this), 148 image_loader_ptr_factory_(this),
151 fullscreen_types_(FULLSCREEN_TYPE_NONE), 149 fullscreen_types_(FULLSCREEN_TYPE_NONE),
152 show_on_first_paint_(false), 150 show_on_first_paint_(false),
153 first_paint_complete_(false), 151 first_paint_complete_(false),
154 cached_always_on_top_(false) { 152 cached_always_on_top_(false) {
155 extensions::ExtensionsBrowserClient* client = 153 CHECK(!profile->IsGuestSession() || profile->IsOffTheRecord())
156 extensions::ExtensionsBrowserClient::Get();
157 CHECK(!client->IsGuestSession(context) || context->IsOffTheRecord())
158 << "Only off the record window may be opened in the guest mode."; 154 << "Only off the record window may be opened in the guest mode.";
159 } 155 }
160 156
161 void ShellWindow::Init(const GURL& url, 157 void ShellWindow::Init(const GURL& url,
162 ShellWindowContents* shell_window_contents, 158 ShellWindowContents* shell_window_contents,
163 const CreateParams& params) { 159 const CreateParams& params) {
164 // Initialize the render interface and web contents 160 // Initialize the render interface and web contents
165 shell_window_contents_.reset(shell_window_contents); 161 shell_window_contents_.reset(shell_window_contents);
166 shell_window_contents_->Initialize(browser_context(), url); 162 shell_window_contents_->Initialize(profile(), url);
167 WebContents* web_contents = shell_window_contents_->GetWebContents(); 163 WebContents* web_contents = shell_window_contents_->GetWebContents();
168 if (CommandLine::ForCurrentProcess()->HasSwitch( 164 if (CommandLine::ForCurrentProcess()->HasSwitch(
169 switches::kEnableAppsShowOnFirstPaint)) { 165 switches::kEnableAppsShowOnFirstPaint)) {
170 content::WebContentsObserver::Observe(web_contents); 166 content::WebContentsObserver::Observe(web_contents);
171 } 167 }
172 delegate_->InitWebContents(web_contents); 168 delegate_->InitWebContents(web_contents);
173 WebContentsModalDialogManager::CreateForWebContents(web_contents); 169 WebContentsModalDialogManager::CreateForWebContents(web_contents);
174 extensions::ExtensionWebContentsObserver::CreateForWebContents(web_contents); 170 extensions::ExtensionWebContentsObserver::CreateForWebContents(web_contents);
175 171
176 web_contents->SetDelegate(this); 172 web_contents->SetDelegate(this);
(...skipping 27 matching lines...) Expand all
204 Maximize(); 200 Maximize();
205 else if (new_params.state == ui::SHOW_STATE_MINIMIZED) 201 else if (new_params.state == ui::SHOW_STATE_MINIMIZED)
206 Minimize(); 202 Minimize();
207 203
208 OnNativeWindowChanged(); 204 OnNativeWindowChanged();
209 205
210 // When the render view host is changed, the native window needs to know 206 // When the render view host is changed, the native window needs to know
211 // about it in case it has any setup to do to make the renderer appear 207 // about it in case it has any setup to do to make the renderer appear
212 // properly. In particular, on Windows, the view's clickthrough region needs 208 // properly. In particular, on Windows, the view's clickthrough region needs
213 // to be set. 209 // to be set.
214 extensions::ExtensionsBrowserClient* client = 210 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
215 extensions::ExtensionsBrowserClient::Get(); 211 content::Source<Profile>(profile_->GetOriginalProfile()));
216 registrar_.Add(this,
217 chrome::NOTIFICATION_EXTENSION_UNLOADED,
218 content::Source<content::BrowserContext>(
219 client->GetOriginalContext(browser_context_)));
220 // Close when the browser process is exiting. 212 // Close when the browser process is exiting.
221 registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, 213 registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING,
222 content::NotificationService::AllSources()); 214 content::NotificationService::AllSources());
223 215
224 shell_window_contents_->LoadContents(new_params.creator_process_id); 216 shell_window_contents_->LoadContents(new_params.creator_process_id);
225 217
226 if (CommandLine::ForCurrentProcess()->HasSwitch( 218 if (CommandLine::ForCurrentProcess()->HasSwitch(
227 switches::kEnableAppsShowOnFirstPaint)) { 219 switches::kEnableAppsShowOnFirstPaint)) {
228 // We want to show the window only when the content has been painted. For 220 // We want to show the window only when the content has been painted. For
229 // that to happen, we need to define a size for the content, otherwise the 221 // that to happen, we need to define a size for the content, otherwise the
230 // layout will happen in a 0x0 area. 222 // layout will happen in a 0x0 area.
231 // Note: WebContents::GetView() is guaranteed to be non-null. 223 // Note: WebContents::GetView() is guaranteed to be non-null.
232 web_contents->GetView()->SizeContents(new_params.bounds.size()); 224 web_contents->GetView()->SizeContents(new_params.bounds.size());
233 } 225 }
234 226
235 // Prevent the browser process from shutting down while this window is open. 227 // Prevent the browser process from shutting down while this window is open.
236 chrome::StartKeepAlive(); 228 chrome::StartKeepAlive();
237 229
238 UpdateExtensionAppIcon(); 230 UpdateExtensionAppIcon();
239 231
240 ShellWindowRegistry::Get(browser_context_)->AddShellWindow(this); 232 ShellWindowRegistry::Get(profile_)->AddShellWindow(this);
241 } 233 }
242 234
243 ShellWindow::~ShellWindow() { 235 ShellWindow::~ShellWindow() {
244 // Unregister now to prevent getting NOTIFICATION_APP_TERMINATING if we're the 236 // Unregister now to prevent getting NOTIFICATION_APP_TERMINATING if we're the
245 // last window open. 237 // last window open.
246 registrar_.RemoveAll(); 238 registrar_.RemoveAll();
247 239
248 // Remove shutdown prevention. 240 // Remove shutdown prevention.
249 chrome::EndKeepAlive(); 241 chrome::EndKeepAlive();
250 } 242 }
(...skipping 22 matching lines...) Expand all
273 params.url.spec().c_str())); 265 params.url.spec().c_str()));
274 return NULL; 266 return NULL;
275 } 267 }
276 268
277 // These dispositions aren't really navigations. 269 // These dispositions aren't really navigations.
278 if (disposition == SUPPRESS_OPEN || disposition == SAVE_TO_DISK || 270 if (disposition == SUPPRESS_OPEN || disposition == SAVE_TO_DISK ||
279 disposition == IGNORE_ACTION) { 271 disposition == IGNORE_ACTION) {
280 return NULL; 272 return NULL;
281 } 273 }
282 274
283 WebContents* contents = 275 WebContents* contents = delegate_->OpenURLFromTab(profile_, source,
284 delegate_->OpenURLFromTab(browser_context_, source, params); 276 params);
285 if (!contents) { 277 if (!contents) {
286 AddMessageToDevToolsConsole( 278 AddMessageToDevToolsConsole(
287 content::CONSOLE_MESSAGE_LEVEL_ERROR, 279 content::CONSOLE_MESSAGE_LEVEL_ERROR,
288 base::StringPrintf( 280 base::StringPrintf(
289 "Can't navigate to \"%s\"; apps do not support navigation.", 281 "Can't navigate to \"%s\"; apps do not support navigation.",
290 params.url.spec().c_str())); 282 params.url.spec().c_str()));
291 } 283 }
292 284
293 return contents; 285 return contents;
294 } 286 }
295 287
296 void ShellWindow::AddNewContents(WebContents* source, 288 void ShellWindow::AddNewContents(WebContents* source,
297 WebContents* new_contents, 289 WebContents* new_contents,
298 WindowOpenDisposition disposition, 290 WindowOpenDisposition disposition,
299 const gfx::Rect& initial_pos, 291 const gfx::Rect& initial_pos,
300 bool user_gesture, 292 bool user_gesture,
301 bool* was_blocked) { 293 bool* was_blocked) {
302 DCHECK(new_contents->GetBrowserContext() == browser_context_); 294 DCHECK(Profile::FromBrowserContext(new_contents->GetBrowserContext()) ==
303 delegate_->AddNewContents(browser_context_, 295 profile_);
304 new_contents, 296 delegate_->AddNewContents(profile_, new_contents, disposition,
305 disposition, 297 initial_pos, user_gesture, was_blocked);
306 initial_pos,
307 user_gesture,
308 was_blocked);
309 } 298 }
310 299
311 bool ShellWindow::PreHandleKeyboardEvent( 300 bool ShellWindow::PreHandleKeyboardEvent(
312 content::WebContents* source, 301 content::WebContents* source,
313 const content::NativeWebKeyboardEvent& event, 302 const content::NativeWebKeyboardEvent& event,
314 bool* is_keyboard_shortcut) { 303 bool* is_keyboard_shortcut) {
315 // Here, we can handle a key event before the content gets it. When we are 304 // Here, we can handle a key event before the content gets it. When we are
316 // fullscreen and it is not forced, we want to allow the user to leave 305 // fullscreen and it is not forced, we want to allow the user to leave
317 // when ESC is pressed. 306 // when ESC is pressed.
318 // However, if the application has the "overrideEscFullscreen" permission, we 307 // However, if the application has the "overrideEscFullscreen" permission, we
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 void ShellWindow::DidFirstVisuallyNonEmptyPaint(int32 page_id) { 359 void ShellWindow::DidFirstVisuallyNonEmptyPaint(int32 page_id) {
371 first_paint_complete_ = true; 360 first_paint_complete_ = true;
372 if (show_on_first_paint_) { 361 if (show_on_first_paint_) {
373 DCHECK(delayed_show_type_ == SHOW_ACTIVE || 362 DCHECK(delayed_show_type_ == SHOW_ACTIVE ||
374 delayed_show_type_ == SHOW_INACTIVE); 363 delayed_show_type_ == SHOW_INACTIVE);
375 Show(delayed_show_type_); 364 Show(delayed_show_type_);
376 } 365 }
377 } 366 }
378 367
379 void ShellWindow::OnNativeClose() { 368 void ShellWindow::OnNativeClose() {
380 ShellWindowRegistry::Get(browser_context_)->RemoveShellWindow(this); 369 ShellWindowRegistry::Get(profile_)->RemoveShellWindow(this);
381 if (shell_window_contents_) { 370 if (shell_window_contents_) {
382 WebContents* web_contents = shell_window_contents_->GetWebContents(); 371 WebContents* web_contents = shell_window_contents_->GetWebContents();
383 WebContentsModalDialogManager::FromWebContents(web_contents)-> 372 WebContentsModalDialogManager::FromWebContents(web_contents)->
384 SetDelegate(NULL); 373 SetDelegate(NULL);
385 shell_window_contents_->NativeWindowClosed(); 374 shell_window_contents_->NativeWindowClosed();
386 } 375 }
387 delete this; 376 delete this;
388 } 377 }
389 378
390 void ShellWindow::OnNativeWindowChanged() { 379 void ShellWindow::OnNativeWindowChanged() {
391 SaveWindowPosition(); 380 SaveWindowPosition();
392 381
393 #if defined(OS_WIN) 382 #if defined(OS_WIN)
394 if (native_app_window_ && 383 if (native_app_window_ &&
395 cached_always_on_top_ && 384 cached_always_on_top_ &&
396 !IsFullscreen(fullscreen_types_) && 385 !IsFullscreen(fullscreen_types_) &&
397 !native_app_window_->IsMaximized() && 386 !native_app_window_->IsMaximized() &&
398 !native_app_window_->IsMinimized()) { 387 !native_app_window_->IsMinimized()) {
399 UpdateNativeAlwaysOnTop(); 388 UpdateNativeAlwaysOnTop();
400 } 389 }
401 #endif 390 #endif
402 391
403 if (shell_window_contents_ && native_app_window_) 392 if (shell_window_contents_ && native_app_window_)
404 shell_window_contents_->NativeWindowChanged(native_app_window_.get()); 393 shell_window_contents_->NativeWindowChanged(native_app_window_.get());
405 } 394 }
406 395
407 void ShellWindow::OnNativeWindowActivated() { 396 void ShellWindow::OnNativeWindowActivated() {
408 ShellWindowRegistry::Get(browser_context_)->ShellWindowActivated(this); 397 ShellWindowRegistry::Get(profile_)->ShellWindowActivated(this);
409 } 398 }
410 399
411 content::WebContents* ShellWindow::web_contents() const { 400 content::WebContents* ShellWindow::web_contents() const {
412 return shell_window_contents_->GetWebContents(); 401 return shell_window_contents_->GetWebContents();
413 } 402 }
414 403
415 NativeAppWindow* ShellWindow::GetBaseWindow() { 404 NativeAppWindow* ShellWindow::GetBaseWindow() {
416 return native_app_window_.get(); 405 return native_app_window_.get();
417 } 406 }
418 407
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 void ShellWindow::UpdateDraggableRegions( 481 void ShellWindow::UpdateDraggableRegions(
493 const std::vector<extensions::DraggableRegion>& regions) { 482 const std::vector<extensions::DraggableRegion>& regions) {
494 native_app_window_->UpdateDraggableRegions(regions); 483 native_app_window_->UpdateDraggableRegions(regions);
495 } 484 }
496 485
497 void ShellWindow::UpdateAppIcon(const gfx::Image& image) { 486 void ShellWindow::UpdateAppIcon(const gfx::Image& image) {
498 if (image.IsEmpty()) 487 if (image.IsEmpty())
499 return; 488 return;
500 app_icon_ = image; 489 app_icon_ = image;
501 native_app_window_->UpdateWindowIcon(); 490 native_app_window_->UpdateWindowIcon();
502 ShellWindowRegistry::Get(browser_context_)->ShellWindowIconChanged(this); 491 ShellWindowRegistry::Get(profile_)->ShellWindowIconChanged(this);
503 } 492 }
504 493
505 void ShellWindow::Fullscreen() { 494 void ShellWindow::Fullscreen() {
506 #if !defined(OS_MACOSX) 495 #if !defined(OS_MACOSX)
507 // Do not enter fullscreen mode if disallowed by pref. 496 // Do not enter fullscreen mode if disallowed by pref.
508 PrefService* prefs = 497 if (!profile()->GetPrefs()->GetBoolean(prefs::kAppFullscreenAllowed))
509 extensions::ExtensionsBrowserClient::Get()->GetPrefServiceForContext(
510 browser_context());
511 if (!prefs->GetBoolean(prefs::kAppFullscreenAllowed))
512 return; 498 return;
513 #endif 499 #endif
514 fullscreen_types_ |= FULLSCREEN_TYPE_WINDOW_API; 500 fullscreen_types_ |= FULLSCREEN_TYPE_WINDOW_API;
515 SetNativeWindowFullscreen(); 501 SetNativeWindowFullscreen();
516 } 502 }
517 503
518 void ShellWindow::Maximize() { 504 void ShellWindow::Maximize() {
519 GetBaseWindow()->Maximize(); 505 GetBaseWindow()->Maximize();
520 } 506 }
521 507
522 void ShellWindow::Minimize() { 508 void ShellWindow::Minimize() {
523 GetBaseWindow()->Minimize(); 509 GetBaseWindow()->Minimize();
524 } 510 }
525 511
526 void ShellWindow::Restore() { 512 void ShellWindow::Restore() {
527 if (IsFullscreen(fullscreen_types_)) { 513 if (IsFullscreen(fullscreen_types_)) {
528 fullscreen_types_ = FULLSCREEN_TYPE_NONE; 514 fullscreen_types_ = FULLSCREEN_TYPE_NONE;
529 SetNativeWindowFullscreen(); 515 SetNativeWindowFullscreen();
530 } else { 516 } else {
531 GetBaseWindow()->Restore(); 517 GetBaseWindow()->Restore();
532 } 518 }
533 } 519 }
534 520
535 void ShellWindow::OSFullscreen() { 521 void ShellWindow::OSFullscreen() {
536 #if !defined(OS_MACOSX) 522 #if !defined(OS_MACOSX)
537 // Do not enter fullscreen mode if disallowed by pref. 523 // Do not enter fullscreen mode if disallowed by pref.
538 PrefService* prefs = 524 if (!profile()->GetPrefs()->GetBoolean(prefs::kAppFullscreenAllowed))
539 extensions::ExtensionsBrowserClient::Get()->GetPrefServiceForContext(
540 browser_context());
541 if (!prefs->GetBoolean(prefs::kAppFullscreenAllowed))
542 return; 525 return;
543 #endif 526 #endif
544 fullscreen_types_ |= FULLSCREEN_TYPE_OS; 527 fullscreen_types_ |= FULLSCREEN_TYPE_OS;
545 SetNativeWindowFullscreen(); 528 SetNativeWindowFullscreen();
546 } 529 }
547 530
548 void ShellWindow::ForcedFullscreen() { 531 void ShellWindow::ForcedFullscreen() {
549 fullscreen_types_ |= FULLSCREEN_TYPE_FORCED; 532 fullscreen_types_ |= FULLSCREEN_TYPE_FORCED;
550 SetNativeWindowFullscreen(); 533 SetNativeWindowFullscreen();
551 } 534 }
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 void ShellWindow::OnExtensionIconImageChanged(extensions::IconImage* image) { 660 void ShellWindow::OnExtensionIconImageChanged(extensions::IconImage* image) {
678 DCHECK_EQ(app_icon_image_.get(), image); 661 DCHECK_EQ(app_icon_image_.get(), image);
679 662
680 UpdateAppIcon(gfx::Image(app_icon_image_->image_skia())); 663 UpdateAppIcon(gfx::Image(app_icon_image_->image_skia()));
681 } 664 }
682 665
683 void ShellWindow::UpdateExtensionAppIcon() { 666 void ShellWindow::UpdateExtensionAppIcon() {
684 // Avoid using any previous app icons were being downloaded. 667 // Avoid using any previous app icons were being downloaded.
685 image_loader_ptr_factory_.InvalidateWeakPtrs(); 668 image_loader_ptr_factory_.InvalidateWeakPtrs();
686 669
687 app_icon_image_.reset( 670 app_icon_image_.reset(new extensions::IconImage(
688 new extensions::IconImage(browser_context(), 671 profile(),
689 extension(), 672 extension(),
690 extensions::IconsInfo::GetIcons(extension()), 673 extensions::IconsInfo::GetIcons(extension()),
691 delegate_->PreferredIconSize(), 674 delegate_->PreferredIconSize(),
692 extensions::IconsInfo::GetDefaultAppIcon(), 675 extensions::IconsInfo::GetDefaultAppIcon(),
693 this)); 676 this));
694 677
695 // Triggers actual image loading with 1x resources. The 2x resource will 678 // Triggers actual image loading with 1x resources. The 2x resource will
696 // be handled by IconImage class when requested. 679 // be handled by IconImage class when requested.
697 app_icon_image_->image_skia().GetRepresentation(1.0f); 680 app_icon_image_->image_skia().GetRepresentation(1.0f);
698 } 681 }
699 682
700 void ShellWindow::OnSizeConstraintsChanged() { 683 void ShellWindow::OnSizeConstraintsChanged() {
701 native_app_window_->UpdateWindowMinMaxSize(); 684 native_app_window_->UpdateWindowMinMaxSize();
702 gfx::Rect bounds = GetClientBounds(); 685 gfx::Rect bounds = GetClientBounds();
703 gfx::Size constrained_size = size_constraints_.ClampSize(bounds.size()); 686 gfx::Size constrained_size = size_constraints_.ClampSize(bounds.size());
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 else if (changed_flags & content::INVALIDATE_TYPE_TAB) 779 else if (changed_flags & content::INVALIDATE_TYPE_TAB)
797 native_app_window_->UpdateWindowIcon(); 780 native_app_window_->UpdateWindowIcon();
798 } 781 }
799 782
800 void ShellWindow::ToggleFullscreenModeForTab(content::WebContents* source, 783 void ShellWindow::ToggleFullscreenModeForTab(content::WebContents* source,
801 bool enter_fullscreen) { 784 bool enter_fullscreen) {
802 #if !defined(OS_MACOSX) 785 #if !defined(OS_MACOSX)
803 // Do not enter fullscreen mode if disallowed by pref. 786 // Do not enter fullscreen mode if disallowed by pref.
804 // TODO(bartfab): Add a test once it becomes possible to simulate a user 787 // TODO(bartfab): Add a test once it becomes possible to simulate a user
805 // gesture. http://crbug.com/174178 788 // gesture. http://crbug.com/174178
806 PrefService* prefs = 789 if (enter_fullscreen &&
807 extensions::ExtensionsBrowserClient::Get()->GetPrefServiceForContext( 790 !profile()->GetPrefs()->GetBoolean(prefs::kAppFullscreenAllowed)) {
808 browser_context());
809 if (enter_fullscreen && !prefs->GetBoolean(prefs::kAppFullscreenAllowed)) {
810 return; 791 return;
811 } 792 }
812 #endif 793 #endif
813 794
814 if (!IsExtensionWithPermissionOrSuggestInConsole( 795 if (!IsExtensionWithPermissionOrSuggestInConsole(
815 APIPermission::kFullscreen, 796 APIPermission::kFullscreen,
816 extension_, 797 extension_,
817 source->GetRenderViewHost())) { 798 source->GetRenderViewHost())) {
818 return; 799 return;
819 } 800 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 rvh->Send(new ExtensionMsg_AddMessageToConsole( 856 rvh->Send(new ExtensionMsg_AddMessageToConsole(
876 rvh->GetRoutingID(), level, message)); 857 rvh->GetRoutingID(), level, message));
877 } 858 }
878 859
879 void ShellWindow::SaveWindowPosition() { 860 void ShellWindow::SaveWindowPosition() {
880 if (window_key_.empty()) 861 if (window_key_.empty())
881 return; 862 return;
882 if (!native_app_window_) 863 if (!native_app_window_)
883 return; 864 return;
884 865
885 ShellWindowGeometryCache* cache = 866 ShellWindowGeometryCache* cache = ShellWindowGeometryCache::Get(profile());
886 ShellWindowGeometryCache::Get(browser_context());
887 867
888 gfx::Rect bounds = native_app_window_->GetRestoredBounds(); 868 gfx::Rect bounds = native_app_window_->GetRestoredBounds();
889 bounds.Inset(native_app_window_->GetFrameInsets()); 869 bounds.Inset(native_app_window_->GetFrameInsets());
890 gfx::Rect screen_bounds = 870 gfx::Rect screen_bounds =
891 gfx::Screen::GetNativeScreen()->GetDisplayMatching(bounds).work_area(); 871 gfx::Screen::GetNativeScreen()->GetDisplayMatching(bounds).work_area();
892 ui::WindowShowState window_state = native_app_window_->GetRestoredState(); 872 ui::WindowShowState window_state = native_app_window_->GetRestoredState();
893 cache->SaveGeometry(extension()->id(), 873 cache->SaveGeometry(extension()->id(),
894 window_key_, 874 window_key_,
895 bounds, 875 bounds,
896 screen_bounds, 876 screen_bounds,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 if (params.bounds.width() == 0) 912 if (params.bounds.width() == 0)
933 params.bounds.set_width(kDefaultWidth); 913 params.bounds.set_width(kDefaultWidth);
934 if (params.bounds.height() == 0) 914 if (params.bounds.height() == 0)
935 params.bounds.set_height(kDefaultHeight); 915 params.bounds.set_height(kDefaultHeight);
936 916
937 // If left and top are left undefined, the native shell window will center 917 // If left and top are left undefined, the native shell window will center
938 // the window on the main screen in a platform-defined manner. 918 // the window on the main screen in a platform-defined manner.
939 919
940 // Load cached state if it exists. 920 // Load cached state if it exists.
941 if (!params.window_key.empty()) { 921 if (!params.window_key.empty()) {
942 ShellWindowGeometryCache* cache = 922 ShellWindowGeometryCache* cache = ShellWindowGeometryCache::Get(profile());
943 ShellWindowGeometryCache::Get(browser_context());
944 923
945 gfx::Rect cached_bounds; 924 gfx::Rect cached_bounds;
946 gfx::Rect cached_screen_bounds; 925 gfx::Rect cached_screen_bounds;
947 ui::WindowShowState cached_state = ui::SHOW_STATE_DEFAULT; 926 ui::WindowShowState cached_state = ui::SHOW_STATE_DEFAULT;
948 if (cache->GetGeometry(extension()->id(), params.window_key, 927 if (cache->GetGeometry(extension()->id(), params.window_key,
949 &cached_bounds, &cached_screen_bounds, 928 &cached_bounds, &cached_screen_bounds,
950 &cached_state)) { 929 &cached_state)) {
951 // App window has cached screen bounds, make sure it fits on screen in 930 // App window has cached screen bounds, make sure it fits on screen in
952 // case the screen resolution changed. 931 // case the screen resolution changed.
953 gfx::Screen* screen = gfx::Screen::GetNativeScreen(); 932 gfx::Screen* screen = gfx::Screen::GetNativeScreen();
(...skipping 28 matching lines...) Expand all
982 region.bounds.x(), 961 region.bounds.x(),
983 region.bounds.y(), 962 region.bounds.y(),
984 region.bounds.right(), 963 region.bounds.right(),
985 region.bounds.bottom(), 964 region.bounds.bottom(),
986 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); 965 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op);
987 } 966 }
988 return sk_region; 967 return sk_region;
989 } 968 }
990 969
991 } // namespace apps 970 } // namespace apps
OLDNEW
« no previous file with comments | « trunk/src/apps/shell_window.h ('k') | trunk/src/chrome/browser/extensions/api/app_window/app_window_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698