| 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 "chrome/browser/ui/views/apps/chrome_native_app_window_views.h" | 5 #include "chrome/browser/ui/views/apps/chrome_native_app_window_views.h" |
| 6 | 6 |
| 7 #include "apps/ui/views/app_window_frame_view.h" | 7 #include "apps/ui/views/app_window_frame_view.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "chrome/app/chrome_command_ids.h" | 9 #include "chrome/app/chrome_command_ids.h" |
| 10 #include "chrome/browser/app_mode/app_mode_utils.h" | 10 #include "chrome/browser/app_mode/app_mode_utils.h" |
| 11 #include "chrome/browser/chrome_page_zoom.h" | 11 #include "chrome/browser/chrome_page_zoom.h" |
| 12 #include "chrome/browser/favicon/favicon_tab_helper.h" | 12 #include "chrome/browser/favicon/favicon_tab_helper.h" |
| 13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 14 #include "chrome/browser/ui/host_desktop.h" | 14 #include "chrome/browser/ui/host_desktop.h" |
| 15 #include "chrome/browser/ui/views/apps/shaped_app_window_targeter.h" | 15 #include "chrome/browser/ui/views/apps/shaped_app_window_targeter.h" |
| 16 #include "chrome/browser/ui/views/extensions/extension_keybinding_registry_views
.h" | 16 #include "chrome/browser/ui/views/extensions/extension_keybinding_registry_views
.h" |
| 17 #include "chrome/browser/ui/views/frame/taskbar_decorator.h" | 17 #include "chrome/browser/ui/views/frame/taskbar_decorator.h" |
| 18 #include "chrome/browser/ui/zoom/zoom_controller.h" | 18 #include "chrome/browser/ui/zoom/zoom_controller.h" |
| 19 #include "chrome/browser/web_applications/web_app.h" | 19 #include "chrome/browser/web_applications/web_app.h" |
| 20 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" |
| 21 #include "extensions/browser/app_window/app_window.h" |
| 21 #include "extensions/common/extension.h" | 22 #include "extensions/common/extension.h" |
| 22 #include "ui/aura/window.h" | 23 #include "ui/aura/window.h" |
| 23 #include "ui/base/hit_test.h" | 24 #include "ui/base/hit_test.h" |
| 24 #include "ui/base/models/simple_menu_model.h" | 25 #include "ui/base/models/simple_menu_model.h" |
| 25 #include "ui/gfx/image/image_skia.h" | 26 #include "ui/gfx/image/image_skia.h" |
| 26 #include "ui/views/controls/menu/menu_runner.h" | 27 #include "ui/views/controls/menu/menu_runner.h" |
| 27 #include "ui/views/controls/webview/webview.h" | 28 #include "ui/views/controls/webview/webview.h" |
| 28 #include "ui/views/widget/widget.h" | 29 #include "ui/views/widget/widget.h" |
| 29 #include "ui/wm/core/easy_resize_window_targeter.h" | 30 #include "ui/wm/core/easy_resize_window_targeter.h" |
| 30 #include "ui/wm/core/shadow_types.h" | 31 #include "ui/wm/core/shadow_types.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 49 #include "chrome/browser/ui/ash/multi_user/multi_user_context_menu.h" | 50 #include "chrome/browser/ui/ash/multi_user/multi_user_context_menu.h" |
| 50 #include "ui/aura/client/aura_constants.h" | 51 #include "ui/aura/client/aura_constants.h" |
| 51 #include "ui/aura/client/window_tree_client.h" | 52 #include "ui/aura/client/window_tree_client.h" |
| 52 #include "ui/aura/window_observer.h" | 53 #include "ui/aura/window_observer.h" |
| 53 #endif | 54 #endif |
| 54 | 55 |
| 55 #if defined(OS_CHROMEOS) | 56 #if defined(OS_CHROMEOS) |
| 56 #include "ash/shell_window_ids.h" | 57 #include "ash/shell_window_ids.h" |
| 57 #endif | 58 #endif |
| 58 | 59 |
| 59 using extensions::AppWindow; | |
| 60 | |
| 61 namespace { | 60 namespace { |
| 62 | 61 |
| 63 const int kMinPanelWidth = 100; | 62 const int kMinPanelWidth = 100; |
| 64 const int kMinPanelHeight = 100; | 63 const int kMinPanelHeight = 100; |
| 65 const int kDefaultPanelWidth = 200; | 64 const int kDefaultPanelWidth = 200; |
| 66 const int kDefaultPanelHeight = 300; | 65 const int kDefaultPanelHeight = 300; |
| 67 | 66 |
| 68 struct AcceleratorMapping { | 67 struct AcceleratorMapping { |
| 69 ui::KeyboardCode keycode; | 68 ui::KeyboardCode keycode; |
| 70 int modifiers; | 69 int modifiers; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 } | 120 } |
| 122 return accelerators; | 121 return accelerators; |
| 123 } | 122 } |
| 124 | 123 |
| 125 #if defined(USE_ASH) | 124 #if defined(USE_ASH) |
| 126 // This class handles a user's fullscreen request (Shift+F4/F4). | 125 // This class handles a user's fullscreen request (Shift+F4/F4). |
| 127 class NativeAppWindowStateDelegate : public ash::wm::WindowStateDelegate, | 126 class NativeAppWindowStateDelegate : public ash::wm::WindowStateDelegate, |
| 128 public ash::wm::WindowStateObserver, | 127 public ash::wm::WindowStateObserver, |
| 129 public aura::WindowObserver { | 128 public aura::WindowObserver { |
| 130 public: | 129 public: |
| 131 NativeAppWindowStateDelegate(AppWindow* app_window, | 130 NativeAppWindowStateDelegate( |
| 132 extensions::NativeAppWindow* native_app_window) | 131 extensions::AppWindow* app_window, |
| 132 native_app_window::NativeAppWindow* native_app_window) |
| 133 : app_window_(app_window), | 133 : app_window_(app_window), |
| 134 window_state_( | 134 window_state_( |
| 135 ash::wm::GetWindowState(native_app_window->GetNativeWindow())) { | 135 ash::wm::GetWindowState(native_app_window->GetNativeWindow())) { |
| 136 // Add a window state observer to exit fullscreen properly in case | 136 // Add a window state observer to exit fullscreen properly in case |
| 137 // fullscreen is exited without going through AppWindow::Restore(). This | 137 // fullscreen is exited without going through AppWindow::Restore(). This |
| 138 // is the case when exiting immersive fullscreen via the "Restore" window | 138 // is the case when exiting immersive fullscreen via the "Restore" window |
| 139 // control. | 139 // control. |
| 140 // TODO(pkotwicz): This is a hack. Remove ASAP. http://crbug.com/319048 | 140 // TODO(pkotwicz): This is a hack. Remove ASAP. http://crbug.com/319048 |
| 141 window_state_->AddObserver(this); | 141 window_state_->AddObserver(this); |
| 142 window_state_->window()->AddObserver(this); | 142 window_state_->window()->AddObserver(this); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 } | 179 } |
| 180 | 180 |
| 181 // Overridden from aura::WindowObserver: | 181 // Overridden from aura::WindowObserver: |
| 182 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE { | 182 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE { |
| 183 window_state_->RemoveObserver(this); | 183 window_state_->RemoveObserver(this); |
| 184 window_state_->window()->RemoveObserver(this); | 184 window_state_->window()->RemoveObserver(this); |
| 185 window_state_ = NULL; | 185 window_state_ = NULL; |
| 186 } | 186 } |
| 187 | 187 |
| 188 // Not owned. | 188 // Not owned. |
| 189 AppWindow* app_window_; | 189 extensions::AppWindow* app_window_; |
| 190 ash::wm::WindowState* window_state_; | 190 ash::wm::WindowState* window_state_; |
| 191 | 191 |
| 192 DISALLOW_COPY_AND_ASSIGN(NativeAppWindowStateDelegate); | 192 DISALLOW_COPY_AND_ASSIGN(NativeAppWindowStateDelegate); |
| 193 }; | 193 }; |
| 194 #endif // USE_ASH | 194 #endif // USE_ASH |
| 195 | 195 |
| 196 } // namespace | 196 } // namespace |
| 197 | 197 |
| 198 ChromeNativeAppWindowViews::ChromeNativeAppWindowViews() | 198 ChromeNativeAppWindowViews::ChromeNativeAppWindowViews( |
| 199 extensions::AppWindow* extensions_app_window) |
| 199 : is_fullscreen_(false), | 200 : is_fullscreen_(false), |
| 200 has_frame_color_(false), | 201 has_frame_color_(false), |
| 201 active_frame_color_(SK_ColorBLACK), | 202 active_frame_color_(SK_ColorBLACK), |
| 202 inactive_frame_color_(SK_ColorBLACK) { | 203 inactive_frame_color_(SK_ColorBLACK), |
| 204 extensions_app_window_(extensions_app_window) { |
| 203 } | 205 } |
| 204 | 206 |
| 205 ChromeNativeAppWindowViews::~ChromeNativeAppWindowViews() {} | 207 ChromeNativeAppWindowViews::~ChromeNativeAppWindowViews() {} |
| 206 | 208 |
| 207 void ChromeNativeAppWindowViews::OnBeforeWidgetInit( | 209 void ChromeNativeAppWindowViews::OnBeforeWidgetInit( |
| 208 views::Widget::InitParams* init_params, | 210 views::Widget::InitParams* init_params, |
| 209 views::Widget* widget) {} | 211 views::Widget* widget) {} |
| 210 | 212 |
| 211 void ChromeNativeAppWindowViews::InitializeDefaultWindow( | 213 void ChromeNativeAppWindowViews::InitializeDefaultWindow( |
| 212 const AppWindow::CreateParams& create_params) { | 214 const native_app_window::AppWindowCreateParams& create_params) { |
| 213 std::string app_name = web_app::GenerateApplicationNameFromExtensionId( | 215 std::string app_name = web_app::GenerateApplicationNameFromExtensionId( |
| 214 app_window()->extension_id()); | 216 extensions_app_window_->extension_id()); |
| 215 | 217 |
| 216 views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW); | 218 views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW); |
| 217 init_params.delegate = this; | 219 init_params.delegate = this; |
| 218 init_params.remove_standard_frame = IsFrameless() || has_frame_color_; | 220 init_params.remove_standard_frame = IsFrameless() || has_frame_color_; |
| 219 init_params.use_system_default_icon = true; | 221 init_params.use_system_default_icon = true; |
| 220 if (create_params.alpha_enabled) | 222 if (create_params.alpha_enabled) |
| 221 init_params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; | 223 init_params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
| 222 init_params.keep_on_top = create_params.always_on_top; | 224 init_params.keep_on_top = create_params.always_on_top; |
| 223 init_params.visible_on_all_workspaces = | 225 init_params.visible_on_all_workspaces = |
| 224 create_params.visible_on_all_workspaces; | 226 create_params.visible_on_all_workspaces; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 243 #endif | 245 #endif |
| 244 widget()->Init(init_params); | 246 widget()->Init(init_params); |
| 245 | 247 |
| 246 // The frame insets are required to resolve the bounds specifications | 248 // The frame insets are required to resolve the bounds specifications |
| 247 // correctly. So we set the window bounds and constraints now. | 249 // correctly. So we set the window bounds and constraints now. |
| 248 gfx::Insets frame_insets = GetFrameInsets(); | 250 gfx::Insets frame_insets = GetFrameInsets(); |
| 249 gfx::Rect window_bounds = create_params.GetInitialWindowBounds(frame_insets); | 251 gfx::Rect window_bounds = create_params.GetInitialWindowBounds(frame_insets); |
| 250 SetContentSizeConstraints(create_params.GetContentMinimumSize(frame_insets), | 252 SetContentSizeConstraints(create_params.GetContentMinimumSize(frame_insets), |
| 251 create_params.GetContentMaximumSize(frame_insets)); | 253 create_params.GetContentMaximumSize(frame_insets)); |
| 252 if (!window_bounds.IsEmpty()) { | 254 if (!window_bounds.IsEmpty()) { |
| 253 typedef AppWindow::BoundsSpecification BoundsSpecification; | 255 typedef native_app_window::BoundsSpecification BoundsSpecification; |
| 254 bool position_specified = | 256 bool position_specified = |
| 255 window_bounds.x() != BoundsSpecification::kUnspecifiedPosition && | 257 window_bounds.x() != BoundsSpecification::kUnspecifiedPosition && |
| 256 window_bounds.y() != BoundsSpecification::kUnspecifiedPosition; | 258 window_bounds.y() != BoundsSpecification::kUnspecifiedPosition; |
| 257 if (!position_specified) | 259 if (!position_specified) |
| 258 widget()->CenterWindow(window_bounds.size()); | 260 widget()->CenterWindow(window_bounds.size()); |
| 259 else | 261 else |
| 260 widget()->SetBounds(window_bounds); | 262 widget()->SetBounds(window_bounds); |
| 261 } | 263 } |
| 262 | 264 |
| 263 if (IsFrameless() && | 265 if (IsFrameless() && |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 iter != accelerator_table.end(); ++iter) { | 303 iter != accelerator_table.end(); ++iter) { |
| 302 if (is_kiosk_app_mode && !chrome::IsCommandAllowedInAppMode(iter->second)) | 304 if (is_kiosk_app_mode && !chrome::IsCommandAllowedInAppMode(iter->second)) |
| 303 continue; | 305 continue; |
| 304 | 306 |
| 305 focus_manager->RegisterAccelerator( | 307 focus_manager->RegisterAccelerator( |
| 306 iter->first, ui::AcceleratorManager::kNormalPriority, this); | 308 iter->first, ui::AcceleratorManager::kNormalPriority, this); |
| 307 } | 309 } |
| 308 } | 310 } |
| 309 | 311 |
| 310 void ChromeNativeAppWindowViews::InitializePanelWindow( | 312 void ChromeNativeAppWindowViews::InitializePanelWindow( |
| 311 const AppWindow::CreateParams& create_params) { | 313 const native_app_window::AppWindowCreateParams& create_params) { |
| 312 views::Widget::InitParams params(views::Widget::InitParams::TYPE_PANEL); | 314 views::Widget::InitParams params(views::Widget::InitParams::TYPE_PANEL); |
| 313 params.delegate = this; | 315 params.delegate = this; |
| 314 | 316 |
| 315 gfx::Rect initial_window_bounds = | 317 gfx::Rect initial_window_bounds = |
| 316 create_params.GetInitialWindowBounds(gfx::Insets()); | 318 create_params.GetInitialWindowBounds(gfx::Insets()); |
| 317 preferred_size_ = gfx::Size(initial_window_bounds.width(), | 319 preferred_size_ = gfx::Size(initial_window_bounds.width(), |
| 318 initial_window_bounds.height()); | 320 initial_window_bounds.height()); |
| 319 if (preferred_size_.width() == 0) | 321 if (preferred_size_.width() == 0) |
| 320 preferred_size_.set_width(kDefaultPanelWidth); | 322 preferred_size_.set_width(kDefaultPanelWidth); |
| 321 else if (preferred_size_.width() < kMinPanelWidth) | 323 else if (preferred_size_.width() < kMinPanelWidth) |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 case ui::SHOW_STATE_MINIMIZED: | 441 case ui::SHOW_STATE_MINIMIZED: |
| 440 case ui::SHOW_STATE_INACTIVE: | 442 case ui::SHOW_STATE_INACTIVE: |
| 441 case ui::SHOW_STATE_END: | 443 case ui::SHOW_STATE_END: |
| 442 return ui::SHOW_STATE_NORMAL; | 444 return ui::SHOW_STATE_NORMAL; |
| 443 } | 445 } |
| 444 #endif // !defined(USE_ASH) | 446 #endif // !defined(USE_ASH) |
| 445 return ui::SHOW_STATE_NORMAL; | 447 return ui::SHOW_STATE_NORMAL; |
| 446 } | 448 } |
| 447 | 449 |
| 448 bool ChromeNativeAppWindowViews::IsAlwaysOnTop() const { | 450 bool ChromeNativeAppWindowViews::IsAlwaysOnTop() const { |
| 449 if (app_window()->window_type_is_panel()) { | 451 if (app_window()->WindowTypeIsPanel()) { |
| 450 #if defined(USE_ASH) | 452 #if defined(USE_ASH) |
| 451 return ash::wm::GetWindowState(widget()->GetNativeWindow()) | 453 return ash::wm::GetWindowState(widget()->GetNativeWindow()) |
| 452 ->panel_attached(); | 454 ->panel_attached(); |
| 453 #else | 455 #else |
| 454 return true; | 456 return true; |
| 455 #endif | 457 #endif |
| 456 } else { | 458 } else { |
| 457 return widget()->IsAlwaysOnTop(); | 459 return widget()->IsAlwaysOnTop(); |
| 458 } | 460 } |
| 459 } | 461 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 488 views::MenuRunner::MENU_DELETED) { | 490 views::MenuRunner::MENU_DELETED) { |
| 489 return; | 491 return; |
| 490 } | 492 } |
| 491 } | 493 } |
| 492 #endif | 494 #endif |
| 493 } | 495 } |
| 494 | 496 |
| 495 // views::WidgetDelegate implementation. | 497 // views::WidgetDelegate implementation. |
| 496 | 498 |
| 497 gfx::ImageSkia ChromeNativeAppWindowViews::GetWindowAppIcon() { | 499 gfx::ImageSkia ChromeNativeAppWindowViews::GetWindowAppIcon() { |
| 498 gfx::Image app_icon = app_window()->app_icon(); | 500 gfx::Image app_icon = extensions_app_window_->app_icon(); |
| 499 if (app_icon.IsEmpty()) | 501 if (app_icon.IsEmpty()) |
| 500 return GetWindowIcon(); | 502 return GetWindowIcon(); |
| 501 else | 503 else |
| 502 return *app_icon.ToImageSkia(); | 504 return *app_icon.ToImageSkia(); |
| 503 } | 505 } |
| 504 | 506 |
| 505 gfx::ImageSkia ChromeNativeAppWindowViews::GetWindowIcon() { | 507 gfx::ImageSkia ChromeNativeAppWindowViews::GetWindowIcon() { |
| 506 content::WebContents* web_contents = app_window()->web_contents(); | 508 content::WebContents* web_contents = app_window()->GetWebContents(); |
| 507 if (web_contents) { | 509 if (web_contents) { |
| 508 FaviconTabHelper* favicon_tab_helper = | 510 FaviconTabHelper* favicon_tab_helper = |
| 509 FaviconTabHelper::FromWebContents(web_contents); | 511 FaviconTabHelper::FromWebContents(web_contents); |
| 510 gfx::Image app_icon = favicon_tab_helper->GetFavicon(); | 512 gfx::Image app_icon = favicon_tab_helper->GetFavicon(); |
| 511 if (!app_icon.IsEmpty()) | 513 if (!app_icon.IsEmpty()) |
| 512 return *app_icon.ToImageSkia(); | 514 return *app_icon.ToImageSkia(); |
| 513 } | 515 } |
| 514 return gfx::ImageSkia(); | 516 return gfx::ImageSkia(); |
| 515 } | 517 } |
| 516 | 518 |
| 517 views::NonClientFrameView* ChromeNativeAppWindowViews::CreateNonClientFrameView( | 519 views::NonClientFrameView* ChromeNativeAppWindowViews::CreateNonClientFrameView( |
| 518 views::Widget* widget) { | 520 views::Widget* widget) { |
| 519 #if defined(USE_ASH) | 521 #if defined(USE_ASH) |
| 520 if (chrome::IsNativeViewInAsh(widget->GetNativeView())) { | 522 if (chrome::IsNativeViewInAsh(widget->GetNativeView())) { |
| 521 // Set the delegate now because CustomFrameViewAsh sets the | 523 // Set the delegate now because CustomFrameViewAsh sets the |
| 522 // WindowStateDelegate if one is not already set. | 524 // WindowStateDelegate if one is not already set. |
| 523 ash::wm::GetWindowState(GetNativeWindow())->SetDelegate( | 525 ash::wm::GetWindowState(GetNativeWindow()) |
| 524 scoped_ptr<ash::wm::WindowStateDelegate>( | 526 ->SetDelegate(scoped_ptr<ash::wm::WindowStateDelegate>( |
| 525 new NativeAppWindowStateDelegate(app_window(), this)).Pass()); | 527 new NativeAppWindowStateDelegate( |
| 528 extensions_app_window_, this)).Pass()); |
| 526 | 529 |
| 527 if (app_window()->window_type_is_panel()) { | 530 if (app_window()->WindowTypeIsPanel()) { |
| 528 ash::PanelFrameView::FrameType frame_type = IsFrameless() ? | 531 ash::PanelFrameView::FrameType frame_type = IsFrameless() ? |
| 529 ash::PanelFrameView::FRAME_NONE : ash::PanelFrameView::FRAME_ASH; | 532 ash::PanelFrameView::FRAME_NONE : ash::PanelFrameView::FRAME_ASH; |
| 530 views::NonClientFrameView* frame_view = | 533 views::NonClientFrameView* frame_view = |
| 531 new ash::PanelFrameView(widget, frame_type); | 534 new ash::PanelFrameView(widget, frame_type); |
| 532 frame_view->set_context_menu_controller(this); | 535 frame_view->set_context_menu_controller(this); |
| 533 return frame_view; | 536 return frame_view; |
| 534 } | 537 } |
| 535 | 538 |
| 536 if (IsFrameless()) | 539 if (IsFrameless()) |
| 537 return CreateNonStandardAppFrame(); | 540 return CreateNonStandardAppFrame(); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 default: | 597 default: |
| 595 NOTREACHED() << "Unknown accelerator sent to app window."; | 598 NOTREACHED() << "Unknown accelerator sent to app window."; |
| 596 } | 599 } |
| 597 return NativeAppWindowViews::AcceleratorPressed(accelerator); | 600 return NativeAppWindowViews::AcceleratorPressed(accelerator); |
| 598 } | 601 } |
| 599 | 602 |
| 600 // NativeAppWindow implementation. | 603 // NativeAppWindow implementation. |
| 601 | 604 |
| 602 void ChromeNativeAppWindowViews::SetFullscreen(int fullscreen_types) { | 605 void ChromeNativeAppWindowViews::SetFullscreen(int fullscreen_types) { |
| 603 // Fullscreen not supported by panels. | 606 // Fullscreen not supported by panels. |
| 604 if (app_window()->window_type_is_panel()) | 607 if (app_window()->WindowTypeIsPanel()) |
| 605 return; | 608 return; |
| 606 is_fullscreen_ = (fullscreen_types != AppWindow::FULLSCREEN_TYPE_NONE); | 609 is_fullscreen_ = |
| 610 (fullscreen_types != native_app_window::FULLSCREEN_TYPE_NONE); |
| 607 widget()->SetFullscreen(is_fullscreen_); | 611 widget()->SetFullscreen(is_fullscreen_); |
| 608 | 612 |
| 609 // TODO(oshima): Remove USE_ATHENA once athena has its own NativeAppWindow. | 613 // TODO(oshima): Remove USE_ATHENA once athena has its own NativeAppWindow. |
| 610 #if defined(USE_ASH) && !defined(USE_ATHENA) | 614 #if defined(USE_ASH) && !defined(USE_ATHENA) |
| 611 if (immersive_fullscreen_controller_.get()) { | 615 if (immersive_fullscreen_controller_.get()) { |
| 612 // |immersive_fullscreen_controller_| should only be set if immersive | 616 // |immersive_fullscreen_controller_| should only be set if immersive |
| 613 // fullscreen is the fullscreen type used by the OS. | 617 // fullscreen is the fullscreen type used by the OS. |
| 614 immersive_fullscreen_controller_->SetEnabled( | 618 immersive_fullscreen_controller_->SetEnabled( |
| 615 ash::ImmersiveFullscreenController::WINDOW_TYPE_PACKAGED_APP, | 619 ash::ImmersiveFullscreenController::WINDOW_TYPE_PACKAGED_APP, |
| 616 (fullscreen_types & AppWindow::FULLSCREEN_TYPE_OS) != 0); | 620 (fullscreen_types & native_app_window::FULLSCREEN_TYPE_OS) != 0); |
| 617 // Autohide the shelf instead of hiding the shelf completely when only in | 621 // Autohide the shelf instead of hiding the shelf completely when only in |
| 618 // OS fullscreen. | 622 // OS fullscreen. |
| 619 ash::wm::WindowState* window_state = | 623 ash::wm::WindowState* window_state = |
| 620 ash::wm::GetWindowState(widget()->GetNativeWindow()); | 624 ash::wm::GetWindowState(widget()->GetNativeWindow()); |
| 621 window_state->set_hide_shelf_when_fullscreen(fullscreen_types != | 625 window_state->set_hide_shelf_when_fullscreen( |
| 622 AppWindow::FULLSCREEN_TYPE_OS); | 626 fullscreen_types != native_app_window::FULLSCREEN_TYPE_OS); |
| 623 DCHECK(ash::Shell::HasInstance()); | 627 DCHECK(ash::Shell::HasInstance()); |
| 624 ash::Shell::GetInstance()->UpdateShelfVisibility(); | 628 ash::Shell::GetInstance()->UpdateShelfVisibility(); |
| 625 } | 629 } |
| 626 #endif | 630 #endif |
| 627 | 631 |
| 628 // TODO(jeremya) we need to call RenderViewHost::ExitFullscreen() if we | 632 // TODO(jeremya) we need to call RenderViewHost::ExitFullscreen() if we |
| 629 // ever drop the window out of fullscreen in response to something that | 633 // ever drop the window out of fullscreen in response to something that |
| 630 // wasn't the app calling webkitCancelFullScreen(). | 634 // wasn't the app calling webkitCancelFullScreen(). |
| 631 } | 635 } |
| 632 | 636 |
| 633 bool ChromeNativeAppWindowViews::IsFullscreenOrPending() const { | 637 bool ChromeNativeAppWindowViews::IsFullscreenOrPending() const { |
| 634 return is_fullscreen_; | 638 return is_fullscreen_; |
| 635 } | 639 } |
| 636 | 640 |
| 637 void ChromeNativeAppWindowViews::UpdateBadgeIcon() { | 641 void ChromeNativeAppWindowViews::UpdateBadgeIcon() { |
| 638 const gfx::Image* icon = NULL; | 642 const gfx::Image* icon = NULL; |
| 639 if (!app_window()->badge_icon().IsEmpty()) { | 643 if (!extensions_app_window_->badge_icon().IsEmpty()) { |
| 640 icon = &app_window()->badge_icon(); | 644 icon = &extensions_app_window_->badge_icon(); |
| 641 // chrome::DrawTaskbarDecoration can do interesting things with non-square | 645 // chrome::DrawTaskbarDecoration can do interesting things with non-square |
| 642 // bitmaps. | 646 // bitmaps. |
| 643 // TODO(benwells): Refactor chrome::DrawTaskbarDecoration to not be avatar | 647 // TODO(benwells): Refactor chrome::DrawTaskbarDecoration to not be avatar |
| 644 // specific, and lift this restriction. | 648 // specific, and lift this restriction. |
| 645 if (icon->Width() != icon->Height()) { | 649 if (icon->Width() != icon->Height()) { |
| 646 LOG(ERROR) << "Attempt to set a non-square badge; request ignored."; | 650 LOG(ERROR) << "Attempt to set a non-square badge; request ignored."; |
| 647 return; | 651 return; |
| 648 } | 652 } |
| 649 } | 653 } |
| 650 chrome::DrawTaskbarDecoration(GetNativeWindow(), icon); | 654 chrome::DrawTaskbarDecoration(GetNativeWindow(), icon); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 677 return active_frame_color_; | 681 return active_frame_color_; |
| 678 } | 682 } |
| 679 | 683 |
| 680 SkColor ChromeNativeAppWindowViews::InactiveFrameColor() const { | 684 SkColor ChromeNativeAppWindowViews::InactiveFrameColor() const { |
| 681 return inactive_frame_color_; | 685 return inactive_frame_color_; |
| 682 } | 686 } |
| 683 | 687 |
| 684 // NativeAppWindowViews implementation. | 688 // NativeAppWindowViews implementation. |
| 685 | 689 |
| 686 void ChromeNativeAppWindowViews::InitializeWindow( | 690 void ChromeNativeAppWindowViews::InitializeWindow( |
| 687 AppWindow* app_window, | 691 native_app_window::NativeAppWindowDelegate* app_window, |
| 688 const AppWindow::CreateParams& create_params) { | 692 const native_app_window::AppWindowCreateParams& create_params) { |
| 689 DCHECK(widget()); | 693 DCHECK(widget()); |
| 690 has_frame_color_ = create_params.has_frame_color; | 694 has_frame_color_ = create_params.has_frame_color; |
| 691 active_frame_color_ = create_params.active_frame_color; | 695 active_frame_color_ = create_params.active_frame_color; |
| 692 inactive_frame_color_ = create_params.inactive_frame_color; | 696 inactive_frame_color_ = create_params.inactive_frame_color; |
| 693 if (create_params.window_type == AppWindow::WINDOW_TYPE_PANEL || | 697 if (create_params.window_type == native_app_window::WINDOW_TYPE_PANEL || |
| 694 create_params.window_type == AppWindow::WINDOW_TYPE_V1_PANEL) { | 698 create_params.window_type == native_app_window::WINDOW_TYPE_V1_PANEL) { |
| 695 InitializePanelWindow(create_params); | 699 InitializePanelWindow(create_params); |
| 696 } else { | 700 } else { |
| 697 InitializeDefaultWindow(create_params); | 701 InitializeDefaultWindow(create_params); |
| 698 } | 702 } |
| 699 extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryViews( | 703 extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryViews( |
| 700 Profile::FromBrowserContext(app_window->browser_context()), | 704 Profile::FromBrowserContext(app_window->GetBrowserContext()), |
| 701 widget()->GetFocusManager(), | 705 widget()->GetFocusManager(), |
| 702 extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY, | 706 extensions::ExtensionKeybindingRegistry::PLATFORM_APPS_ONLY, |
| 703 NULL)); | 707 NULL)); |
| 704 } | 708 } |
| OLD | NEW |