| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 function inspect(data) { | 5 function inspect(data) { | 
| 6   chrome.send('inspect', [data]); | 6   chrome.send('inspect', [data]); | 
| 7 } | 7 } | 
| 8 | 8 | 
| 9 function terminate(data) { | 9 function terminate(data) { | 
| 10   chrome.send('terminate', [data]); | 10   chrome.send('terminate', [data]); | 
| 11 } | 11 } | 
| 12 | 12 | 
|  | 13 function reload(data) { | 
|  | 14   chrome.send('reload', [data]); | 
|  | 15 } | 
|  | 16 | 
|  | 17 function open(browserId, url) { | 
|  | 18   chrome.send('open', [browserId, url]); | 
|  | 19 } | 
|  | 20 | 
| 13 function removeChildren(element_id) { | 21 function removeChildren(element_id) { | 
| 14   var element = $(element_id); | 22   var element = $(element_id); | 
| 15   element.textContent = ''; | 23   element.textContent = ''; | 
| 16 } | 24 } | 
| 17 | 25 | 
| 18 function onload() { | 26 function onload() { | 
| 19   var tabContents = document.querySelectorAll('#content > div'); | 27   var tabContents = document.querySelectorAll('#content > div'); | 
| 20   for (var i = 0; i != tabContents.length; i++) { | 28   for (var i = 0; i != tabContents.length; i++) { | 
| 21     var tabContent = tabContents[i]; | 29     var tabContent = tabContents[i]; | 
| 22     var tabName = tabContent.querySelector('.content-header').textContent; | 30     var tabName = tabContent.querySelector('.content-header').textContent; | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 70 } | 78 } | 
| 71 | 79 | 
| 72 function populateWorkersList(data) { | 80 function populateWorkersList(data) { | 
| 73   removeChildren('workers'); | 81   removeChildren('workers'); | 
| 74 | 82 | 
| 75   for (var i = 0; i < data.length; i++) | 83   for (var i = 0; i < data.length; i++) | 
| 76     addToWorkersList(data[i]); | 84     addToWorkersList(data[i]); | 
| 77 } | 85 } | 
| 78 | 86 | 
| 79 function populateDeviceLists(devices) { | 87 function populateDeviceLists(devices) { | 
| 80   var devicesDigest = JSON.stringify(devices); | 88   if (!devices) | 
| 81   if (!devices || devicesDigest == window.devicesDigest) |  | 
| 82     return; | 89     return; | 
| 83 | 90 | 
| 84   window.devicesDigest = devicesDigest; | 91   function alreadyDisplayed(element, data) { | 
|  | 92     var json = JSON.stringify(data); | 
|  | 93     if (element.cachedJSON == json) | 
|  | 94       return true; | 
|  | 95     element.cachedJSON = json; | 
|  | 96     return false; | 
|  | 97   } | 
| 85 | 98 | 
| 86   var containerElement = $('devices'); | 99   var deviceList = $('devices'); | 
| 87   containerElement.textContent = ''; | 100   if (alreadyDisplayed(deviceList, devices)) | 
|  | 101     return; | 
| 88 | 102 | 
| 89   // Populate with new entries | 103   function removeObsolete(validIds, section) { | 
|  | 104     if (validIds.indexOf(section.id) < 0) | 
|  | 105       section.remove(); | 
|  | 106   } | 
|  | 107 | 
|  | 108   var newDeviceIds = devices.map(function(d) { return d.adbGlobalId }); | 
|  | 109   Array.prototype.forEach.call( | 
|  | 110       deviceList.querySelectorAll('.device'), | 
|  | 111       removeObsolete.bind(null, newDeviceIds)); | 
|  | 112 | 
| 90   for (var d = 0; d < devices.length; d++) { | 113   for (var d = 0; d < devices.length; d++) { | 
| 91     var device = devices[d]; | 114     var device = devices[d]; | 
| 92 | 115 | 
| 93     var deviceHeader = document.createElement('div'); | 116     var browserList; | 
| 94     deviceHeader.className = 'section'; | 117     var deviceSection = $(device.adbGlobalId); | 
| 95     deviceHeader.textContent = device.adbModel; | 118     if (deviceSection) { | 
| 96     containerElement.appendChild(deviceHeader); | 119       browserList = deviceSection.querySelector('.browsers'); | 
|  | 120     } else { | 
|  | 121       deviceSection = document.createElement('div'); | 
|  | 122       deviceSection.id = device.adbGlobalId; | 
|  | 123       deviceSection.className = 'device list'; | 
|  | 124       deviceList.appendChild(deviceSection); | 
| 97 | 125 | 
| 98     var deviceContent = document.createElement('div'); | 126       var deviceHeader = document.createElement('div'); | 
| 99     deviceContent.className = 'list'; | 127       deviceHeader.className = 'section'; | 
| 100     containerElement.appendChild(deviceContent); | 128       deviceHeader.textContent = device.adbModel; | 
|  | 129       deviceSection.appendChild(deviceHeader); | 
|  | 130 | 
|  | 131       browserList = document.createElement('div'); | 
|  | 132       browserList.className = 'browsers'; | 
|  | 133       deviceSection.appendChild(browserList); | 
|  | 134     } | 
|  | 135 | 
|  | 136     if (alreadyDisplayed(deviceSection, device)) | 
|  | 137       continue; | 
|  | 138 | 
|  | 139     var newBrowserIds = | 
|  | 140         device.browsers.map(function(b) { return b.adbGlobalId }); | 
|  | 141     Array.prototype.forEach.call( | 
|  | 142         browserList.querySelectorAll('.browser'), | 
|  | 143         removeObsolete.bind(null, newBrowserIds)); | 
| 101 | 144 | 
| 102     for (var b = 0; b < device.browsers.length; b++) { | 145     for (var b = 0; b < device.browsers.length; b++) { | 
| 103       var browser = device.browsers[b]; | 146       var browser = device.browsers[b]; | 
| 104 | 147 | 
| 105       var browserHeader = document.createElement('div'); | 148       var pageList; | 
| 106       browserHeader.className = 'small-section'; | 149       var browserSection = $(browser.adbGlobalId); | 
| 107       browserHeader.textContent = browser.adbBrowserName; | 150       if (browserSection) { | 
| 108       deviceContent.appendChild(browserHeader); | 151         pageList = browserSection.querySelector('.pages'); | 
|  | 152         pageList.textContent = ''; | 
|  | 153       } else { | 
|  | 154         browserSection = document.createElement('div'); | 
|  | 155         browserSection.id = browser.adbGlobalId; | 
|  | 156         browserSection.className = 'browser'; | 
|  | 157         browserList.appendChild(browserSection); | 
| 109 | 158 | 
| 110       var browserPages = document.createElement('div'); | 159         var browserHeader = document.createElement('div'); | 
| 111       browserPages.className = 'list package'; | 160         browserHeader.className = 'small-section'; | 
| 112       deviceContent.appendChild(browserPages); | 161         browserHeader.textContent = browser.adbBrowserName; | 
|  | 162         browserSection.appendChild(browserHeader); | 
|  | 163 | 
|  | 164         var newPage = document.createElement('div'); | 
|  | 165         newPage.className = 'open'; | 
|  | 166 | 
|  | 167         var newPageUrl = document.createElement('input'); | 
|  | 168         newPageUrl.type = 'text'; | 
|  | 169         newPageUrl.placeholder = 'Open tab with url'; | 
|  | 170         newPage.appendChild(newPageUrl); | 
|  | 171 | 
|  | 172         var openHandler = function(browserId, input) { | 
|  | 173           open(browserId, input.value || 'about:blank'); | 
|  | 174           input.value = ''; | 
|  | 175         }.bind(null, browser.adbGlobalId, newPageUrl); | 
|  | 176         newPageUrl.addEventListener('keyup', function(handler, event) { | 
|  | 177           if (event.keyIdentifier == 'Enter' && event.target.value) | 
|  | 178             handler(); | 
|  | 179         }.bind(null, openHandler), true); | 
|  | 180 | 
|  | 181         var newPageButton = document.createElement('button'); | 
|  | 182         newPageButton.textContent = 'Open'; | 
|  | 183         newPage.appendChild(newPageButton); | 
|  | 184         newPageButton.addEventListener('click', openHandler, true); | 
|  | 185 | 
|  | 186         browserSection.appendChild(newPage); | 
|  | 187 | 
|  | 188         pageList = document.createElement('div'); | 
|  | 189         pageList.className = 'list pages'; | 
|  | 190         browserSection.appendChild(pageList); | 
|  | 191       } | 
|  | 192 | 
|  | 193       if (alreadyDisplayed(browserSection, browser)) | 
|  | 194         continue; | 
| 113 | 195 | 
| 114       for (var p = 0; p < browser.pages.length; p++) { | 196       for (var p = 0; p < browser.pages.length; p++) { | 
| 115         addTargetToList( | 197         var page = browser.pages[p]; | 
| 116             browser.pages[p], browserPages, ['faviconUrl', 'name', 'url']); | 198         var row = addTargetToList( | 
|  | 199             page, pageList, ['faviconUrl', 'name', 'url']); | 
|  | 200         row.appendChild(createActionLink( | 
|  | 201             'reload', reload.bind(null, page), page.attached)); | 
|  | 202         row.appendChild(createActionLink( | 
|  | 203             'close', terminate.bind(null, page), page.attached)); | 
| 117       } | 204       } | 
| 118     } | 205     } | 
| 119   } | 206   } | 
| 120 } | 207 } | 
| 121 | 208 | 
| 122 function addToPagesList(data) { | 209 function addToPagesList(data) { | 
| 123   addTargetToList(data, $('pages'), ['faviconUrl', 'name', 'url']); | 210   addTargetToList(data, $('pages'), ['faviconUrl', 'name', 'url']); | 
| 124 } | 211 } | 
| 125 | 212 | 
| 126 function addToExtensionsList(data) { | 213 function addToExtensionsList(data) { | 
| 127   addTargetToList(data, $('extensions'), ['name', 'url']); | 214   addTargetToList(data, $('extensions'), ['name', 'url']); | 
| 128 } | 215 } | 
| 129 | 216 | 
| 130 function addToAppsList(data) { | 217 function addToAppsList(data) { | 
| 131   addTargetToList(data, $('apps'), ['name', 'url']); | 218   addTargetToList(data, $('apps'), ['name', 'url']); | 
| 132 } | 219 } | 
| 133 | 220 | 
| 134 function addToWorkersList(data) { | 221 function addToWorkersList(data) { | 
| 135   addTargetToList(data, | 222   var row = addTargetToList(data, $('workers'), ['name', 'url', 'pid']); | 
| 136                   $('workers'), | 223   row.appendChild(createActionLink( | 
| 137                   ['name', 'url', 'pid'], | 224       'terminate', terminate.bind(null, data), data.attached)); | 
| 138                   true); |  | 
| 139 } | 225 } | 
| 140 | 226 | 
| 141 function addToOthersList(data) { | 227 function addToOthersList(data) { | 
| 142   addTargetToList(data, $('others'), ['url']); | 228   addTargetToList(data, $('others'), ['url']); | 
| 143 } | 229 } | 
| 144 | 230 | 
| 145 function formatValue(data, property) { | 231 function formatValue(data, property) { | 
| 146   var value = data[property]; | 232   var value = data[property]; | 
| 147 | 233 | 
| 148   if (property == 'faviconUrl') { | 234   if (property == 'faviconUrl') { | 
| 149     var faviconElement = document.createElement('img'); | 235     var faviconElement = document.createElement('img'); | 
| 150     if (value) | 236     if (value) | 
| 151       faviconElement.src = value; | 237       faviconElement.src = value; | 
| 152     return faviconElement; | 238     return faviconElement; | 
| 153   } | 239   } | 
| 154 | 240 | 
| 155   var text = value ? String(value) : ''; | 241   var text = value ? String(value) : ''; | 
| 156   if (text.length > 100) | 242   if (text.length > 100) | 
| 157     text = text.substring(0, 100) + '\u2026'; | 243     text = text.substring(0, 100) + '\u2026'; | 
| 158 | 244 | 
| 159   if (property == 'pid') | 245   if (property == 'pid') | 
| 160     text = 'Pid:' + text; | 246     text = 'Pid:' + text; | 
| 161 | 247 | 
| 162   var span = document.createElement('span'); | 248   var span = document.createElement('span'); | 
| 163   span.textContent = ' ' + text + ' '; | 249   span.textContent = ' ' + text + ' '; | 
| 164   span.className = property; | 250   span.className = property; | 
| 165   return span; | 251   return span; | 
| 166 } | 252 } | 
| 167 | 253 | 
| 168 function addTargetToList(data, list, properties, canTerminate) { | 254 function addTargetToList(data, list, properties) { | 
| 169   var row = document.createElement('div'); | 255   var row = document.createElement('div'); | 
| 170   row.className = 'row'; | 256   row.className = 'row'; | 
| 171   for (var j = 0; j < properties.length; j++) | 257   for (var j = 0; j < properties.length; j++) | 
| 172     row.appendChild(formatValue(data, properties[j])); | 258     row.appendChild(formatValue(data, properties[j])); | 
| 173 | 259 | 
| 174   row.appendChild(createInspectElement(data)); | 260   row.appendChild(createActionLink('inspect', inspect.bind(null, data))); | 
| 175 |  | 
| 176   if (canTerminate) |  | 
| 177     row.appendChild(createTerminateElement(data)); |  | 
| 178 | 261 | 
| 179   row.processId = data.processId; | 262   row.processId = data.processId; | 
| 180   row.routeId = data.routeId; | 263   row.routeId = data.routeId; | 
| 181 | 264 | 
| 182   list.appendChild(row); | 265   list.appendChild(row); | 
|  | 266   return row; | 
| 183 } | 267 } | 
| 184 | 268 | 
| 185 function createInspectElement(data) { | 269 function createActionLink(text, handler, opt_disabled) { | 
| 186   var link = document.createElement('a'); | 270   var link = document.createElement('a'); | 
|  | 271   if (opt_disabled) | 
|  | 272     link.classList.add('disabled'); | 
|  | 273   else | 
|  | 274     link.classList.remove('disabled'); | 
|  | 275 | 
| 187   link.setAttribute('href', '#'); | 276   link.setAttribute('href', '#'); | 
| 188   link.textContent = ' inspect '; | 277   link.textContent = text; | 
| 189   link.addEventListener( | 278   link.addEventListener('click', handler, true); | 
| 190       'click', |  | 
| 191       inspect.bind(this, data), |  | 
| 192       true); |  | 
| 193   return link; | 279   return link; | 
| 194 } | 280 } | 
| 195 | 281 | 
| 196 function createTerminateElement(data) { |  | 
| 197   var link = document.createElement('a'); |  | 
| 198   if (data.attached) |  | 
| 199     link.disabled = true; |  | 
| 200 |  | 
| 201   link.setAttribute('href', '#'); |  | 
| 202   link.textContent = ' terminate '; |  | 
| 203   link.addEventListener( |  | 
| 204       'click', |  | 
| 205       terminate.bind(this, data), |  | 
| 206       true); |  | 
| 207   return link; |  | 
| 208 } |  | 
| 209 |  | 
| 210 | 282 | 
| 211 function initPortForwarding() { | 283 function initPortForwarding() { | 
| 212   $('port-forwarding-enable').addEventListener('change', enablePortForwarding); | 284   $('port-forwarding-enable').addEventListener('change', enablePortForwarding); | 
| 213 | 285 | 
| 214   $('port-forwarding-config-open').addEventListener( | 286   $('port-forwarding-config-open').addEventListener( | 
| 215       'click', openPortForwardingConfig); | 287       'click', openPortForwardingConfig); | 
| 216   $('port-forwarding-config-close').addEventListener( | 288   $('port-forwarding-config-close').addEventListener( | 
| 217       'click', closePortForwardingConfig); | 289       'click', closePortForwardingConfig); | 
| 218   $('port-forwarding-config-done').addEventListener( | 290   $('port-forwarding-config-done').addEventListener( | 
| 219       'click', commitPortForwardingConfig); | 291       'click', commitPortForwardingConfig); | 
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 432   if (line.querySelector('.invalid')) | 504   if (line.querySelector('.invalid')) | 
| 433     return; | 505     return; | 
| 434   line.classList.remove('fresh'); | 506   line.classList.remove('fresh'); | 
| 435   var freshLine = createEmptyConfigLine(); | 507   var freshLine = createEmptyConfigLine(); | 
| 436   line.parentNode.appendChild(freshLine); | 508   line.parentNode.appendChild(freshLine); | 
| 437   if (opt_selectNew) | 509   if (opt_selectNew) | 
| 438     freshLine.querySelector('.port').focus(); | 510     freshLine.querySelector('.port').focus(); | 
| 439 } | 511 } | 
| 440 | 512 | 
| 441 document.addEventListener('DOMContentLoaded', onload); | 513 document.addEventListener('DOMContentLoaded', onload); | 
| OLD | NEW | 
|---|