| 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 86a07b6324f31e86a6c89d46fd52a9c0baab11a8..584d4022f0182d715a2a6d23d97e7b292701755d 100644
 | 
| --- a/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js
 | 
| +++ b/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js
 | 
| @@ -172,23 +172,29 @@ eventBindings.registerArgumentMassager(
 | 
|        var executionStart = Date.now();
 | 
|        var options = args[0];
 | 
|        var onSuccessCallback = function(metadata) {
 | 
| +        var error;
 | 
|          // It is invalid to return a thumbnail when it's not requested. The
 | 
|          // restriction is added in order to avoid fetching the thumbnail while
 | 
|          // it's not needed.
 | 
| -        if (!options.thumbnail && metadata.thumbnail) {
 | 
| -          fileSystemProviderInternal.operationRequestedError(
 | 
| -              options.fileSystemId, options.requestId, 'FAILED',
 | 
| -              Date.now() - executionStart);
 | 
| -          throw new Error('Thumbnail data provided, but not requested.');
 | 
| -        }
 | 
| +        if (!options.thumbnail && metadata.thumbnail)
 | 
| +          error = 'Thumbnail data provided, but not requested.';
 | 
|  
 | 
|          // Check the format and size. Note, that in the C++ layer, there is
 | 
|          // another sanity check to avoid passing any evil URL.
 | 
|          if ('thumbnail' in metadata && !verifyImageURI(metadata.thumbnail))
 | 
| -          throw new Error('Thumbnail format invalid.');
 | 
| +          error = 'Thumbnail format invalid.';
 | 
| +
 | 
|          if ('thumbnail' in metadata &&
 | 
|              metadata.thumbnail.length > METADATA_THUMBNAIL_SIZE_LIMIT) {
 | 
| -          throw new Error('Thumbnail data too large.');
 | 
| +          error = 'Thumbnail data too large.';
 | 
| +        }
 | 
| +
 | 
| +        if (error) {
 | 
| +          console.error(error);
 | 
| +          fileSystemProviderInternal.operationRequestedError(
 | 
| +              options.fileSystemId, options.requestId, 'FAILED',
 | 
| +              Date.now() - executionStart);
 | 
| +          return;
 | 
|          }
 | 
|  
 | 
|          fileSystemProviderInternal.getMetadataRequestedSuccess(
 | 
| @@ -197,11 +203,13 @@ eventBindings.registerArgumentMassager(
 | 
|              annotateMetadata(metadata),
 | 
|              Date.now() - executionStart);
 | 
|        };
 | 
| +
 | 
|        var onErrorCallback = function(error) {
 | 
|          fileSystemProviderInternal.operationRequestedError(
 | 
|              options.fileSystemId, options.requestId, error,
 | 
|              Date.now() - executionStart);
 | 
|        }
 | 
| +
 | 
|        dispatch([options, onSuccessCallback, onErrorCallback]);
 | 
|      });
 | 
|  
 | 
| @@ -213,19 +221,28 @@ eventBindings.registerArgumentMassager(
 | 
|        var onSuccessCallback = function(entries, hasNext) {
 | 
|          var annotatedEntries = entries.map(annotateMetadata);
 | 
|          // It is invalid to return a thumbnail when it's not requested.
 | 
| +        var error;
 | 
|          annotatedEntries.forEach(function(metadata) {
 | 
|            if (metadata.thumbnail) {
 | 
| -            fileSystemProviderInternal.operationRequestedError(
 | 
| -                options.fileSystemId, options.requestId, 'FAILED',
 | 
| -                Date.now() - executionStart);
 | 
| -            throw new Error(
 | 
| -                'Thumbnails must not be provided when reading a directory.');
 | 
| +            var error =
 | 
| +                'Thumbnails must not be provided when reading a directory.';
 | 
| +            return;
 | 
|            }
 | 
|          });
 | 
| +
 | 
| +        if (error) {
 | 
| +          console.error(error);
 | 
| +          fileSystemProviderInternal.operationRequestedError(
 | 
| +              options.fileSystemId, options.requestId, 'FAILED',
 | 
| +              Date.now() - executionStart);
 | 
| +          return;
 | 
| +        }
 | 
| +
 | 
|          fileSystemProviderInternal.readDirectoryRequestedSuccess(
 | 
|              options.fileSystemId, options.requestId, annotatedEntries, hasNext,
 | 
|              Date.now() - executionStart);
 | 
|        };
 | 
| +
 | 
|        var onErrorCallback = function(error) {
 | 
|          fileSystemProviderInternal.operationRequestedError(
 | 
|              options.fileSystemId, options.requestId, error,
 | 
| 
 |