| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h" | 4 #include "chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h" |
| 5 | 5 |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "ash/common/shelf/shelf_delegate.h" | 8 #include "ash/common/shelf/shelf_delegate.h" |
| 9 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" | 9 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
| 10 #include "ash/common/wm/window_state.h" | 10 #include "ash/common/wm/window_state.h" |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 | 239 |
| 240 private: | 240 private: |
| 241 const int task_id_; | 241 const int task_id_; |
| 242 const arc::ArcAppShelfId app_shelf_id_; | 242 const arc::ArcAppShelfId app_shelf_id_; |
| 243 ash::ShelfID shelf_id_ = 0; | 243 ash::ShelfID shelf_id_ = 0; |
| 244 FullScreenMode fullscreen_mode_ = FullScreenMode::NOT_DEFINED; | 244 FullScreenMode fullscreen_mode_ = FullScreenMode::NOT_DEFINED; |
| 245 // Unowned pointers | 245 // Unowned pointers |
| 246 views::Widget* const widget_; | 246 views::Widget* const widget_; |
| 247 ArcAppWindowLauncherController* owner_; | 247 ArcAppWindowLauncherController* owner_; |
| 248 ArcAppWindowLauncherItemController* controller_ = nullptr; | 248 ArcAppWindowLauncherItemController* controller_ = nullptr; |
| 249 // Unowned pointer, represents host Arc window. | 249 // Unowned pointer, represents host ARC window. |
| 250 | 250 |
| 251 DISALLOW_COPY_AND_ASSIGN(AppWindow); | 251 DISALLOW_COPY_AND_ASSIGN(AppWindow); |
| 252 }; | 252 }; |
| 253 | 253 |
| 254 ArcAppWindowLauncherController::ArcAppWindowLauncherController( | 254 ArcAppWindowLauncherController::ArcAppWindowLauncherController( |
| 255 ChromeLauncherController* owner, | 255 ChromeLauncherController* owner, |
| 256 ash::ShelfDelegate* shelf_delegate) | 256 ash::ShelfDelegate* shelf_delegate) |
| 257 : AppWindowLauncherController(owner), shelf_delegate_(shelf_delegate) { | 257 : AppWindowLauncherController(owner), shelf_delegate_(shelf_delegate) { |
| 258 if (arc::IsArcAllowedForProfile(owner->profile())) { | 258 if (arc::IsArcAllowedForProfile(owner->profile())) { |
| 259 observed_profile_ = owner->profile(); | 259 observed_profile_ = owner->profile(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 282 : shelf_app_id; | 282 : shelf_app_id; |
| 283 } | 283 } |
| 284 | 284 |
| 285 void ArcAppWindowLauncherController::ActiveUserChanged( | 285 void ArcAppWindowLauncherController::ActiveUserChanged( |
| 286 const std::string& user_email) { | 286 const std::string& user_email) { |
| 287 const std::string& primary_user_email = user_manager::UserManager::Get() | 287 const std::string& primary_user_email = user_manager::UserManager::Get() |
| 288 ->GetPrimaryUser() | 288 ->GetPrimaryUser() |
| 289 ->GetAccountId() | 289 ->GetAccountId() |
| 290 .GetUserEmail(); | 290 .GetUserEmail(); |
| 291 if (user_email == primary_user_email) { | 291 if (user_email == primary_user_email) { |
| 292 // Restore existing Arc window and create controllers for them. | 292 // Restore existing ARC window and create controllers for them. |
| 293 AttachControllerToWindowsIfNeeded(); | 293 AttachControllerToWindowsIfNeeded(); |
| 294 | 294 |
| 295 // Make sure that we created items for all apps, not only which have a | 295 // Make sure that we created items for all apps, not only which have a |
| 296 // window. | 296 // window. |
| 297 for (const auto& info : task_id_to_app_window_info_) | 297 for (const auto& info : task_id_to_app_window_info_) |
| 298 AttachControllerToTask(info.first, *info.second); | 298 AttachControllerToTask(info.first, *info.second); |
| 299 | 299 |
| 300 // Update active status. | 300 // Update active status. |
| 301 OnTaskSetActive(active_task_id_); | 301 OnTaskSetActive(active_task_id_); |
| 302 } else { | 302 } else { |
| 303 // Remove all Arc apps and destroy its controllers. There is no mapping | 303 // Remove all ARC apps and destroy its controllers. There is no mapping |
| 304 // task id to app window because it is not safe when controller is missing. | 304 // task id to app window because it is not safe when controller is missing. |
| 305 for (auto& it : task_id_to_app_window_info_) | 305 for (auto& it : task_id_to_app_window_info_) |
| 306 UnregisterApp(it.second.get()); | 306 UnregisterApp(it.second.get()); |
| 307 | 307 |
| 308 // Some controllers might have no windows attached, for example background | 308 // Some controllers might have no windows attached, for example background |
| 309 // task when foreground tasks is in full screen. | 309 // task when foreground tasks is in full screen. |
| 310 for (const auto& it : app_shelf_group_to_controller_map_) | 310 for (const auto& it : app_shelf_group_to_controller_map_) |
| 311 owner()->CloseLauncherItem(it.second->shelf_id()); | 311 owner()->CloseLauncherItem(it.second->shelf_id()); |
| 312 app_shelf_group_to_controller_map_.clear(); | 312 app_shelf_group_to_controller_map_.clear(); |
| 313 } | 313 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 327 if (!widget || !widget->is_top_level()) | 327 if (!widget || !widget->is_top_level()) |
| 328 return; | 328 return; |
| 329 observed_windows_.push_back(window); | 329 observed_windows_.push_back(window); |
| 330 window->AddObserver(this); | 330 window->AddObserver(this); |
| 331 } | 331 } |
| 332 | 332 |
| 333 void ArcAppWindowLauncherController::OnWindowVisibilityChanged( | 333 void ArcAppWindowLauncherController::OnWindowVisibilityChanged( |
| 334 aura::Window* window, | 334 aura::Window* window, |
| 335 bool visible) { | 335 bool visible) { |
| 336 // Attach window to multi-user manager now to let it manage visibility state | 336 // Attach window to multi-user manager now to let it manage visibility state |
| 337 // of the Arc window correctly. | 337 // of the ARC window correctly. |
| 338 if (GetWindowTaskId(window) > 0) { | 338 if (GetWindowTaskId(window) > 0) { |
| 339 chrome::MultiUserWindowManager::GetInstance()->SetWindowOwner( | 339 chrome::MultiUserWindowManager::GetInstance()->SetWindowOwner( |
| 340 window, | 340 window, |
| 341 user_manager::UserManager::Get()->GetPrimaryUser()->GetAccountId()); | 341 user_manager::UserManager::Get()->GetPrimaryUser()->GetAccountId()); |
| 342 } | 342 } |
| 343 | 343 |
| 344 // The application id property should be set at this time. It is important to | 344 // The application id property should be set at this time. It is important to |
| 345 // have window->IsVisible set to true before attaching to a controller because | 345 // have window->IsVisible set to true before attaching to a controller because |
| 346 // the window is registered in multi-user manager and this manager may | 346 // the window is registered in multi-user manager and this manager may |
| 347 // consider this new window as hidden for current profile. Multi-user manager | 347 // consider this new window as hidden for current profile. Multi-user manager |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 720 const std::string arc_app_id = exo::ShellSurface::GetApplicationId(window); | 720 const std::string arc_app_id = exo::ShellSurface::GetApplicationId(window); |
| 721 if (arc_app_id.empty()) | 721 if (arc_app_id.empty()) |
| 722 return -1; | 722 return -1; |
| 723 | 723 |
| 724 int task_id = -1; | 724 int task_id = -1; |
| 725 if (sscanf(arc_app_id.c_str(), "org.chromium.arc.%d", &task_id) != 1) | 725 if (sscanf(arc_app_id.c_str(), "org.chromium.arc.%d", &task_id) != 1) |
| 726 return -1; | 726 return -1; |
| 727 | 727 |
| 728 return task_id; | 728 return task_id; |
| 729 } | 729 } |
| OLD | NEW |