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

Side by Side Diff: chrome/browser/ui/extensions/shell_window.cc

Issue 13609003: fullscreen in apps v2 ShellWindow via app.window.create. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/ui/extensions/shell_window.h" 5 #include "chrome/browser/ui/extensions/shell_window.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "chrome/browser/extensions/app_window_contents.h" 9 #include "chrome/browser/extensions/app_window_contents.h"
10 #include "chrome/browser/extensions/extension_process_manager.h" 10 #include "chrome/browser/extensions/extension_process_manager.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 const int kPreferredIconSize = extension_misc::EXTENSION_ICON_SMALL; 66 const int kPreferredIconSize = extension_misc::EXTENSION_ICON_SMALL;
67 #endif 67 #endif
68 68
69 } // namespace 69 } // namespace
70 70
71 ShellWindow::CreateParams::CreateParams() 71 ShellWindow::CreateParams::CreateParams()
72 : window_type(ShellWindow::WINDOW_TYPE_DEFAULT), 72 : window_type(ShellWindow::WINDOW_TYPE_DEFAULT),
73 frame(ShellWindow::FRAME_CHROME), 73 frame(ShellWindow::FRAME_CHROME),
74 transparent_background(false), 74 transparent_background(false),
75 bounds(INT_MIN, INT_MIN, 0, 0), 75 bounds(INT_MIN, INT_MIN, 0, 0),
76 creator_process_id(0), hidden(false), resizable(true), focused(true) { 76 creator_process_id(0),
77 state(STATE_NORMAL),
78 hidden(false),
79 resizable(true),
80 focused(true) {
77 } 81 }
78 82
79 ShellWindow::CreateParams::~CreateParams() { 83 ShellWindow::CreateParams::~CreateParams() {
80 } 84 }
81 85
82 ShellWindow* ShellWindow::Create(Profile* profile, 86 ShellWindow* ShellWindow::Create(Profile* profile,
83 const extensions::Extension* extension, 87 const extensions::Extension* extension,
84 const GURL& url, 88 const GURL& url,
85 const CreateParams& params) { 89 const CreateParams& params) {
86 // This object will delete itself when the window is closed. 90 // This object will delete itself when the window is closed.
87 ShellWindow* window = new ShellWindow(profile, extension); 91 ShellWindow* window = new ShellWindow(profile, extension);
88 window->Init(url, new AppWindowContents(window), params); 92 window->Init(url, new AppWindowContents(window), params);
89 extensions::ShellWindowRegistry::Get(profile)->AddShellWindow(window); 93 extensions::ShellWindowRegistry::Get(profile)->AddShellWindow(window);
90 return window; 94 return window;
91 } 95 }
92 96
93 ShellWindow::ShellWindow(Profile* profile, 97 ShellWindow::ShellWindow(Profile* profile,
94 const extensions::Extension* extension) 98 const extensions::Extension* extension)
95 : profile_(profile), 99 : profile_(profile),
96 extension_(extension), 100 extension_(extension),
97 window_type_(WINDOW_TYPE_DEFAULT), 101 window_type_(WINDOW_TYPE_DEFAULT),
98 ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_ptr_factory_(this)) { 102 ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_ptr_factory_(this)),
103 fullscreen_for_window_api_(false),
104 fullscreen_for_tab_(false) {
99 } 105 }
100 106
101 void ShellWindow::Init(const GURL& url, 107 void ShellWindow::Init(const GURL& url,
102 ShellWindowContents* shell_window_contents, 108 ShellWindowContents* shell_window_contents,
103 const ShellWindow::CreateParams& params) { 109 const ShellWindow::CreateParams& params) {
104 // Initialize the render interface and web contents 110 // Initialize the render interface and web contents
105 shell_window_contents_.reset(shell_window_contents); 111 shell_window_contents_.reset(shell_window_contents);
106 shell_window_contents_->Initialize(profile(), url); 112 shell_window_contents_->Initialize(profile(), url);
107 WebContents* web_contents = shell_window_contents_->GetWebContents(); 113 WebContents* web_contents = shell_window_contents_->GetWebContents();
108 WebContentsModalDialogManager::CreateForWebContents(web_contents); 114 WebContentsModalDialogManager::CreateForWebContents(web_contents);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 if (maximum_size.height() && bounds.height() > maximum_size.height()) 162 if (maximum_size.height() && bounds.height() > maximum_size.height())
157 bounds.set_height(maximum_size.height()); 163 bounds.set_height(maximum_size.height());
158 if (bounds.height() != INT_MIN && bounds.height() < minimum_size.height()) 164 if (bounds.height() != INT_MIN && bounds.height() < minimum_size.height())
159 bounds.set_height(minimum_size.height()); 165 bounds.set_height(minimum_size.height());
160 166
161 new_params.bounds = bounds; 167 new_params.bounds = bounds;
162 168
163 native_app_window_.reset(NativeAppWindow::Create(this, new_params)); 169 native_app_window_.reset(NativeAppWindow::Create(this, new_params));
164 OnNativeWindowChanged(); 170 OnNativeWindowChanged();
165 171
172 switch (params.state) {
173 case CreateParams::STATE_NORMAL:
174 break;
175 case CreateParams::STATE_FULLSCREEN:
176 Fullscreen();
177 break;
178 case CreateParams::STATE_MAXIMIZED:
179 Maximize();
180 break;
181 case CreateParams::STATE_MINIMIZED:
182 Minimize();
183 break;
184 }
jeremya 2013/04/05 20:00:35 default: NOTREACHED()? Are these all okay to do b
scheib 2013/04/05 21:47:52 Google code style suggests NOT having a default if
jeremya 2013/04/08 17:13:54 I hope nobody ever upcasts an int into that enum,
185
166 if (!params.hidden) { 186 if (!params.hidden) {
167 if (window_type_is_panel()) 187 if (window_type_is_panel())
168 GetBaseWindow()->ShowInactive(); // Panels are not activated by default. 188 GetBaseWindow()->ShowInactive(); // Panels are not activated by default.
169 else 189 else
170 GetBaseWindow()->Show(); 190 GetBaseWindow()->Show();
171 } 191 }
172 192
173 // When the render view host is changed, the native window needs to know 193 // When the render view host is changed, the native window needs to know
174 // about it in case it has any setup to do to make the renderer appear 194 // about it in case it has any setup to do to make the renderer appear
175 // properly. In particular, on Windows, the view's clickthrough region needs 195 // properly. In particular, on Windows, the view's clickthrough region needs
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 } 393 }
374 394
375 void ShellWindow::UpdateAppIcon(const gfx::Image& image) { 395 void ShellWindow::UpdateAppIcon(const gfx::Image& image) {
376 if (image.IsEmpty()) 396 if (image.IsEmpty())
377 return; 397 return;
378 app_icon_ = image; 398 app_icon_ = image;
379 native_app_window_->UpdateWindowIcon(); 399 native_app_window_->UpdateWindowIcon();
380 extensions::ShellWindowRegistry::Get(profile_)->ShellWindowIconChanged(this); 400 extensions::ShellWindowRegistry::Get(profile_)->ShellWindowIconChanged(this);
381 } 401 }
382 402
403 void ShellWindow::Fullscreen() {
404 fullscreen_for_window_api_ = true;
405 GetBaseWindow()->SetFullscreen(true);
406 }
407
408 void ShellWindow::Maximize() {
409 GetBaseWindow()->Maximize();
410 }
411
412 void ShellWindow::Minimize() {
413 GetBaseWindow()->Minimize();
414 }
415
416 void ShellWindow::Restore() {
417 fullscreen_for_window_api_ = false;
418 fullscreen_for_tab_ = false;
419 if (GetBaseWindow()->IsFullscreenOrPending()) {
420 GetBaseWindow()->SetFullscreen(false);
421 } else {
422 GetBaseWindow()->Restore();
423 }
424 }
425
383 //------------------------------------------------------------------------------ 426 //------------------------------------------------------------------------------
384 // Private methods 427 // Private methods
385 428
386 void ShellWindow::OnImageLoaded(const gfx::Image& image) { 429 void ShellWindow::OnImageLoaded(const gfx::Image& image) {
387 UpdateAppIcon(image); 430 UpdateAppIcon(image);
388 } 431 }
389 432
390 void ShellWindow::DidDownloadFavicon(int id, 433 void ShellWindow::DidDownloadFavicon(int id,
391 const GURL& image_url, 434 const GURL& image_url,
392 int requested_size, 435 int requested_size,
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 void ShellWindow::NavigationStateChanged( 489 void ShellWindow::NavigationStateChanged(
447 const content::WebContents* source, unsigned changed_flags) { 490 const content::WebContents* source, unsigned changed_flags) {
448 if (changed_flags & content::INVALIDATE_TYPE_TITLE) 491 if (changed_flags & content::INVALIDATE_TYPE_TITLE)
449 native_app_window_->UpdateWindowTitle(); 492 native_app_window_->UpdateWindowTitle();
450 else if (changed_flags & content::INVALIDATE_TYPE_TAB) 493 else if (changed_flags & content::INVALIDATE_TYPE_TAB)
451 native_app_window_->UpdateWindowIcon(); 494 native_app_window_->UpdateWindowIcon();
452 } 495 }
453 496
454 void ShellWindow::ToggleFullscreenModeForTab(content::WebContents* source, 497 void ShellWindow::ToggleFullscreenModeForTab(content::WebContents* source,
455 bool enter_fullscreen) { 498 bool enter_fullscreen) {
456 bool has_permission = IsExtensionWithPermissionOrSuggestInConsole( 499 if (!IsExtensionWithPermissionOrSuggestInConsole(
457 APIPermission::kFullscreen, 500 APIPermission::kFullscreen,
458 extension_, 501 extension_,
459 source->GetRenderViewHost()); 502 source->GetRenderViewHost())) {
503 return;
504 }
460 505
461 if (has_permission) 506 fullscreen_for_tab_ = enter_fullscreen;
462 native_app_window_->SetFullscreen(enter_fullscreen); 507
508 if (enter_fullscreen) {
509 native_app_window_->SetFullscreen(true);
510 } else if (!fullscreen_for_window_api_) {
jeremya 2013/04/05 20:00:35 fdsdsffasafdsf. There must be a better way :(
scheib 2013/04/05 21:47:52 I haven't thought of it. We can fold these two var
jeremya 2013/04/08 17:13:54 I guess there's no way to combine it all into one
511 native_app_window_->SetFullscreen(false);
512 }
463 } 513 }
464 514
465 bool ShellWindow::IsFullscreenForTabOrPending( 515 bool ShellWindow::IsFullscreenForTabOrPending(
466 const content::WebContents* source) const { 516 const content::WebContents* source) const {
467 return native_app_window_->IsFullscreenOrPending(); 517 return fullscreen_for_tab_;
468 } 518 }
469 519
470 void ShellWindow::Observe(int type, 520 void ShellWindow::Observe(int type,
471 const content::NotificationSource& source, 521 const content::NotificationSource& source,
472 const content::NotificationDetails& details) { 522 const content::NotificationDetails& details) {
473 switch (type) { 523 switch (type) {
474 case content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED: { 524 case content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED: {
475 // TODO(jianli): once http://crbug.com/123007 is fixed, we'll no longer 525 // TODO(jianli): once http://crbug.com/123007 is fixed, we'll no longer
476 // need to make the native window (ShellWindowViews specially) update 526 // need to make the native window (ShellWindowViews specially) update
477 // the clickthrough region for the new RVH. 527 // the clickthrough region for the new RVH.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 const extensions::DraggableRegion& region = *iter; 582 const extensions::DraggableRegion& region = *iter;
533 sk_region->op( 583 sk_region->op(
534 region.bounds.x(), 584 region.bounds.x(),
535 region.bounds.y(), 585 region.bounds.y(),
536 region.bounds.right(), 586 region.bounds.right(),
537 region.bounds.bottom(), 587 region.bounds.bottom(),
538 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op); 588 region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op);
539 } 589 }
540 return sk_region; 590 return sk_region;
541 } 591 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698