15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var targetWindow = null; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var tabCount = 0; 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function start(tab) { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.windows.getCurrent(getWindows); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getWindows(win) { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) targetWindow = win; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tabs.getAllInWindow(targetWindow.id, getTabs); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getTabs(tabs) { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabCount = tabs.length; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We require all the tab information to be populated. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.windows.getAll({"populate" : true}, moveTabs); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moveTabs(windows) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var numWindows = windows.length; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var tabPosition = tabCount; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < numWindows; i++) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var win = windows[i]; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (targetWindow.id != win.id) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var numTabs = win.tabs.length; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var j = 0; j < numTabs; j++) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var tab = win.tabs[j]; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the tab into the window that triggered the browser action. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tabs.move(tab.id, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"windowId": targetWindow.id, "index": tabPosition}); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabPosition++; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set up a click handler so that we can merge all the windows. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome.browserAction.onClicked.addListener(start); 46