| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controll
er.h" | 5 #include "chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controll
er.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "ash/shelf/shelf.h" | 9 #include "ash/shelf/shelf.h" |
| 10 #include "ash/shelf/shelf_model.h" | 10 #include "ash/shelf/shelf_model.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 browser->tab_strip_model()->GetActiveWebContents(); | 96 browser->tab_strip_model()->GetActiveWebContents(); |
| 97 if (contents && | 97 if (contents && |
| 98 (launcher_controller()->GetShelfIDForWebContents(contents) != | 98 (launcher_controller()->GetShelfIDForWebContents(contents) != |
| 99 browser_item.id)) | 99 browser_item.id)) |
| 100 browser_status = ash::STATUS_RUNNING; | 100 browser_status = ash::STATUS_RUNNING; |
| 101 } | 101 } |
| 102 } | 102 } |
| 103 | 103 |
| 104 if (browser_status == ash::STATUS_CLOSED) { | 104 if (browser_status == ash::STATUS_CLOSED) { |
| 105 const BrowserList* ash_browser_list = | 105 const BrowserList* ash_browser_list = |
| 106 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); | 106 BrowserList::GetInstance(ui::HOST_DESKTOP_TYPE_ASH); |
| 107 for (BrowserList::const_reverse_iterator it = | 107 for (BrowserList::const_reverse_iterator it = |
| 108 ash_browser_list->begin_last_active(); | 108 ash_browser_list->begin_last_active(); |
| 109 it != ash_browser_list->end_last_active() && | 109 it != ash_browser_list->end_last_active() && |
| 110 browser_status == ash::STATUS_CLOSED; ++it) { | 110 browser_status == ash::STATUS_CLOSED; ++it) { |
| 111 if (IsBrowserRepresentedInBrowserList(*it)) | 111 if (IsBrowserRepresentedInBrowserList(*it)) |
| 112 browser_status = ash::STATUS_RUNNING; | 112 browser_status = ash::STATUS_RUNNING; |
| 113 } | 113 } |
| 114 } | 114 } |
| 115 | 115 |
| 116 if (browser_status != browser_item.status) { | 116 if (browser_status != browser_item.status) { |
| 117 browser_item.status = browser_status; | 117 browser_item.status = browser_status; |
| 118 model->Set(browser_index, browser_item); | 118 model->Set(browser_index, browser_item); |
| 119 } | 119 } |
| 120 } | 120 } |
| 121 | 121 |
| 122 void BrowserShortcutLauncherItemController::SetShelfIDForBrowserWindowContents( | 122 void BrowserShortcutLauncherItemController::SetShelfIDForBrowserWindowContents( |
| 123 Browser* browser, | 123 Browser* browser, |
| 124 content::WebContents* web_contents) { | 124 content::WebContents* web_contents) { |
| 125 // We need to call SetShelfIDForWindow for V1 applications since they are | 125 // We need to call SetShelfIDForWindow for V1 applications since they are |
| 126 // content which might change and as such change the application type. | 126 // content which might change and as such change the application type. |
| 127 if (!browser || | 127 if (!browser || !launcher_controller()->IsBrowserFromActiveUser(browser) || |
| 128 !launcher_controller()->IsBrowserFromActiveUser(browser) || | 128 browser->host_desktop_type() != ui::HOST_DESKTOP_TYPE_ASH || |
| 129 browser->host_desktop_type() != chrome::HOST_DESKTOP_TYPE_ASH || | |
| 130 IsSettingsBrowser(browser)) | 129 IsSettingsBrowser(browser)) |
| 131 return; | 130 return; |
| 132 | 131 |
| 133 ash::SetShelfIDForWindow( | 132 ash::SetShelfIDForWindow( |
| 134 launcher_controller()->GetShelfIDForWebContents(web_contents), | 133 launcher_controller()->GetShelfIDForWebContents(web_contents), |
| 135 browser->window()->GetNativeWindow()); | 134 browser->window()->GetNativeWindow()); |
| 136 } | 135 } |
| 137 | 136 |
| 138 bool BrowserShortcutLauncherItemController::IsOpen() const { | 137 bool BrowserShortcutLauncherItemController::IsOpen() const { |
| 139 const BrowserList* ash_browser_list = | 138 const BrowserList* ash_browser_list = |
| 140 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); | 139 BrowserList::GetInstance(ui::HOST_DESKTOP_TYPE_ASH); |
| 141 for (BrowserList::const_iterator it = ash_browser_list->begin(); | 140 for (BrowserList::const_iterator it = ash_browser_list->begin(); |
| 142 it != ash_browser_list->end(); ++it) { | 141 it != ash_browser_list->end(); ++it) { |
| 143 if (launcher_controller()->IsBrowserFromActiveUser(*it)) | 142 if (launcher_controller()->IsBrowserFromActiveUser(*it)) |
| 144 return true; | 143 return true; |
| 145 } | 144 } |
| 146 return false; | 145 return false; |
| 147 } | 146 } |
| 148 | 147 |
| 149 bool BrowserShortcutLauncherItemController::IsVisible() const { | 148 bool BrowserShortcutLauncherItemController::IsVisible() const { |
| 150 Browser* last_browser = chrome::FindTabbedBrowser( | 149 Browser* last_browser = chrome::FindTabbedBrowser( |
| 151 launcher_controller()->profile(), | 150 launcher_controller()->profile(), true, ui::HOST_DESKTOP_TYPE_ASH); |
| 152 true, | |
| 153 chrome::HOST_DESKTOP_TYPE_ASH); | |
| 154 | 151 |
| 155 if (!last_browser) { | 152 if (!last_browser) { |
| 156 return false; | 153 return false; |
| 157 } | 154 } |
| 158 | 155 |
| 159 aura::Window* window = last_browser->window()->GetNativeWindow(); | 156 aura::Window* window = last_browser->window()->GetNativeWindow(); |
| 160 return ash::wm::IsActiveWindow(window); | 157 return ash::wm::IsActiveWindow(window); |
| 161 } | 158 } |
| 162 | 159 |
| 163 void BrowserShortcutLauncherItemController::Launch(ash::LaunchSource source, | 160 void BrowserShortcutLauncherItemController::Launch(ash::LaunchSource source, |
| 164 int event_flags) { | 161 int event_flags) { |
| 165 } | 162 } |
| 166 | 163 |
| 167 ash::ShelfItemDelegate::PerformedAction | 164 ash::ShelfItemDelegate::PerformedAction |
| 168 BrowserShortcutLauncherItemController::Activate(ash::LaunchSource source) { | 165 BrowserShortcutLauncherItemController::Activate(ash::LaunchSource source) { |
| 169 Browser* last_browser = chrome::FindTabbedBrowser( | 166 Browser* last_browser = chrome::FindTabbedBrowser( |
| 170 launcher_controller()->profile(), | 167 launcher_controller()->profile(), true, ui::HOST_DESKTOP_TYPE_ASH); |
| 171 true, | |
| 172 chrome::HOST_DESKTOP_TYPE_ASH); | |
| 173 | 168 |
| 174 if (!last_browser) { | 169 if (!last_browser) { |
| 175 launcher_controller()->CreateNewWindow(); | 170 launcher_controller()->CreateNewWindow(); |
| 176 return kNewWindowCreated; | 171 return kNewWindowCreated; |
| 177 } | 172 } |
| 178 | 173 |
| 179 return launcher_controller()->ActivateWindowOrMinimizeIfActive( | 174 return launcher_controller()->ActivateWindowOrMinimizeIfActive( |
| 180 last_browser->window(), GetApplicationList(0).size() == 2); | 175 last_browser->window(), GetApplicationList(0).size() == 2); |
| 181 } | 176 } |
| 182 | 177 |
| 183 void BrowserShortcutLauncherItemController::Close() { | 178 void BrowserShortcutLauncherItemController::Close() { |
| 184 } | 179 } |
| 185 | 180 |
| 186 ChromeLauncherAppMenuItems | 181 ChromeLauncherAppMenuItems |
| 187 BrowserShortcutLauncherItemController::GetApplicationList(int event_flags) { | 182 BrowserShortcutLauncherItemController::GetApplicationList(int event_flags) { |
| 188 ChromeLauncherAppMenuItems items; | 183 ChromeLauncherAppMenuItems items; |
| 189 bool found_tabbed_browser = false; | 184 bool found_tabbed_browser = false; |
| 190 // Add the application name to the menu. | 185 // Add the application name to the menu. |
| 191 items.push_back(new ChromeLauncherAppMenuItem(GetTitle(), NULL, false)); | 186 items.push_back(new ChromeLauncherAppMenuItem(GetTitle(), NULL, false)); |
| 192 const BrowserList* ash_browser_list = | 187 const BrowserList* ash_browser_list = |
| 193 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); | 188 BrowserList::GetInstance(ui::HOST_DESKTOP_TYPE_ASH); |
| 194 for (BrowserList::const_iterator it = ash_browser_list->begin(); | 189 for (BrowserList::const_iterator it = ash_browser_list->begin(); |
| 195 it != ash_browser_list->end(); ++it) { | 190 it != ash_browser_list->end(); ++it) { |
| 196 Browser* browser = *it; | 191 Browser* browser = *it; |
| 197 // Make sure that the browser is from the current user, has a proper window, | 192 // Make sure that the browser is from the current user, has a proper window, |
| 198 // and the window was already shown. | 193 // and the window was already shown. |
| 199 if (!launcher_controller()->IsBrowserFromActiveUser(browser)) | 194 if (!launcher_controller()->IsBrowserFromActiveUser(browser)) |
| 200 continue; | 195 continue; |
| 201 if (!(browser->window() && browser->window()->GetNativeWindow())) | 196 if (!(browser->window() && browser->window()->GetNativeWindow())) |
| 202 continue; | 197 continue; |
| 203 if (!(browser->window()->GetNativeWindow()->IsVisible() || | 198 if (!(browser->window()->GetNativeWindow()->IsVisible() || |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 return profile->IsOffTheRecord() && !profile->IsGuestSession(); | 298 return profile->IsOffTheRecord() && !profile->IsGuestSession(); |
| 304 } | 299 } |
| 305 | 300 |
| 306 ash::ShelfItemDelegate::PerformedAction | 301 ash::ShelfItemDelegate::PerformedAction |
| 307 BrowserShortcutLauncherItemController::ActivateOrAdvanceToNextBrowser() { | 302 BrowserShortcutLauncherItemController::ActivateOrAdvanceToNextBrowser() { |
| 308 // Create a list of all suitable running browsers. | 303 // Create a list of all suitable running browsers. |
| 309 std::vector<Browser*> items; | 304 std::vector<Browser*> items; |
| 310 // We use the list in the order of how the browsers got created - not the LRU | 305 // We use the list in the order of how the browsers got created - not the LRU |
| 311 // order. | 306 // order. |
| 312 const BrowserList* ash_browser_list = | 307 const BrowserList* ash_browser_list = |
| 313 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); | 308 BrowserList::GetInstance(ui::HOST_DESKTOP_TYPE_ASH); |
| 314 for (BrowserList::const_iterator it = | 309 for (BrowserList::const_iterator it = |
| 315 ash_browser_list->begin(); | 310 ash_browser_list->begin(); |
| 316 it != ash_browser_list->end(); ++it) { | 311 it != ash_browser_list->end(); ++it) { |
| 317 if (IsBrowserRepresentedInBrowserList(*it)) | 312 if (IsBrowserRepresentedInBrowserList(*it)) |
| 318 items.push_back(*it); | 313 items.push_back(*it); |
| 319 } | 314 } |
| 320 // If there are no suitable browsers we create a new one. | 315 // If there are no suitable browsers we create a new one. |
| 321 if (items.empty()) { | 316 if (items.empty()) { |
| 322 launcher_controller()->CreateNewWindow(); | 317 launcher_controller()->CreateNewWindow(); |
| 323 return kNewWindowCreated; | 318 return kNewWindowCreated; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 335 } else { | 330 } else { |
| 336 // If there is more then one suitable browser, we advance to the next if | 331 // If there is more then one suitable browser, we advance to the next if |
| 337 // |browser| is already active - or - check the last used browser if it can | 332 // |browser| is already active - or - check the last used browser if it can |
| 338 // be used. | 333 // be used. |
| 339 std::vector<Browser*>::iterator i = | 334 std::vector<Browser*>::iterator i = |
| 340 std::find(items.begin(), items.end(), browser); | 335 std::find(items.begin(), items.end(), browser); |
| 341 if (i != items.end()) { | 336 if (i != items.end()) { |
| 342 browser = (++i == items.end()) ? items[0] : *i; | 337 browser = (++i == items.end()) ? items[0] : *i; |
| 343 } else { | 338 } else { |
| 344 browser = chrome::FindTabbedBrowser(launcher_controller()->profile(), | 339 browser = chrome::FindTabbedBrowser(launcher_controller()->profile(), |
| 345 true, | 340 true, ui::HOST_DESKTOP_TYPE_ASH); |
| 346 chrome::HOST_DESKTOP_TYPE_ASH); | |
| 347 if (!browser || | 341 if (!browser || |
| 348 !IsBrowserRepresentedInBrowserList(browser)) | 342 !IsBrowserRepresentedInBrowserList(browser)) |
| 349 browser = items[0]; | 343 browser = items[0]; |
| 350 } | 344 } |
| 351 } | 345 } |
| 352 DCHECK(browser); | 346 DCHECK(browser); |
| 353 browser->window()->Show(); | 347 browser->window()->Show(); |
| 354 browser->window()->Activate(); | 348 browser->window()->Activate(); |
| 355 return kExistingWindowActivated; | 349 return kExistingWindowActivated; |
| 356 } | 350 } |
| 357 | 351 |
| 358 bool BrowserShortcutLauncherItemController::IsBrowserRepresentedInBrowserList( | 352 bool BrowserShortcutLauncherItemController::IsBrowserRepresentedInBrowserList( |
| 359 Browser* browser) { | 353 Browser* browser) { |
| 360 // Only Ash desktop browser windows for the active user are represented. | 354 // Only Ash desktop browser windows for the active user are represented. |
| 361 if (!browser || | 355 if (!browser || !launcher_controller()->IsBrowserFromActiveUser(browser) || |
| 362 !launcher_controller()->IsBrowserFromActiveUser(browser) || | 356 browser->host_desktop_type() != ui::HOST_DESKTOP_TYPE_ASH) |
| 363 browser->host_desktop_type() != chrome::HOST_DESKTOP_TYPE_ASH) | |
| 364 return false; | 357 return false; |
| 365 | 358 |
| 366 // v1 App popup windows with a valid app id have their own icon. | 359 // v1 App popup windows with a valid app id have their own icon. |
| 367 if (browser->is_app() && | 360 if (browser->is_app() && |
| 368 browser->is_type_popup() && | 361 browser->is_type_popup() && |
| 369 launcher_controller()->GetShelfIDForAppID( | 362 launcher_controller()->GetShelfIDForAppID( |
| 370 web_app::GetExtensionIdFromApplicationName(browser->app_name())) > 0) | 363 web_app::GetExtensionIdFromApplicationName(browser->app_name())) > 0) |
| 371 return false; | 364 return false; |
| 372 | 365 |
| 373 // Settings browsers have their own icon. | 366 // Settings browsers have their own icon. |
| 374 if (IsSettingsBrowser(browser)) | 367 if (IsSettingsBrowser(browser)) |
| 375 return false; | 368 return false; |
| 376 | 369 |
| 377 // Tabbed browser and other popup windows are all represented. | 370 // Tabbed browser and other popup windows are all represented. |
| 378 return true; | 371 return true; |
| 379 } | 372 } |
| OLD | NEW |