OLD | NEW |
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/ash/launcher/chrome_launcher_app_menu_item_browser.h
" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item_browser.h
" |
6 | 6 |
7 #include "ash/wm/window_util.h" | 7 #include "ash/wm/window_util.h" |
8 #include "chrome/browser/chrome_notification_types.h" | 8 #include "chrome/browser/chrome_notification_types.h" |
9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
10 #include "chrome/browser/ui/browser_finder.h" | 10 #include "chrome/browser/ui/browser_finder.h" |
11 #include "chrome/browser/ui/browser_window.h" | 11 #include "chrome/browser/ui/browser_window.h" |
12 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 12 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
13 #include "content/public/browser/notification_service.h" | 13 #include "content/public/browser/notification_service.h" |
14 #include "ui/events/event_constants.h" | 14 #include "ui/events/event_constants.h" |
15 | 15 |
| 16 #if defined(OS_CHROMEOS) |
| 17 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" |
| 18 #include "components/user_manager/user_manager.h" |
| 19 #endif |
| 20 |
16 ChromeLauncherAppMenuItemBrowser::ChromeLauncherAppMenuItemBrowser( | 21 ChromeLauncherAppMenuItemBrowser::ChromeLauncherAppMenuItemBrowser( |
17 const base::string16 title, | 22 const base::string16 title, |
18 const gfx::Image* icon, | 23 const gfx::Image* icon, |
19 Browser* browser, | 24 Browser* browser, |
20 bool has_leading_separator) | 25 bool has_leading_separator) |
21 : ChromeLauncherAppMenuItem(title, icon, has_leading_separator), | 26 : ChromeLauncherAppMenuItem(title, icon, has_leading_separator), |
22 browser_(browser) { | 27 browser_(browser) { |
23 DCHECK(browser); | 28 DCHECK(browser); |
24 registrar_.Add(this, | 29 registrar_.Add(this, |
25 chrome::NOTIFICATION_BROWSER_CLOSING, | 30 chrome::NOTIFICATION_BROWSER_CLOSING, |
26 content::Source<Browser>(browser)); | 31 content::Source<Browser>(browser)); |
27 } | 32 } |
28 ChromeLauncherAppMenuItemBrowser::~ChromeLauncherAppMenuItemBrowser() { | 33 ChromeLauncherAppMenuItemBrowser::~ChromeLauncherAppMenuItemBrowser() { |
29 } | 34 } |
30 | 35 |
31 bool ChromeLauncherAppMenuItemBrowser::IsActive() const { | 36 bool ChromeLauncherAppMenuItemBrowser::IsActive() const { |
32 return browser_ == chrome::FindBrowserWithWindow(ash::wm::GetActiveWindow()); | 37 return browser_ == chrome::FindBrowserWithWindow(ash::wm::GetActiveWindow()); |
33 } | 38 } |
34 | 39 |
35 bool ChromeLauncherAppMenuItemBrowser::IsEnabled() const { | 40 bool ChromeLauncherAppMenuItemBrowser::IsEnabled() const { |
36 return true; | 41 return true; |
37 } | 42 } |
38 | 43 |
39 void ChromeLauncherAppMenuItemBrowser::Execute(int event_flags) { | 44 void ChromeLauncherAppMenuItemBrowser::Execute(int event_flags) { |
40 if (browser_) { | 45 if (browser_) { |
41 if (event_flags & (ui::EF_SHIFT_DOWN | ui::EF_MIDDLE_MOUSE_BUTTON)) { | 46 if (event_flags & (ui::EF_SHIFT_DOWN | ui::EF_MIDDLE_MOUSE_BUTTON)) { |
42 TabStripModel* tab_strip = browser_->tab_strip_model(); | 47 TabStripModel* tab_strip = browser_->tab_strip_model(); |
43 tab_strip->CloseAllTabs(); | 48 tab_strip->CloseAllTabs(); |
44 } else { | 49 } else { |
| 50 #if defined(OS_CHROMEOS) |
| 51 // In ChromeOS multiprofile scenario we might need to teleport the window |
| 52 // back to the current user desktop. |
| 53 if (chrome::MultiUserWindowManager::GetMultiProfileMode() == |
| 54 chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED) { |
| 55 aura::Window* window = browser_->window()->GetNativeWindow(); |
| 56 const user_manager::UserManager* user_manager = |
| 57 user_manager::UserManager::Get(); |
| 58 const std::string& current_user = |
| 59 user_manager->GetActiveUser()->GetUserID(); |
| 60 chrome::MultiUserWindowManager* window_manager = |
| 61 chrome::MultiUserWindowManager::GetInstance(); |
| 62 if (!window_manager->IsWindowOnDesktopOfUser(window, current_user)) |
| 63 window_manager->ShowWindowForUser(window, current_user); |
| 64 } |
| 65 #endif |
45 browser_->window()->Show(); | 66 browser_->window()->Show(); |
46 ash::wm::ActivateWindow(browser_->window()->GetNativeWindow()); | 67 ash::wm::ActivateWindow(browser_->window()->GetNativeWindow()); |
47 } | 68 } |
48 } | 69 } |
49 } | 70 } |
50 | 71 |
51 void ChromeLauncherAppMenuItemBrowser::Observe( | 72 void ChromeLauncherAppMenuItemBrowser::Observe( |
52 int type, | 73 int type, |
53 const content::NotificationSource& source, | 74 const content::NotificationSource& source, |
54 const content::NotificationDetails& details) { | 75 const content::NotificationDetails& details) { |
55 switch (type) { | 76 switch (type) { |
56 case chrome::NOTIFICATION_BROWSER_CLOSING: | 77 case chrome::NOTIFICATION_BROWSER_CLOSING: |
57 DCHECK_EQ(browser_, content::Source<Browser>(source).ptr()); | 78 DCHECK_EQ(browser_, content::Source<Browser>(source).ptr()); |
58 browser_ = NULL; | 79 browser_ = NULL; |
59 break; | 80 break; |
60 | 81 |
61 default: | 82 default: |
62 NOTREACHED(); | 83 NOTREACHED(); |
63 } | 84 } |
64 } | 85 } |
OLD | NEW |