14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)'use strict'; 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/** 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Event of the ProgressCenter class. 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @enum {string} 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @const 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)var ProgressCenterEvent = Object.freeze({ 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Background page notifies item update to application windows. 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ITEM_UPDATED: 'itemUpdated', 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Background page notifies all the items are cleared. 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RESET: 'reset' 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}); 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/** 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * State of progress items. 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @enum {string} 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @const 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)var ProgressItemState = Object.freeze({ 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PROGRESSING: 'progressing', 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) COMPLETED: 'completed', 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ERROR: 'error', 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CANCELED: 'canceled' 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}); 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/** 370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * Type of progress items. 380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @enum {string} 390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @const 400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) */ 410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)var ProgressItemType = Object.freeze({ 420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // The item is file copy operation. 430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) COPY: 'copy', 440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // The item is file move operation. 450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) MOVE: 'move', 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The item is file delete operation. 470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DELETE: 'delete', 480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // The item is file zip operation. 490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ZIP: 'zip', 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The item is drive sync operation. 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SYNC: 'sync', 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // The item is general file transfer operation. 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // This is used for the mixed operation of summarized item. 540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) TRANSFER: 'transfer' 550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}); 560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)/** 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Item of the progress center. 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @constructor 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)var ProgressCenterItem = function() { 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Item ID. 648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) * @type {string} 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @private 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.id_ = null; 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * State of the progress item. 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @type {ProgressItemState} 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.state = ProgressItemState.PROGRESSING; 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Message of the progress item. 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @type {string} 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.message = ''; 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Max value of the progress. 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @type {number} 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.progressMax = 0; 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Current value of the progress. 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @type {number} 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.progressValue = 0; 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * Type of progress item. 950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @type {ProgressItemType} 960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) */ 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) this.type = null; 980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) /** 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Whether the item represents a single item or not. 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @type {boolean} 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.single = true; 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * If the property is true, only the message of item shown in the progress 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * center and the notification of the item is created as priority = -1. 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @type {boolean} 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.quiet = false; 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Callback function to cancel the item. 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @type {function()} 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.cancelCallback = null; 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This object is instantiated many time. Object.seal use more memory 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // than Object.preventExtensions (crbug.com/412307) 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Object.preventExtensions(this); 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)ProgressCenterItem.prototype = { 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Setter of Item ID. 1268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) * @param {string} value New value of ID. 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) set id(value) { 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!this.id_) 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.id_ = value; 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) else 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) console.error('The ID is already set. (current ID: ' + this.id_ + ')'); 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Getter of Item ID. 1378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) * @return {string} Item ID. 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) get id() { 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return this.id_; 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Gets progress rate in percent. 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * If the current state is canceled or completed, it always returns 0 or 100 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * respectively. 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @return {number} Progress rate in percent. 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) get progressRateInPercent() { 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (this.state) { 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ProgressItemState.CANCELED: return 0; 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ProgressItemState.COMPLETED: return 100; 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) default: return ~~(100 * this.progressValue / this.progressMax); 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Whether the item can be canceled or not. 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @return {boolean} True if the item can be canceled. 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) get cancelable() { 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return !!(this.state == ProgressItemState.PROGRESSING && 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) this.cancelCallback && 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.single); 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Clones the item. 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @return {ProgressCenterItem} New item having the same properties with this. 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ProgressCenterItem.prototype.clone = function() { 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var newItem = new ProgressCenterItem(); 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.id = this.id; 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.state = this.state; 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.message = this.message; 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.progressMax = this.progressMax; 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.progressValue = this.progressValue; 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.type = this.type; 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.single = this.single; 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.quiet = this.quiet; 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) newItem.cancelCallback = this.cancelCallback; 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return newItem; 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 187