media_galleries_custom_bindings.js revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Custom binding for the Media Gallery API. 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)var binding = require('binding').Binding.create('mediaGalleries'); 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var mediaGalleriesNatives = requireNative('mediaGalleries'); 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)var blobNatives = requireNative('blob_natives'); 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)var mediaGalleriesMetadata = {}; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)binding.registerCustomHook(function(bindingsAPI, extensionId) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var apiFunctions = bindingsAPI.apiFunctions; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // getMediaFileSystems uses a custom callback so that it can instantiate and 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return an array of file system objects. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) apiFunctions.setCustomCallback('getMediaFileSystems', 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function(name, request, response) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var result = null; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mediaGalleriesMetadata = {}; // Clear any previous metadata. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (response) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = []; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < response.length; i++) { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var filesystem = mediaGalleriesNatives.GetMediaFileSystemObject( 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) response[i].fsid); 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch $Array.push(result, filesystem); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var metadata = response[i]; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete metadata.fsid; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mediaGalleriesMetadata[filesystem.name] = metadata; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (request.callback) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.callback(result); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.callback = null; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) apiFunctions.setHandleRequest('getMediaFileSystemMetadata', 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function(filesystem) { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (filesystem && filesystem.name && 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mediaGalleriesMetadata[filesystem.name]) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mediaGalleriesMetadata[filesystem.name]; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return {}; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) apiFunctions.setUpdateArgumentsPostValidate('getMetadata', 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) function(mediaFile, options, callback) { 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) var blobUuid = blobNatives.GetBlobUuid(mediaFile) 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return [blobUuid, options, callback]; 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)exports.binding = binding.generate(); 56