Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1674)

Unified Diff: chrome/browser/resources/md_downloads/item_view.js

Issue 1224623013: Port downloads.ItemView to a Polymer component. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@p-dl-rough-draft2
Patch Set: merge Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/md_downloads/item_view.js
diff --git a/chrome/browser/resources/md_downloads/item_view.js b/chrome/browser/resources/md_downloads/item_view.js
new file mode 100644
index 0000000000000000000000000000000000000000..d0b74903724d0ddd9808fec8c8941d2713b29832
--- /dev/null
+++ b/chrome/browser/resources/md_downloads/item_view.js
@@ -0,0 +1,250 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+cr.define('downloads', function() {
+ var ItemView = Polymer({
+ is: 'item-view',
+
+ /** @param {!downloads.ThrottledIconLoader} iconLoader */
+ factoryImpl: function(iconLoader) {
+ /** @private {!downloads.ThrottledIconLoader} */
+ this.iconLoader_ = iconLoader;
+ },
+
+ properties: {
+ hideDate: {type: Boolean, value: false},
+ isDangerous: {type: Boolean, value: false},
+ // Only use |isMalware| if |isDangerous| is true.
+ isMalware: Boolean,
+ },
+
+ ready: function() {
+ this.$.safe.ondragstart = this.onSafeDragstart_.bind(this);
+ this.$['file-link'].onclick = this.onFileLinkClick_.bind(this);
+ this.$.show.onclick = this.onShowClick_.bind(this);
+ this.$.pause.onclick = this.onPauseClick_.bind(this);
+ this.$.resume.onclick = this.onResumeClick_.bind(this);
+ this.$['safe-remove'].onclick = this.onSafeRemoveClick_.bind(this);
+ this.$.cancel.onclick = this.onCancelClick_.bind(this);
+ this.$.restore.onclick = this.onRestoreClick_.bind(this);
+ this.$.save.onclick = this.onSaveClick_.bind(this);
+ this.$['dangerous-remove'].onclick = this.onDangerRemoveClick_.bind(this);
+ this.$.discard.onclick = this.onDiscardClick_.bind(this);
+ },
+
+ /** @param {!downloads.Data} data */
+ update: function(data) {
+ assert(!this.id_ || data.id == this.id_);
+ this.id_ = data.id; // This is the only thing saved from |data|.
+
+ this.classList.toggle('otr', data.otr);
+
+ this.ensureTextIs_(this.$.since, data.since_string);
+ this.ensureTextIs_(this.$.date, data.date_string);
+
+ var dangerText = this.getDangerText_(data);
+ this.isDangerous = !!dangerText;
+
+ if (dangerText) {
+ this.ensureTextIs_(this.$.description, dangerText);
+
+ var dangerType = data.danger_type;
+ var dangerousFile = dangerType == downloads.DangerType.DANGEROUS_FILE;
+ this.$.description.classList.toggle('malware', !dangerousFile);
+
+ var idr = dangerousFile ? 'IDR_WARNING' : 'IDR_SAFEBROWSING_WARNING';
+ var iconUrl = 'chrome://theme/' + idr;
+ this.iconLoader_.loadScaledIcon(this.$['dangerous-icon'], iconUrl);
+
+ this.isMalware =
+ dangerType == downloads.DangerType.DANGEROUS_CONTENT ||
+ dangerType == downloads.DangerType.DANGEROUS_HOST ||
+ dangerType == downloads.DangerType.DANGEROUS_URL ||
+ dangerType == downloads.DangerType.POTENTIALLY_UNWANTED;
+ } else {
+ var iconUrl = 'chrome://fileicon/' + encodeURIComponent(data.file_path);
+ this.iconLoader_.loadScaledIcon(this.$['safe-icon'], iconUrl);
+
+ /** @const */ var isInProgress =
+ data.state == downloads.States.IN_PROGRESS;
+ this.classList.toggle('in-progress', isInProgress);
+
+ /** @const */ var completelyOnDisk =
+ data.state == downloads.States.COMPLETE &&
+ !data.file_externally_removed;
+
+ this.$['file-link'].href = data.url;
+ this.ensureTextIs_(this.$['file-link'], data.file_name);
+ this.$['file-link'].hidden = !completelyOnDisk;
+
+ /** @const */ var isInterrupted =
+ data.state == downloads.States.INTERRUPTED;
+ this.$.name.classList.toggle('interrupted', isInterrupted);
+ this.ensureTextIs_(this.$.name, data.file_name);
+ this.$.name.hidden = completelyOnDisk;
+
+ this.$.show.hidden = !completelyOnDisk;
+
+ this.$.retry.href = data.url;
+ this.$.retry.hidden = !data.retry;
+
+ this.$.pause.hidden = !isInProgress;
+
+ this.$.resume.hidden = !data.resume;
+
+ /** @const */ var isPaused = data.state == downloads.States.PAUSED;
+ /** @const */ var showCancel = isPaused || isInProgress;
+ this.$.cancel.hidden = !showCancel;
+
+ this.$['safe-remove'].hidden = showCancel ||
+ !loadTimeData.getBoolean('allow_deleting_history');
+
+ /** @const */ var controlledByExtension = data.by_ext_id &&
+ data.by_ext_name;
+ this.$['controlled-by'].hidden = !controlledByExtension;
+ if (controlledByExtension) {
+ var link = this.$['controlled-by'].querySelector('a');
+ link.href = 'chrome://extensions#' + data.by_ext_id;
+ link.setAttribute('column-type', 'controlled-by');
+ link.textContent = data.by_ext_name;
+ }
+
+ this.ensureTextIs_(this.$['src-url'], data.url);
+ this.$['src-url'].href = data.url;
+ this.ensureTextIs_(this.$.status, this.getStatusText_(data));
+
+ this.$.progress.hidden = !isInProgress;
+
+ // TODO(dbeam): implement progress.
+ }
+ },
+
+ /**
+ * Overwrite |el|'s textContent if it differs from |text|.
+ * @param {!Element} el
+ * @param {string} text
+ * @private
+ */
+ ensureTextIs_: function(el, text) {
+ if (el.textContent != text)
+ el.textContent = text;
+ },
+
+ /**
+ * @param {!downloads.Data} data
+ * @return {string} Text describing the danger of a download. Empty if not
+ * dangerous.
+ */
+ getDangerText_: function(data) {
+ switch (data.danger_type) {
+ case downloads.DangerType.DANGEROUS_FILE:
+ return loadTimeData.getStringF('danger_file_desc', data.file_name);
+ case downloads.DangerType.DANGEROUS_URL:
+ return loadTimeData.getString('danger_url_desc');
+ case downloads.DangerType.DANGEROUS_CONTENT: // Fall through.
+ case downloads.DangerType.DANGEROUS_HOST:
+ return loadTimeData.getStringF('danger_content_desc', data.file_name);
+ case downloads.DangerType.UNCOMMON_CONTENT:
+ return loadTimeData.getStringF('danger_uncommon_desc',
+ data.file_name);
+ case downloads.DangerType.POTENTIALLY_UNWANTED:
+ return loadTimeData.getStringF('danger_settings_desc',
+ data.file_name);
+ default:
+ return '';
+ }
+ },
+
+ /**
+ * @param {!downloads.Data} data
+ * @return {string} User-visible status update text.
+ * @private
+ */
+ getStatusText_: function(data) {
+ switch (data.state) {
+ case downloads.States.IN_PROGRESS:
+ case downloads.States.PAUSED: // Fallthrough.
+ assert(typeof data.progress_status_text == 'string');
+ return data.progress_status_text;
+ case downloads.States.CANCELLED:
+ return loadTimeData.getString('status_cancelled');
+ case downloads.States.DANGEROUS:
+ break; // Intentionally hit assertNotReached(); at bottom.
+ case downloads.States.INTERRUPTED:
+ assert(typeof data.last_reason_text == 'string');
+ return data.last_reason_text;
+ case downloads.States.COMPLETE:
+ return data.file_externally_removed ?
+ loadTimeData.getString('status_removed') : '';
+ }
+ assertNotReached();
+ return '';
+ },
+
+ /**
+ * @private
+ * @param {Event} e
+ */
+ onSafeDragstart_: function(e) {
+ e.preventDefault();
+ chrome.send('drag', [this.id_]);
+ },
+
+ /**
+ * @param {Event} e
+ * @private
+ */
+ onFileLinkClick_: function(e) {
+ e.preventDefault();
+ chrome.send('openFile', [this.id_]);
+ },
+
+ /** @private */
+ onShowClick_: function() {
+ chrome.send('show', [this.id_]);
+ },
+
+ /** @private */
+ onPauseClick_: function() {
+ chrome.send('pause', [this.id_]);
+ },
+
+ /** @private */
+ onResumeClick_: function() {
+ chrome.send('resume', [this.id_]);
+ },
+
+ /** @private */
+ onSafeRemoveClick_: function() {
+ chrome.send('remove', [this.id_]);
+ },
+
+ /** @private */
+ onCancelClick_: function() {
+ chrome.send('cancel', [this.id_]);
+ },
+
+ /** @private */
+ onRestoreClick_: function() {
+ this.onSaveClick_();
+ },
+
+ /** @private */
+ onSaveClick_: function() {
+ chrome.send('saveDangerous', [this.id_]);
+ },
+
+ /** @private */
+ onDangerRemoveClick_: function() {
+ this.onDiscardClick_();
+ },
+
+ /** @private */
+ onDiscardClick_: function() {
+ chrome.send('discardDangerous', [this.id_]);
+ },
+ });
+
+ return {ItemView: ItemView};
+});
« no previous file with comments | « chrome/browser/resources/md_downloads/item_view.html ('k') | chrome/browser/resources/md_downloads/manager.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698