Index: chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js |
diff --git a/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js b/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js |
index 37fb8eea8576d992e9d18f2e46b9d056851aa972..f59900c5adf8e4eba45bcbea8c998973e8030b9b 100644 |
--- a/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js |
+++ b/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js |
@@ -11,6 +11,34 @@ var eventBindings = require('event_bindings'); |
var fileSystemNatives = requireNative('file_system_natives'); |
var GetDOMError = fileSystemNatives.GetDOMError; |
+/** |
+ * Annotates a date with its serialized value. |
+ * @param {Date} date Input date. |
+ * @return {Date} Date with an extra <code>value</code> attribute. |
+ */ |
+function annotateDate(date) { |
+ // Copy in case the input date is frozen. |
+ var result = new Date(date.getTime()); |
+ result.value = result.toString(); |
+ return result; |
+} |
+ |
+/** |
+ * Annotates an entry metadata by serializing its modifiedTime value. |
+ * @param {EntryMetadata} metadata Input metadata. |
+ * @return {EntryMetadata} metadata Annotated metadata, which can be passed |
+ * back to the C++ layer. |
+ */ |
+function annotateMetadata(metadata) { |
+ var result = { |
+ isDirectory: metadata.isDirectory, |
+ name: metadata.name, |
+ size: metadata.size, |
+ modificationTime: annotateDate(metadata.modificationTime) |
+ }; |
+ return result; |
+} |
+ |
binding.registerCustomHook(function(bindingsAPI) { |
var apiFunctions = bindingsAPI.apiFunctions; |
@@ -104,10 +132,8 @@ eventBindings.registerArgumentMassager( |
var requestId = args[1]; |
var entryPath = args[2]; |
var onSuccessCallback = function(metadata) { |
- // Serialize the Date as a string. |
- metadata.modificationTime.value = metadata.modificationTime.toString(); |
fileSystemProviderInternal.getMetadataRequestedSuccess( |
- fileSystemId, requestId, metadata); |
+ fileSystemId, requestId, annotateMetadata(metadata)); |
}; |
var onErrorCallback = function(error) { |
fileSystemProviderInternal.getMetadataRequestedError( |
@@ -116,4 +142,23 @@ eventBindings.registerArgumentMassager( |
dispatch([fileSystemId, entryPath, onSuccessCallback, onErrorCallback]); |
}); |
+eventBindings.registerArgumentMassager( |
+ 'fileSystemProvider.onReadDirectoryRequested', |
+ function(args, dispatch) { |
+ var fileSystemId = args[0]; |
+ var requestId = args[1]; |
+ var directoryPath = args[2]; |
+ var onSuccessCallback = function(entries, hasNext) { |
+ var annotatedEntries = entries.map(annotateMetadata); |
+ fileSystemProviderInternal.readDirectoryRequestedSuccess( |
+ fileSystemId, requestId, annotatedEntries, hasNext); |
+ }; |
+ var onErrorCallback = function(error) { |
+ fileSystemProviderInternal.readDirectoryRequestedError( |
+ fileSystemId, requestId, error); |
+ } |
+ dispatch([ |
+ fileSystemId, directoryPath, onSuccessCallback, onErrorCallback]); |
+ }); |
+ |
exports.binding = binding.generate(); |