Chromium Code Reviews| 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..4bc66b714ec748ecaf142af2afaef61431f75763 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 |
|
hirono
2014/05/07 05:48:58
Please add .
mtomasz
2014/05/07 06:57:09
Done.
|
| + */ |
| +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,26 @@ 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.forEach(function(metadata) { |
|
hirono
2014/05/07 05:48:58
Maybe map is more suitable here.
mtomasz
2014/05/07 06:57:09
Could you clarify? Metadata is a map, but annotate
hirono
2014/05/07 07:01:51
Sorry for the less comment. I meant we can use Arr
mtomasz
2014/05/07 07:24:33
Great idea! Done.
|
| + annotatedEntries.push(annotateMetadata(metadata)); |
| + }); |
| + fileSystemProviderInternal.readDirectoryRequestedSuccess( |
| + fileSystemId, requestId, annotatedEntries, hasNext); |
| + }; |
| + var onErrorCallback = function(error) { |
| + fileSystemProviderInternal.readDirectoryRequestedError( |
| + fileSystemId, requestId, error); |
| + } |
| + dispatch([ |
| + fileSystemId, directoryPath, onSuccessCallback, onErrorCallback]); |
| + }); |
| + |
| exports.binding = binding.generate(); |