| Index: chrome/renderer/resources/extensions/media_galleries_custom_bindings.js
|
| diff --git a/chrome/renderer/resources/extensions/media_galleries_custom_bindings.js b/chrome/renderer/resources/extensions/media_galleries_custom_bindings.js
|
| index f838086848c1b555f6a5e490288202d191f99a08..bbe740ac72245154b2b6652f1e85c0135bc0295a 100644
|
| --- a/chrome/renderer/resources/extensions/media_galleries_custom_bindings.js
|
| +++ b/chrome/renderer/resources/extensions/media_galleries_custom_bindings.js
|
| @@ -8,6 +8,7 @@ var binding = require('binding').Binding.create('mediaGalleries');
|
| var blobNatives = requireNative('blob_natives');
|
| var mediaGalleriesNatives = requireNative('mediaGalleries');
|
|
|
| +var blobsAwaitingMetadata = {};
|
| var mediaGalleriesMetadata = {};
|
|
|
| function createFileSystemObjectsAndUpdateMetadata(response) {
|
| @@ -101,6 +102,10 @@ binding.registerCustomHook(function(bindingsAPI, extensionId) {
|
| apiFunctions.setUpdateArgumentsPostValidate('getMetadata',
|
| function(mediaFile, options, callback) {
|
| var blobUuid = blobNatives.GetBlobUuid(mediaFile)
|
| + // Store the blob in a global object to keep its refcount nonzero -- this
|
| + // prevents the object from being garbage collected before any metadata
|
| + // parsing gets to occur (see crbug.com/415792).
|
| + blobsAwaitingMetadata[blobUuid] = mediaFile;
|
| return [blobUuid, options, callback];
|
| });
|
|
|
| @@ -118,6 +123,11 @@ binding.registerCustomHook(function(bindingsAPI, extensionId) {
|
| if (request.callback)
|
| request.callback(response.metadata);
|
| request.callback = null;
|
| +
|
| + // The UUID was in position 0 in the setUpdateArgumentsPostValidate
|
| + // function.
|
| + var uuid = request.args[0];
|
| + delete blobsAwaitingMetadata[uuid];
|
| });
|
| });
|
|
|
|
|