summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorhirono <hirono@chromium.org>2015-02-03 21:51:53 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-04 05:53:12 +0000
commit148b6553115ae85d87d7c82b8fe3725cba21b3c1 (patch)
tree616f3f737b535fe335ee51491884af6bacc8d797 /ui
parent13d5f845e78f390c60240de4ca6a04486749c511 (diff)
downloadchromium_src-148b6553115ae85d87d7c82b8fe3725cba21b3c1.zip
chromium_src-148b6553115ae85d87d7c82b8fe3725cba21b3c1.tar.gz
chromium_src-148b6553115ae85d87d7c82b8fe3725cba21b3c1.tar.bz2
Files.app: Add ExternalMetadataProvider class.
It provides metadata from fileManagerPrivate.getEntriesProperty. BUG=453242 TEST=FileManagerJsTest.ExternalMetadataProvider Review URL: https://codereview.chromium.org/895873002 Cr-Commit-Position: refs/heads/master@{#314508}
Diffstat (limited to 'ui')
-rw-r--r--ui/file_manager/file_manager/foreground/js/compiled_resources.gyp1
-rw-r--r--ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js111
-rw-r--r--ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.html17
-rw-r--r--ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.js49
4 files changed, 178 insertions, 0 deletions
diff --git a/ui/file_manager/file_manager/foreground/js/compiled_resources.gyp b/ui/file_manager/file_manager/foreground/js/compiled_resources.gyp
index d09cf7b..65288bf 100644
--- a/ui/file_manager/file_manager/foreground/js/compiled_resources.gyp
+++ b/ui/file_manager/file_manager/foreground/js/compiled_resources.gyp
@@ -85,6 +85,7 @@
'./gear_menu_controller.js',
'./import_controller.js',
'./launch_param.js',
+ './metadata/external_metadata_provider.js',
'./metadata/file_system_metadata_provider.js',
'./metadata/metadata_cache.js',
'./metadata/metadata_cache_item.js',
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js
new file mode 100644
index 0000000..f2473b5
--- /dev/null
+++ b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js
@@ -0,0 +1,111 @@
+// 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.
+
+/**
+ * @typedef {{
+ * size: number,
+ * shared: (boolean|undefined),
+ * modificationTime: Date,
+ * thumbnailUrl: (string|undefined),
+ * externalFileUrl: (string|undefined),
+ * imageWidth: (number|undefined),
+ * imageHeight: (number|undefined),
+ * imageRotation: (number|undefined),
+ * pinned: (boolean|undefined),
+ * present: (boolean|undefined),
+ * hosted: (boolean|undefined),
+ * dirty: (boolean|undefined),
+ * availableOffline: (boolean|undefined),
+ * availableWhenMetered: (boolean|undefined),
+ * customIconUrl: string,
+ * contentMimeType: string,
+ * sharedWithMe: (boolean|undefined)
+ * }}
+ */
+var ExternalMetadata;
+
+/**
+ * Metadata provider for FileEntry#getMetadata.
+ *
+ * @param {!MetadataProviderCache} cache
+ * @constructor
+ * @extends {NewMetadataProvider<!ExternalMetadata>}
+ * @struct
+ */
+function ExternalMetadataProvider(cache) {
+ NewMetadataProvider.call(this, cache, [
+ 'availableOffline',
+ 'availableWhenMetered',
+ 'contentMimeType',
+ 'customIconUrl',
+ 'dirty',
+ 'externalFileUrl',
+ 'hosted',
+ 'imageHeight',
+ 'imageRotation',
+ 'imageWidth',
+ 'modificationTime',
+ 'pinned',
+ 'present',
+ 'shared',
+ 'sharedWithMe',
+ 'size',
+ 'thumbnailUrl'
+ ]);
+}
+
+ExternalMetadataProvider.prototype.__proto__ = NewMetadataProvider.prototype;
+
+/**
+ * @override
+ */
+ExternalMetadataProvider.prototype.getImpl = function(requests) {
+ return new Promise(function(fulfill, reject) {
+ var urls = [];
+ for (var i = 0; i < requests.length; i++) {
+ urls.push(requests[i].entry.toURL());
+ }
+ chrome.fileManagerPrivate.getEntryProperties(
+ urls,
+ function(results) {
+ if (!chrome.runtime.lastError)
+ fulfill(this.convertResults_(requests, results));
+ else
+ reject(chrome.runtime.lastError);
+ }.bind(this));
+ }.bind(this));
+};
+
+/**
+ * @param {!Array<!MetadataRequest>} requests
+ * @param {!Array<!EntryProperties>} propertiesList
+ * @return {!Array<!ExternalMetadata>}
+ */
+ExternalMetadataProvider.prototype.convertResults_ =
+ function(requests, propertiesList) {
+ var results = [];
+ for (var i = 0; i < propertiesList.length; i++) {
+ var properties = propertiesList[i];
+ results.push({
+ availableOffline: properties.isAvailableOffline,
+ availableWhenMetered: properties.isAvailableWhenMetered,
+ contentMimeType: properties.contentMimeType || '',
+ customIconUrl: properties.customIconUrl || '',
+ dirty: properties.isDirty,
+ externalFileUrl: properties.externalFileUrl,
+ hosted: properties.isHosted,
+ imageHeight: properties.imageHeight,
+ imageRotation: properties.imageRotation,
+ imageWidth: properties.imageWidth,
+ modificationTime: new Date(properties.lastModifiedTime),
+ pinned: properties.isPinned,
+ present: properties.isPresent,
+ shared: properties.shared,
+ sharedWithMe: properties.sharedWithMe,
+ size: requests[i].entry.isFile ? (properties.fileSize || 0) : -1,
+ thumbnailUrl: properties.thumbnailUrl
+ });
+ }
+ return results;
+};
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.html b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.html
new file mode 100644
index 0000000..c03656c
--- /dev/null
+++ b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<!-- 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.
+ -->
+<!-- Base classes -->
+<script src="metadata_cache_set.js"></script>
+<script src="new_metadata_provider.js"></script>
+
+<!-- Others -->
+<script src="../../../../../../ui/webui/resources/js/assert.js"></script>
+<script src="../../../common/js/lru_cache.js"></script>
+<script src="../../../common/js/unittest_util.js"></script>
+<script src="metadata_cache_item.js"></script>
+<script src="external_metadata_provider.js"></script>
+
+<script src="external_metadata_provider_unittest.js"></script>
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.js b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.js
new file mode 100644
index 0000000..2cb8e7a
--- /dev/null
+++ b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider_unittest.js
@@ -0,0 +1,49 @@
+// 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.
+
+var entryA = {
+ toURL: function() { return "filesystem://A"; },
+ isFile: true
+};
+
+var entryB = {
+ toURL: function() { return "filesystem://B"; },
+ isFile: true
+};
+
+function testExternalMetadataProviderBasic(callback) {
+ // Mocking chrome API.
+ window.chrome = {
+ fileManagerPrivate: {
+ getEntryProperties: function(urls, callback) {
+ assertEquals('filesystem://A', urls[0]);
+ assertEquals('filesystem://B', urls[1]);
+ callback([{
+ lastModifiedTime: new Date(2015, 0, 1).getTime(),
+ fileSize: 1024
+ }, {
+ lastModifiedTime: new Date(2015, 1, 2).getTime(),
+ fileSize: 2048
+ }]);
+ }
+ },
+ runtime: {lastError: null}
+ };
+ var cache = new MetadataProviderCache();
+ var provider = new ExternalMetadataProvider(cache);
+ reportPromise(provider.get(
+ [entryA, entryB],
+ ['modificationTime', 'size']).then(
+ function(results) {
+ assertEquals(2, results.length);
+ assertEquals(
+ new Date(2015, 0, 1).toString(),
+ results[0].modificationTime.toString());
+ assertEquals(1024, results[0].size);
+ assertEquals(
+ new Date(2015, 1, 2).toString(),
+ results[1].modificationTime.toString());
+ assertEquals(2048, results[1].size);
+ }), callback);
+}