OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 /** | 5 /** |
6 * @typedef {{device: string, | 6 * @typedef {{device: string, |
7 * lastUpdateTime: string, | 7 * lastUpdateTime: string, |
| 8 * opened: boolean, |
8 * separatorIndexes: !Array<number>, | 9 * separatorIndexes: !Array<number>, |
9 * timestamp: number, | 10 * timestamp: number, |
10 * tabs: !Array<!ForeignSessionTab>, | 11 * tabs: !Array<!ForeignSessionTab>, |
11 * tag: string}} | 12 * tag: string}} |
12 */ | 13 */ |
13 var ForeignDeviceInternal; | 14 var ForeignDeviceInternal; |
14 | 15 |
15 Polymer({ | 16 Polymer({ |
16 is: 'history-synced-device-manager', | 17 is: 'history-synced-device-manager', |
17 | 18 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 | 53 |
53 /** @private */ | 54 /** @private */ |
54 fetchingSyncedTabs_: { | 55 fetchingSyncedTabs_: { |
55 type: Boolean, | 56 type: Boolean, |
56 value: false, | 57 value: false, |
57 } | 58 } |
58 }, | 59 }, |
59 | 60 |
60 listeners: { | 61 listeners: { |
61 'toggle-menu': 'onToggleMenu_', | 62 'toggle-menu': 'onToggleMenu_', |
| 63 'scroll': 'onListScroll_' |
62 }, | 64 }, |
63 | 65 |
64 /** @override */ | 66 /** @override */ |
65 attached: function() { | 67 attached: function() { |
66 // Update the sign in state. | 68 // Update the sign in state. |
67 chrome.send('otherDevicesInitialized'); | 69 chrome.send('otherDevicesInitialized'); |
68 }, | 70 }, |
69 | 71 |
70 /** | 72 /** |
71 * @param {!ForeignSession} session | 73 * @param {!ForeignSession} session |
(...skipping 26 matching lines...) Expand all Loading... |
98 windowAdded = true; | 100 windowAdded = true; |
99 } | 101 } |
100 } | 102 } |
101 } | 103 } |
102 if (windowAdded && i != session.windows.length - 1) | 104 if (windowAdded && i != session.windows.length - 1) |
103 separatorIndexes.push(tabs.length - 1); | 105 separatorIndexes.push(tabs.length - 1); |
104 } | 106 } |
105 return { | 107 return { |
106 device: session.name, | 108 device: session.name, |
107 lastUpdateTime: '– ' + session.modifiedTime, | 109 lastUpdateTime: '– ' + session.modifiedTime, |
| 110 opened: true, |
108 separatorIndexes: separatorIndexes, | 111 separatorIndexes: separatorIndexes, |
109 timestamp: session.timestamp, | 112 timestamp: session.timestamp, |
110 tabs: tabs, | 113 tabs: tabs, |
111 tag: session.tag, | 114 tag: session.tag, |
112 }; | 115 }; |
113 }, | 116 }, |
114 | 117 |
115 onSignInTap_: function() { | 118 onSignInTap_: function() { |
116 chrome.send('startSignInFlow'); | 119 chrome.send('startSignInFlow'); |
117 }, | 120 }, |
118 | 121 |
| 122 onListScroll_: function() { |
| 123 var menu = this.$.menu.getIfExists(); |
| 124 if (menu) |
| 125 menu.closeMenu(); |
| 126 }, |
| 127 |
119 onToggleMenu_: function(e) { | 128 onToggleMenu_: function(e) { |
120 this.$.menu.get().then(function(menu) { | 129 this.$.menu.get().then(function(menu) { |
121 menu.toggleMenu(e.detail.target, e.detail.tag); | 130 menu.toggleMenu(e.detail.target, e.detail.tag); |
122 }); | 131 }); |
123 }, | 132 }, |
124 | 133 |
125 onOpenAllTap_: function() { | 134 onOpenAllTap_: function() { |
126 var menu = assert(this.$.menu.getIfExists()); | 135 var menu = assert(this.$.menu.getIfExists()); |
127 md_history.BrowserService.getInstance().openForeignSessionAllTabs( | 136 md_history.BrowserService.getInstance().openForeignSessionAllTabs( |
128 menu.itemData); | 137 menu.itemData); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 var updateCount = Math.min(sessionList.length, this.syncedDevices_.length); | 211 var updateCount = Math.min(sessionList.length, this.syncedDevices_.length); |
203 for (var i = 0; i < updateCount; i++) { | 212 for (var i = 0; i < updateCount; i++) { |
204 var oldDevice = this.syncedDevices_[i]; | 213 var oldDevice = this.syncedDevices_[i]; |
205 if (oldDevice.tag != sessionList[i].tag || | 214 if (oldDevice.tag != sessionList[i].tag || |
206 oldDevice.timestamp != sessionList[i].timestamp) { | 215 oldDevice.timestamp != sessionList[i].timestamp) { |
207 this.splice( | 216 this.splice( |
208 'syncedDevices_', i, 1, this.createInternalDevice_(sessionList[i])); | 217 'syncedDevices_', i, 1, this.createInternalDevice_(sessionList[i])); |
209 } | 218 } |
210 } | 219 } |
211 | 220 |
212 // Then, append any new devices. | 221 if (sessionList.length >= this.syncedDevices_.length) { |
213 for (var i = updateCount; i < sessionList.length; i++) { | 222 // The list grew; append new items. |
214 this.push('syncedDevices_', this.createInternalDevice_(sessionList[i])); | 223 for (var i = updateCount; i < sessionList.length; i++) { |
| 224 this.push('syncedDevices_', this.createInternalDevice_(sessionList[i])); |
| 225 } |
| 226 } else { |
| 227 // The list shrank; remove deleted items. |
| 228 this.splice( |
| 229 'syncedDevices_', updateCount, |
| 230 this.syncedDevices_.length - updateCount); |
215 } | 231 } |
216 }, | 232 }, |
217 | 233 |
218 /** | 234 /** |
219 * End fetching synced tabs when sync is disabled. | 235 * End fetching synced tabs when sync is disabled. |
220 */ | 236 */ |
221 tabSyncDisabled: function() { | 237 tabSyncDisabled: function() { |
222 this.fetchingSyncedTabs_ = false; | 238 this.fetchingSyncedTabs_ = false; |
223 this.clearDisplayedSyncedDevices_(); | 239 this.clearDisplayedSyncedDevices_(); |
224 }, | 240 }, |
(...skipping 20 matching lines...) Expand all Loading... |
245 // User signed in, show the loading message when querying for synced | 261 // User signed in, show the loading message when querying for synced |
246 // devices. | 262 // devices. |
247 this.fetchingSyncedTabs_ = true; | 263 this.fetchingSyncedTabs_ = true; |
248 }, | 264 }, |
249 | 265 |
250 searchTermChanged: function(searchTerm) { | 266 searchTermChanged: function(searchTerm) { |
251 this.clearDisplayedSyncedDevices_(); | 267 this.clearDisplayedSyncedDevices_(); |
252 this.updateSyncedDevices(this.sessionList); | 268 this.updateSyncedDevices(this.sessionList); |
253 } | 269 } |
254 }); | 270 }); |
OLD | NEW |