| Index: chrome/browser/ui/browser_list.cc
|
| diff --git a/chrome/browser/ui/browser_list.cc b/chrome/browser/ui/browser_list.cc
|
| index 5516e79a2d661b03360ed12af48582c656e1ed4b..26fc7a2eb564bbf189b7ee425bbf8deec8c6a7b6 100644
|
| --- a/chrome/browser/ui/browser_list.cc
|
| +++ b/chrome/browser/ui/browser_list.cc
|
| @@ -186,6 +186,36 @@ void BrowserList::PostBeforeUnloadHandlers(
|
| }
|
|
|
| // static
|
| +void BrowserList::MoveBrowsersInWorkspaceToFront(
|
| + const std::string& new_workspace) {
|
| + DCHECK(!new_workspace.empty());
|
| +
|
| + BrowserList* instance = GetInstance();
|
| +
|
| + Browser* old_last_active = instance->GetLastActive();
|
| + BrowserVector& last_active_browsers = instance->last_active_browsers_;
|
| +
|
| + // Perform a stable partition on the browsers in the list so that the browsers
|
| + // in the new workspace appear after the browsers in the other workspaces.
|
| + //
|
| + // For example, if we have a list of browser-workspace pairs
|
| + // [{b1, 0}, {b2, 1}, {b3, 0}, {b4, 1}]
|
| + // and we switch to workspace 1, we want the resulting browser list to look
|
| + // like [{b1, 0}, {b3, 0}, {b2, 1}, {b4, 1}].
|
| + std::stable_partition(
|
| + last_active_browsers.begin(), last_active_browsers.end(),
|
| + [&new_workspace](Browser* browser) {
|
| + return browser->window()->GetWorkspace() != new_workspace;
|
| + });
|
| +
|
| + Browser* new_last_active = instance->GetLastActive();
|
| + if (old_last_active != new_last_active) {
|
| + FOR_EACH_OBSERVER(chrome::BrowserListObserver, observers_.Get(),
|
| + OnBrowserSetLastActive(new_last_active));
|
| + }
|
| +}
|
| +
|
| +// static
|
| void BrowserList::SetLastActive(Browser* browser) {
|
| content::RecordAction(UserMetricsAction("ActiveBrowserChanged"));
|
|
|
|
|