| Index: chrome/browser/resources/new_new_tab.js
|
| ===================================================================
|
| --- chrome/browser/resources/new_new_tab.js (revision 63054)
|
| +++ chrome/browser/resources/new_new_tab.js (working copy)
|
| @@ -112,6 +112,77 @@
|
| }
|
| }
|
|
|
| +var sessionItems = [];
|
| +
|
| +function foreignSessions(data) {
|
| + logEvent('received foreign sessions');
|
| + // We need to store the foreign sessions so we can update the layout on a
|
| + // resize.
|
| + sessionItems = data;
|
| + renderForeignSessions();
|
| + layoutSections();
|
| +}
|
| +
|
| +function renderForeignSessions() {
|
| + // Remove all existing items and create new items.
|
| + var sessionElement = $('foreign-sessions');
|
| + var parentSessionElement = sessionElement.lastElementChild;
|
| + parentSessionElement.textContent = '';
|
| +
|
| + // For each client, create entries and append the lists together.
|
| + sessionItems.forEach(function(item, i) {
|
| + // TODO(zea): Get real client names. See issue 59672
|
| + var name = 'Client ' + i;
|
| + parentSessionElement.appendChild(createForeignSession(item, name));
|
| + });
|
| +
|
| + layoutForeignSessions();
|
| +}
|
| +
|
| +function layoutForeignSessions() {
|
| + var sessionElement = $('foreign-sessions');
|
| + // We cannot use clientWidth here since the width has a transition.
|
| + var availWidth = useSmallGrid() ? 692 : 920;
|
| + var parentSessEl = sessionElement.lastElementChild;
|
| +
|
| + if (parentSessEl.hasChildNodes()) {
|
| + sessionElement.classList.remove('disabled');
|
| + } else {
|
| + sessionElement.classList.add('disabled');
|
| + }
|
| +}
|
| +
|
| +function createForeignSession(client, name) {
|
| + // Vertically stack the windows in a client.
|
| + var stack = document.createElement('div');
|
| + stack.className = 'foreign-session-client';
|
| + stack.textContent = name;
|
| +
|
| + client.forEach(function(win) {
|
| + // We know these are lists of multiple tabs, don't need the special case for
|
| + // single url + favicon.
|
| + var el = document.createElement('p');
|
| + el.className = 'item link window';
|
| + el.tabItems = win.tabs;
|
| + el.tabIndex = 0;
|
| + el.textContent = formatTabsText(win.tabs.length);
|
| +
|
| + el.sessionId = win.sessionId;
|
| + el.xtitle = win.title;
|
| + el.sessionTag = win.sessionTag;
|
| +
|
| + // Add the actual tab listing.
|
| + stack.appendChild(el);
|
| +
|
| + // TODO(zea): Should there be a clickHandler as well? We appear to be
|
| + // breaking windowTooltip's hide: removeEventListener(onMouseOver) when we
|
| + // click.
|
| + });
|
| + return stack;
|
| +}
|
| +
|
| +var recentItems = [];
|
| +
|
| function recentlyClosedTabs(data) {
|
| logEvent('received recently closed tabs');
|
| // We need to store the recent items so we can update the layout on a resize.
|
| @@ -120,8 +191,6 @@
|
| layoutSections();
|
| }
|
|
|
| -var recentItems = [];
|
| -
|
| function renderRecentlyClosed() {
|
| // Remove all existing items and create new items.
|
| var recentElement = $('recently-closed');
|
| @@ -158,6 +227,7 @@
|
| }
|
| el.sessionId = data.sessionId;
|
| el.xtitle = data.title;
|
| + el.sessionTag = data.sessionTag;
|
| var wrapperEl = document.createElement('span');
|
| wrapperEl.appendChild(el);
|
| return wrapperEl;
|
| @@ -208,6 +278,7 @@
|
| mostVisited.useSmallGrid = b;
|
| mostVisited.layout();
|
| renderRecentlyClosed();
|
| + renderForeignSessions();
|
| updateAllMiniviewClippings();
|
| }
|
|
|
| @@ -845,15 +916,30 @@
|
| chrome.send('reopenTab', [String(el.sessionId)]);
|
| e.preventDefault();
|
|
|
| - // HACK(arv): After the window onblur event happens we get a mouseover event
|
| - // on the next item and we want to make sure that we do not show a tooltip
|
| - // for that.
|
| - window.setTimeout(function() {
|
| - windowTooltip.hide();
|
| - }, 2 * WindowTooltip.DELAY);
|
| + setWindowTooltipTimeout();
|
| }
|
| }
|
|
|
| +function maybeReopenSession(e) {
|
| + var el = findAncestor(e.target, function(el) {
|
| + return el.sessionId;
|
| + });
|
| + if (el) {
|
| + chrome.send('reopenForeignSession', [String(el.sessionTag)]);
|
| +
|
| + setWindowTooltipTimeout();
|
| + }
|
| +}
|
| +
|
| +// HACK(arv): After the window onblur event happens we get a mouseover event
|
| +// on the next item and we want to make sure that we do not show a tooltip
|
| +// for that.
|
| +function setWindowTooltipTimeout(e) {
|
| + window.setTimeout(function() {
|
| + windowTooltip.hide();
|
| + }, 2 * WindowTooltip.DELAY);
|
| +}
|
| +
|
| function maybeShowWindowTooltip(e) {
|
| var f = function(el) {
|
| return el.tabItems !== undefined;
|
| @@ -875,6 +961,15 @@
|
| recentlyClosedElement.addEventListener('mouseover', maybeShowWindowTooltip);
|
| recentlyClosedElement.addEventListener('focus', maybeShowWindowTooltip, true);
|
|
|
| +var foreignSessionElement = $('foreign-sessions');
|
| +
|
| +foreignSessionElement.addEventListener('click', maybeReopenSession);
|
| +foreignSessionElement.addEventListener('keydown',
|
| + handleIfEnterKey(maybeReopenSession));
|
| +
|
| +foreignSessionElement.addEventListener('mouseover', maybeShowWindowTooltip);
|
| +foreignSessionElement.addEventListener('focus', maybeShowWindowTooltip, true);
|
| +
|
| /**
|
| * This object represents a tooltip representing a closed window. It is
|
| * shown when hovering over a closed window item or when the item is focused. It
|
|
|