1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)if (chrome.downloads.setShelfEnabled) 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome.downloads.setShelfEnabled(false); 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochvar colors = { 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch progressColor: '#0d0', 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch arrow: '#555', 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch danger: 'red', 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch complete: 'green', 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch paused: 'grey', 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch background: 'white', 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction drawLine(ctx, x1, y1, x2, y2) { 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.beginPath(); 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.moveTo(x1, y1); 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(x2, y2); 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.stroke(); 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)Math.TAU = 2 * Math.PI; // http://tauday.com/tau-manifesto 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)function drawProgressArc(ctx, startAngle, endAngle) { 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var center = ctx.canvas.width/2; 28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineWidth = Math.round(ctx.canvas.width*0.1); 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ctx.beginPath(); 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ctx.moveTo(center, center); 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ctx.arc(center, center, center * 0.9, startAngle, endAngle, false); 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ctx.fill(); 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ctx.stroke(); 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)function drawUnknownProgressSpinner(ctx) { 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var center = ctx.canvas.width/2; 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const segments = 16; 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var segArc = Math.TAU / segments; 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch for (var seg = 0; seg < segments; ++seg) { 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fillStyle = ctx.strokeStyle = ( 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ((seg % 2) == 0) ? colors.progressColor : colors.background); 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) drawProgressArc(ctx, (seg-4)*segArc, (seg-3)*segArc); 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)function drawProgressSpinner(ctx, stage) { 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ctx.fillStyle = ctx.strokeStyle = colors.progressColor; 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var clocktop = -Math.TAU/4; 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) drawProgressArc(ctx, clocktop, clocktop + (stage * Math.TAU)); 51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction drawArrow(ctx) { 54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.beginPath(); 55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineWidth = Math.round(ctx.canvas.width*0.1); 56d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineJoin = 'round'; 57d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.strokeStyle = ctx.fillStyle = colors.arrow; 58d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var center = ctx.canvas.width/2; 59d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var minw2 = center*0.2; 60d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var maxw2 = center*0.60; 61d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var height2 = maxw2; 62d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.moveTo(center-minw2, center-height2); 63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center+minw2, center-height2); 64d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center+minw2, center); 65d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center+maxw2, center); 66d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center, center+height2); 67d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center-maxw2, center); 68d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center-minw2, center); 69d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center-minw2, center-height2); 70d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(center+minw2, center-height2); 71d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.stroke(); 72d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fill(); 73d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 74d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 75d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction drawDangerBadge(ctx) { 76d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var s = ctx.canvas.width/100; 77d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fillStyle = colors.danger; 78d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.strokeStyle = colors.background; 79d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineWidth = Math.round(s*5); 80d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var edge = ctx.canvas.width-ctx.lineWidth; 81d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.beginPath(); 82d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.moveTo(s*75, s*55); 83d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(edge, edge); 84d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(s*55, edge); 85d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(s*75, s*55); 86d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineTo(edge, edge); 87d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fill(); 88d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.stroke(); 89d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 90d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 91d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction drawPausedBadge(ctx) { 92d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var s = ctx.canvas.width/100; 93d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.beginPath(); 94d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.strokeStyle = colors.background; 95d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineWidth = Math.round(s*5); 96d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.rect(s*55, s*55, s*15, s*35); 97d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fillStyle = colors.paused; 98d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fill(); 99d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.stroke(); 100d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.rect(s*75, s*55, s*15, s*35); 101d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fill(); 102d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.stroke(); 103d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 104d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 105d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction drawCompleteBadge(ctx) { 106d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var s = ctx.canvas.width/100; 107d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.beginPath(); 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ctx.arc(s*75, s*75, s*15, 0, Math.TAU, false); 109d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fillStyle = colors.complete; 110d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.fill(); 111d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.strokeStyle = colors.background; 112d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.lineWidth = Math.round(s*5); 113d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ctx.stroke(); 114d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 115d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)function drawIcon(side, options) { 117d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var canvas = document.createElement('canvas'); 118d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch canvas.width = canvas.height = side; 119d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch document.body.appendChild(canvas); 120d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var ctx = canvas.getContext('2d'); 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (options.anyInProgress) { 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (options.anyMissingTotalBytes) { 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) drawUnknownProgressSpinner(ctx); 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else { 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) drawProgressSpinner(ctx, (options.totalBytesReceived / 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.totalTotalBytes)); 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 128d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 129d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch drawArrow(ctx); 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (options.anyDangerous) { 131d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch drawDangerBadge(ctx); 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else if (options.anyPaused) { 133d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch drawPausedBadge(ctx); 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else if (options.anyRecentlyCompleted) { 135d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch drawCompleteBadge(ctx); 136d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 137d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return canvas; 138d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 139d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 140d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction maybeOpen(id) { 141d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var openWhenComplete = []; 142d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch try { 143d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch openWhenComplete = JSON.parse(localStorage.openWhenComplete); 144d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } catch (e) { 145d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch localStorage.openWhenComplete = JSON.stringify(openWhenComplete); 146d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 147d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var openNowIndex = openWhenComplete.indexOf(id); 148d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (openNowIndex >= 0) { 149d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch chrome.downloads.open(id); 150d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch openWhenComplete.splice(openNowIndex, 1); 151d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch localStorage.openWhenComplete = JSON.stringify(openWhenComplete); 152d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 153d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 154d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)function setBrowserActionIcon(options) { 1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var canvas1 = drawIcon(19, options); 1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var canvas2 = drawIcon(38, options); 158d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var imageData = {}; 159d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch imageData['' + canvas1.width] = canvas1.getContext('2d').getImageData( 160d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 0, 0, canvas1.width, canvas1.height); 161d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch imageData['' + canvas2.width] = canvas2.getContext('2d').getImageData( 162d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 0, 0, canvas2.width, canvas2.height); 163d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch chrome.browserAction.setIcon({imageData:imageData}); 164d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch canvas1.parentNode.removeChild(canvas1); 165d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch canvas2.parentNode.removeChild(canvas2); 166d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 167d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 168d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction pollProgress() { 169d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch pollProgress.tid = -1; 170d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch chrome.downloads.search({}, function(items) { 171d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var popupLastOpened = parseInt(localStorage.popupLastOpened); 1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var options = {anyMissingTotalBytes: false, 1733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) anyInProgress: false, 1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) anyRecentlyCompleted: false, 1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) anyPaused: false, 1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) anyDangerous: false, 1773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) totalBytesReceived: 0, 1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) totalTotalBytes: 0}; 179d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch items.forEach(function(item) { 180d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (item.state == 'in_progress') { 1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.anyInProgress = true; 182d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (item.totalBytes) { 1833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.totalTotalBytes += item.totalBytes; 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.totalBytesReceived += item.bytesReceived; 185d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } else { 1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.anyMissingTotalBytes = true; 187d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 188d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var dangerous = ((item.danger != 'safe') && 189d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch (item.danger != 'accepted')); 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.anyDangerous = options.anyDangerous || dangerous; 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.anyPaused = options.anyPaused || item.paused; 192d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } else if ((item.state == 'complete') && item.endTime && !item.error) { 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.anyRecentlyCompleted = ( 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.anyRecentlyCompleted || 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ((new Date(item.endTime)).getTime() >= popupLastOpened)); 196d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch maybeOpen(item.id); 197d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 198d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch }); 199d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var targetIcon = JSON.stringify(options); 201d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (sessionStorage.currentIcon != targetIcon) { 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) setBrowserActionIcon(options); 203d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch sessionStorage.currentIcon = targetIcon; 204d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 205d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (options.anyInProgress && 207d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch (pollProgress.tid < 0)) { 208d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch pollProgress.start(); 209d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 210d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch }); 211d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 212d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochpollProgress.tid = -1; 213d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochpollProgress.MS = 200; 214d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 215d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochpollProgress.start = function() { 216d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (pollProgress.tid < 0) { 217d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch pollProgress.tid = setTimeout(pollProgress, pollProgress.MS); 218d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 219d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 220d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 221d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction isNumber(n) { 222d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return !isNaN(parseFloat(n)) && isFinite(n); 223d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 224d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 225d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (!isNumber(localStorage.popupLastOpened)) { 226d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch localStorage.popupLastOpened = '' + (new Date()).getTime(); 227d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 228d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 229d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochchrome.downloads.onCreated.addListener(function(item) { 230d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch pollProgress(); 231d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}); 232d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 233d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochpollProgress(); 234d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 235d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochfunction openWhenComplete(downloadId) { 236d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch var ids = []; 237d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch try { 238d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ids = JSON.parse(localStorage.openWhenComplete); 239d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } catch (e) { 240d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch localStorage.openWhenComplete = JSON.stringify(ids); 241d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 242d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch pollProgress.start(); 243d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (ids.indexOf(downloadId) >= 0) { 244d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return; 245d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 246d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ids.push(downloadId); 247d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch localStorage.openWhenComplete = JSON.stringify(ids); 248d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 249d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 250d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochchrome.runtime.onMessage.addListener(function(request) { 251d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (request == 'poll') { 252d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch pollProgress.start(); 253d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 254d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (request == 'icons') { 255d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch [16, 19, 38, 128].forEach(function(s) { 2563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var canvas = drawIcon(s); 257d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch chrome.downloads.download({ 258d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch url: canvas.toDataURL('image/png', 1.0), 259d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch filename: 'icon' + s + '.png', 260d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch }); 261d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch canvas.parentNode.removeChild(canvas); 262d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch }); 263d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 264d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (isNumber(request.openWhenComplete)) { 265d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch openWhenComplete(request.openWhenComplete); 266d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 267d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}); 268