media_galleries_custom_bindings.js revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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');
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)var mediaGalleriesMetadata = {};
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)binding.registerCustomHook(function(bindingsAPI, extensionId) {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var apiFunctions = bindingsAPI.apiFunctions;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // getMediaFileSystems uses a custom callback so that it can instantiate and
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // return an array of file system objects.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  apiFunctions.setCustomCallback('getMediaFileSystems',
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 function(name, request, response) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var result = null;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    mediaGalleriesMetadata = {};  // Clear any previous metadata.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (response) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      result = [];
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < response.length; i++) {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        var filesystem = mediaGalleriesNatives.GetMediaFileSystemObject(
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            response[i].fsid);
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        $Array.push(result, filesystem);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        var metadata = response[i];
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        delete metadata.fsid;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mediaGalleriesMetadata[filesystem.name] = metadata;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (request.callback)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      request.callback(result);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    request.callback = null;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  apiFunctions.setHandleRequest('getMediaFileSystemMetadata',
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                function(filesystem) {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (filesystem && filesystem.name &&
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mediaGalleriesMetadata[filesystem.name]) {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return mediaGalleriesMetadata[filesystem.name];
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return {};
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  });
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)exports.binding = binding.generate();
49