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