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

Side by Side Diff: chrome/browser/resources/file_manager/js/file_manager.js

Issue 7799020: Merge 97620 - [filebrowser] Enable fileBrowserHandlers only for files, not directories. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/835/src/
Patch Set: '' Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // Setting the src of an img to an empty string can crash the browser, so we 5 // Setting the src of an img to an empty string can crash the browser, so we
6 // use an empty 1x1 gif instead. 6 // use an empty 1x1 gif instead.
7 const EMPTY_IMAGE_URI = 'data:image/gif;base64,' 7 const EMPTY_IMAGE_URI = 'data:image/gif;base64,'
8 + 'R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D'; 8 + 'R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D';
9 9
10 var g_slideshow_data = null; 10 var g_slideshow_data = null;
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 }; 229 };
230 230
231 const previewArt = { 231 const previewArt = {
232 'audio': 'images/filetype_large_audio.png', 232 'audio': 'images/filetype_large_audio.png',
233 'folder': 'images/filetype_large_folder.png', 233 'folder': 'images/filetype_large_folder.png',
234 'unknown': 'images/filetype_large_generic.png', 234 'unknown': 'images/filetype_large_generic.png',
235 'video': 'images/filetype_large_video.png' 235 'video': 'images/filetype_large_video.png'
236 }; 236 };
237 237
238 /** 238 /**
239 * Regexp for archive files. Used to show mount-archive task.
240 */
241 const ARCHIVES_REGEXP = /.zip$/;
242
243 /**
239 * Return a translated string. 244 * Return a translated string.
240 * 245 *
241 * Wrapper function to make dealing with translated strings more concise. 246 * Wrapper function to make dealing with translated strings more concise.
242 * Equivilant to localStrings.getString(id). 247 * Equivilant to localStrings.getString(id).
243 * 248 *
244 * @param {string} id The id of the string to return. 249 * @param {string} id The id of the string to return.
245 * @return {string} The translated string. 250 * @return {string} The translated string.
246 */ 251 */
247 function str(id) { 252 function str(id) {
248 return localStrings.getString(id); 253 return localStrings.getString(id);
(...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after
1484 } 1489 }
1485 1490
1486 if (pendingFiles.length) { 1491 if (pendingFiles.length) {
1487 cacheEntrySize(pendingFiles.pop(), cacheNextFile); 1492 cacheEntrySize(pendingFiles.pop(), cacheNextFile);
1488 } else { 1493 } else {
1489 self.dispatchEvent(new cr.Event('selection-summarized')); 1494 self.dispatchEvent(new cr.Event('selection-summarized'));
1490 } 1495 }
1491 }; 1496 };
1492 1497
1493 if (this.dialogType_ == FileManager.DialogType.FULL_PAGE) { 1498 if (this.dialogType_ == FileManager.DialogType.FULL_PAGE) {
1494 // Since unmount task cannot be defined in terms of file patterns, 1499 // Some internal tasks cannot be defined in terms of file patterns,
1495 // we manually include it here, if all selected items are mount points. 1500 // so we pass selection to check for them manually.
1496 chrome.fileBrowserPrivate.getFileTasks( 1501 if (selection.directoryCount == 0 && selection.fileCount > 0) {
1497 selection.urls, 1502 // Only files, not directories, are supported for external tasks.
1498 this.onTasksFound_.bind(this, 1503 chrome.fileBrowserPrivate.getFileTasks(
1499 this.shouldShowUnmount_(selection.urls))); 1504 selection.urls,
1505 this.onTasksFound_.bind(this, selection));
1506 } else {
1507 // There may be internal tasks for directories.
1508 this.onTasksFound_(selection, []);
1509 }
1500 } 1510 }
1501 1511
1502 cacheNextFile(); 1512 cacheNextFile();
1503 }; 1513 };
1504 1514
1505 FileManager.prototype.onMetadataResult_ = function(fileURL, metadata) { 1515 FileManager.prototype.onMetadataResult_ = function(fileURL, metadata) {
1506 var observers = this.metadataCache_[fileURL]; 1516 var observers = this.metadataCache_[fileURL];
1507 if (!observers || !(observers instanceof Array)) { 1517 if (!observers || !(observers instanceof Array)) {
1508 console.error('Missing or invalid metadata observers: ' + fileURL + ': ' + 1518 console.error('Missing or invalid metadata observers: ' + fileURL + ': ' +
1509 observers); 1519 observers);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1544 if (!(methodName in this)) { 1554 if (!(methodName in this)) {
1545 console.log('Unknown message from metadata reader: ' + data.verb, data); 1555 console.log('Unknown message from metadata reader: ' + data.verb, data);
1546 return; 1556 return;
1547 } 1557 }
1548 1558
1549 this[methodName].apply(this, data.arguments); 1559 this[methodName].apply(this, data.arguments);
1550 }; 1560 };
1551 1561
1552 /** 1562 /**
1553 * Callback called when tasks for selected files are determined. 1563 * Callback called when tasks for selected files are determined.
1554 * @param {boolean} unmount Whether unmount task should be included. 1564 * @param {Object} selection Selection is passed here, since this.selection
1565 * can change before tasks were found, and we should be accurate.
1555 * @param {Array.<Task>} tasksList The tasks list. 1566 * @param {Array.<Task>} tasksList The tasks list.
1556 */ 1567 */
1557 FileManager.prototype.onTasksFound_ = function(unmount, tasksList) { 1568 FileManager.prototype.onTasksFound_ = function(selection, tasksList) {
1558 if (unmount) {
1559 tasksList.push({
1560 taskId: this.getExtensionId_() + '|unmount-archive',
1561 iconUrl: '',
1562 title: ''
1563 });
1564 }
1565 1569
1566 this.taskButtons_.innerHTML = ''; 1570 this.taskButtons_.innerHTML = '';
1567 for (var i = 0; i < tasksList.length; i++) { 1571 for (var i = 0; i < tasksList.length; i++) {
1568 var task = tasksList[i]; 1572 var task = tasksList[i];
1569 1573
1570 // Tweak images, titles of internal tasks. 1574 // Tweak images, titles of internal tasks.
1571 var task_parts = task.taskId.split('|'); 1575 var task_parts = task.taskId.split('|');
1572 if (task_parts[0] == this.getExtensionId_()) { 1576 if (task_parts[0] == this.getExtensionId_()) {
1573 if (task_parts[1] == 'preview') { 1577 if (task_parts[1] == 'preview') {
1574 // TODO(serya): This hack needed until task.iconUrl get working 1578 // TODO(serya): This hack needed until task.iconUrl get working
(...skipping 13 matching lines...) Expand all
1588 } else if (task_parts[1] == 'enqueue') { 1592 } else if (task_parts[1] == 'enqueue') {
1589 task.iconUrl = 1593 task.iconUrl =
1590 chrome.extension.getURL('images/icon_add_to_queue_16x16.png'); 1594 chrome.extension.getURL('images/icon_add_to_queue_16x16.png');
1591 task.title = str('ENQUEUE'); 1595 task.title = str('ENQUEUE');
1592 } else if (task_parts[1] == 'mount-archive') { 1596 } else if (task_parts[1] == 'mount-archive') {
1593 task.iconUrl = 1597 task.iconUrl =
1594 chrome.extension.getURL('images/icon_mount_archive_16x16.png'); 1598 chrome.extension.getURL('images/icon_mount_archive_16x16.png');
1595 task.title = str('MOUNT_ARCHIVE'); 1599 task.title = str('MOUNT_ARCHIVE');
1596 if (str('ENABLE_ARCHIVES') != 'true') 1600 if (str('ENABLE_ARCHIVES') != 'true')
1597 continue; 1601 continue;
1598 } else if (task_parts[1] == 'unmount-archive') {
1599 task.iconUrl =
1600 chrome.extension.getURL('images/icon_unmount_archive_16x16.png');
1601 task.title = str('UNMOUNT_ARCHIVE');
1602 if (str('ENABLE_ARCHIVES') != 'true')
1603 continue;
1604 } 1602 }
1605 } 1603 }
1604 this.renderTaskButton_(task);
1605 }
1606 this.maybeRenderUnmountTask_(selection);
1607 };
1606 1608
1607 var button = this.document_.createElement('button'); 1609 FileManager.prototype.renderTaskButton_ = function(task) {
1608 button.addEventListener('click', this.onTaskButtonClicked_.bind(this)); 1610 var button = this.document_.createElement('button');
1609 button.className = 'task-button'; 1611 button.addEventListener('click', this.onTaskButtonClicked_.bind(this));
1610 button.task = task; 1612 button.className = 'task-button';
1613 button.task = task;
1611 1614
1612 var img = this.document_.createElement('img'); 1615 var img = this.document_.createElement('img');
1613 img.src = task.iconUrl; 1616 img.src = task.iconUrl;
1614 1617
1615 button.appendChild(img); 1618 button.appendChild(img);
1616 button.appendChild(this.document_.createTextNode(task.title)); 1619 button.appendChild(this.document_.createTextNode(task.title));
1617 1620
1618 this.taskButtons_.appendChild(button); 1621 this.taskButtons_.appendChild(button);
1622 };
1623
1624 /**
1625 * Checks whether unmount task should be displayed and if the answer is
1626 * affirmative renders it.
1627 * @param {Object} selection Selected files object.
1628 */
1629 FileManager.prototype.maybeRenderUnmountTask_ = function(selection) {
1630 for (var index = 0; index < selection.urls.length; ++index) {
1631 // Each url should be a mount point.
1632 var path = selection.urls[index];
1633 if (!this.mountPoints_.hasOwnProperty(path) ||
1634 this.mountPoints_[path].type != 'file')
1635 return;
1619 } 1636 }
1620 }; 1637 this.renderTaskButton_({
1638 taskId: this.getExtensionId_() + '|unmount-archive',
1639 iconUrl:
1640 chrome.extension.getURL('images/icon_unmount_archive_16x16.png'),
1641 title: str('UNMOUNT_ARCHIVE')
1642 });
1643 };
1621 1644
1622 FileManager.prototype.getExtensionId_ = function() { 1645 FileManager.prototype.getExtensionId_ = function() {
1623 return chrome.extension.getURL('').split('/')[2]; 1646 return chrome.extension.getURL('').split('/')[2];
1624 }; 1647 };
1625 1648
1626 FileManager.prototype.onTaskButtonClicked_ = function(event) { 1649 FileManager.prototype.onTaskButtonClicked_ = function(event) {
1627 chrome.fileBrowserPrivate.executeTask(event.srcElement.task.taskId, 1650 chrome.fileBrowserPrivate.executeTask(event.srcElement.task.taskId,
1628 this.selection.urls); 1651 this.selection.urls);
1629 }; 1652 };
1630 1653
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1693 this.mountRequests_.push(urls[index]); 1716 this.mountRequests_.push(urls[index]);
1694 chrome.fileBrowserPrivate.addMount(urls[index], 'file', {}); 1717 chrome.fileBrowserPrivate.addMount(urls[index], 'file', {});
1695 } 1718 }
1696 } else if (id == 'unmount-archive') { 1719 } else if (id == 'unmount-archive') {
1697 for (var index = 0; index < urls.length; ++index) { 1720 for (var index = 0; index < urls.length; ++index) {
1698 chrome.fileBrowserPrivate.removeMount(urls[index]); 1721 chrome.fileBrowserPrivate.removeMount(urls[index]);
1699 } 1722 }
1700 } 1723 }
1701 }; 1724 };
1702 1725
1703 /**
1704 * Determines whether unmount task should present for selected files.
1705 */
1706 FileManager.prototype.shouldShowUnmount_ = function(urls) {
1707 for (var index = 0; index < urls.length; ++index) {
1708 // Each url should be a mount point.
1709 var path = urls[index];
1710 if (!this.mountPoints_.hasOwnProperty(path) ||
1711 this.mountPoints_[path].type != 'file') {
1712 return false;
1713 }
1714 }
1715 return true;
1716 };
1717
1718 FileManager.prototype.onImageEditorSave = function(canvas) { 1726 FileManager.prototype.onImageEditorSave = function(canvas) {
1719 console.warn('Saving images not implemented'); 1727 console.warn('Saving images not implemented');
1720 }; 1728 };
1721 1729
1722 FileManager.prototype.onImageEditorClose = function() { 1730 FileManager.prototype.onImageEditorClose = function() {
1723 this.imageEditorFrame_.style.display = 'none'; 1731 this.imageEditorFrame_.style.display = 'none';
1724 this.imageEditor_ = null; 1732 this.imageEditor_ = null;
1725 }; 1733 };
1726 1734
1727 /** 1735 /**
(...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2938 2946
2939 if (msg) { 2947 if (msg) {
2940 console.log('no no no'); 2948 console.log('no no no');
2941 this.alert.show(msg, onAccept); 2949 this.alert.show(msg, onAccept);
2942 return false; 2950 return false;
2943 } 2951 }
2944 2952
2945 return true; 2953 return true;
2946 }; 2954 };
2947 })(); 2955 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698