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 * opened: boolean, |
9 * separatorIndexes: !Array<number>, | 9 * separatorIndexes: !Array<number>, |
10 * timestamp: number, | 10 * timestamp: number, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 /** @private */ | 48 /** @private */ |
49 guestSession_: { | 49 guestSession_: { |
50 type: Boolean, | 50 type: Boolean, |
51 value: loadTimeData.getBoolean('isGuestSession'), | 51 value: loadTimeData.getBoolean('isGuestSession'), |
52 }, | 52 }, |
53 | 53 |
54 /** @private */ | 54 /** @private */ |
55 fetchingSyncedTabs_: { | 55 fetchingSyncedTabs_: { |
56 type: Boolean, | 56 type: Boolean, |
57 value: false, | 57 value: false, |
58 } | 58 }, |
| 59 |
| 60 hasSeenForeignData_: Boolean, |
59 }, | 61 }, |
60 | 62 |
61 listeners: { | 63 listeners: { |
62 'toggle-menu': 'onToggleMenu_', | 64 'toggle-menu': 'onToggleMenu_', |
63 'scroll': 'onListScroll_' | 65 'scroll': 'onListScroll_' |
64 }, | 66 }, |
65 | 67 |
66 /** @override */ | 68 /** @override */ |
67 attached: function() { | 69 attached: function() { |
68 // Update the sign in state. | 70 // Update the sign in state. |
69 chrome.send('otherDevicesInitialized'); | 71 chrome.send('otherDevicesInitialized'); |
| 72 md_history.BrowserService.getInstance().recordHistogram( |
| 73 SYNCED_TABS_HISTOGRAM_NAME, SyncedTabsHistogram.INITIALIZED, |
| 74 SyncedTabsHistogram.LIMIT); |
70 }, | 75 }, |
71 | 76 |
72 /** | 77 /** |
73 * @param {!ForeignSession} session | 78 * @param {!ForeignSession} session |
74 * @return {!ForeignDeviceInternal} | 79 * @return {!ForeignDeviceInternal} |
75 */ | 80 */ |
76 createInternalDevice_: function(session) { | 81 createInternalDevice_: function(session) { |
77 var tabs = []; | 82 var tabs = []; |
78 var separatorIndexes = []; | 83 var separatorIndexes = []; |
79 for (var i = 0; i < session.windows.length; i++) { | 84 for (var i = 0; i < session.windows.length; i++) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 126 |
122 onListScroll_: function() { | 127 onListScroll_: function() { |
123 var menu = this.$.menu.getIfExists(); | 128 var menu = this.$.menu.getIfExists(); |
124 if (menu) | 129 if (menu) |
125 menu.closeMenu(); | 130 menu.closeMenu(); |
126 }, | 131 }, |
127 | 132 |
128 onToggleMenu_: function(e) { | 133 onToggleMenu_: function(e) { |
129 this.$.menu.get().then(function(menu) { | 134 this.$.menu.get().then(function(menu) { |
130 menu.toggleMenu(e.detail.target, e.detail.tag); | 135 menu.toggleMenu(e.detail.target, e.detail.tag); |
| 136 if (menu.menuOpen) { |
| 137 md_history.BrowserService.getInstance().recordHistogram( |
| 138 SYNCED_TABS_HISTOGRAM_NAME, SyncedTabsHistogram.SHOW_SESSION_MENU, |
| 139 SyncedTabsHistogram.LIMIT); |
| 140 } |
131 }); | 141 }); |
132 }, | 142 }, |
133 | 143 |
134 onOpenAllTap_: function() { | 144 onOpenAllTap_: function() { |
135 var menu = assert(this.$.menu.getIfExists()); | 145 var menu = assert(this.$.menu.getIfExists()); |
136 md_history.BrowserService.getInstance().openForeignSessionAllTabs( | 146 var browserService = md_history.BrowserService.getInstance(); |
| 147 browserService.recordHistogram( |
| 148 SYNCED_TABS_HISTOGRAM_NAME, SyncedTabsHistogram.OPEN_ALL, |
| 149 SyncedTabsHistogram.LIMIT); |
| 150 browserService.openForeignSessionAllTabs( |
137 menu.itemData); | 151 menu.itemData); |
138 menu.closeMenu(); | 152 menu.closeMenu(); |
139 }, | 153 }, |
140 | 154 |
141 onDeleteSessionTap_: function() { | 155 onDeleteSessionTap_: function() { |
142 var menu = assert(this.$.menu.getIfExists()); | 156 var menu = assert(this.$.menu.getIfExists()); |
143 md_history.BrowserService.getInstance().deleteForeignSession( | 157 var browserService = md_history.BrowserService.getInstance(); |
144 menu.itemData); | 158 browserService.recordHistogram( |
| 159 SYNCED_TABS_HISTOGRAM_NAME, SyncedTabsHistogram.HIDE_FOR_NOW, |
| 160 SyncedTabsHistogram.LIMIT); |
| 161 browserService.deleteForeignSession(menu.itemData); |
145 menu.closeMenu(); | 162 menu.closeMenu(); |
146 }, | 163 }, |
147 | 164 |
148 /** @private */ | 165 /** @private */ |
149 clearDisplayedSyncedDevices_: function() { | 166 clearDisplayedSyncedDevices_: function() { |
150 this.syncedDevices_ = []; | 167 this.syncedDevices_ = []; |
151 }, | 168 }, |
152 | 169 |
153 /** | 170 /** |
154 * Decide whether or not should display no synced tabs message. | 171 * Decide whether or not should display no synced tabs message. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 * about updating individual tabs rather than replacing whole sessions, but | 217 * about updating individual tabs rather than replacing whole sessions, but |
201 * this approach seems to have acceptable performance. | 218 * this approach seems to have acceptable performance. |
202 * @param {?Array<!ForeignSession>} sessionList | 219 * @param {?Array<!ForeignSession>} sessionList |
203 */ | 220 */ |
204 updateSyncedDevices: function(sessionList) { | 221 updateSyncedDevices: function(sessionList) { |
205 this.fetchingSyncedTabs_ = false; | 222 this.fetchingSyncedTabs_ = false; |
206 | 223 |
207 if (!sessionList) | 224 if (!sessionList) |
208 return; | 225 return; |
209 | 226 |
| 227 if (sessionList.length > 0 && !this.hasSeenForeignData_) { |
| 228 this.hasSeenForeignData_ = true; |
| 229 md_history.BrowserService.getInstance().recordHistogram( |
| 230 SYNCED_TABS_HISTOGRAM_NAME, SyncedTabsHistogram.HAS_FOREIGN_DATA, |
| 231 SyncedTabsHistogram.LIMIT); |
| 232 } |
| 233 |
210 // First, update any existing devices that have changed. | 234 // First, update any existing devices that have changed. |
211 var updateCount = Math.min(sessionList.length, this.syncedDevices_.length); | 235 var updateCount = Math.min(sessionList.length, this.syncedDevices_.length); |
212 for (var i = 0; i < updateCount; i++) { | 236 for (var i = 0; i < updateCount; i++) { |
213 var oldDevice = this.syncedDevices_[i]; | 237 var oldDevice = this.syncedDevices_[i]; |
214 if (oldDevice.tag != sessionList[i].tag || | 238 if (oldDevice.tag != sessionList[i].tag || |
215 oldDevice.timestamp != sessionList[i].timestamp) { | 239 oldDevice.timestamp != sessionList[i].timestamp) { |
216 this.splice( | 240 this.splice( |
217 'syncedDevices_', i, 1, this.createInternalDevice_(sessionList[i])); | 241 'syncedDevices_', i, 1, this.createInternalDevice_(sessionList[i])); |
218 } | 242 } |
219 } | 243 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 // User signed in, show the loading message when querying for synced | 279 // User signed in, show the loading message when querying for synced |
256 // devices. | 280 // devices. |
257 this.fetchingSyncedTabs_ = true; | 281 this.fetchingSyncedTabs_ = true; |
258 }, | 282 }, |
259 | 283 |
260 searchTermChanged: function(searchTerm) { | 284 searchTermChanged: function(searchTerm) { |
261 this.clearDisplayedSyncedDevices_(); | 285 this.clearDisplayedSyncedDevices_(); |
262 this.updateSyncedDevices(this.sessionList); | 286 this.updateSyncedDevices(this.sessionList); |
263 } | 287 } |
264 }); | 288 }); |
OLD | NEW |