1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Custom binding for the Media Gallery API.
7 var binding = require('binding').Binding.create('mediaGalleries');
8 var blobNatives = requireNative('blob_natives');
9 var mediaGalleriesNatives = requireNative('mediaGalleries');
11 var mediaGalleriesMetadata = {};
13 function createFileSystemObjectsAndUpdateMetadata(response) {
15 mediaGalleriesMetadata = {}; // Clear any previous metadata.
17 for (var i = 0; i < response.length; i++) {
18 var filesystem = mediaGalleriesNatives.GetMediaFileSystemObject(
20 $Array.push(result, filesystem);
21 var metadata = response[i];
23 mediaGalleriesMetadata[filesystem.name] = metadata;
29 binding.registerCustomHook(function(bindingsAPI, extensionId) {
30 var apiFunctions = bindingsAPI.apiFunctions;
32 // getMediaFileSystems, addUserSelectedFolder, and addScanResults use a
33 // custom callback so that they can instantiate and return an array of file
35 apiFunctions.setCustomCallback('getMediaFileSystems',
36 function(name, request, response) {
37 var result = createFileSystemObjectsAndUpdateMetadata(response);
39 request.callback(result);
40 request.callback = null;
43 apiFunctions.setCustomCallback('addScanResults',
44 function(name, request, response) {
45 var result = createFileSystemObjectsAndUpdateMetadata(response);
47 request.callback(result);
48 request.callback = null;
51 apiFunctions.setCustomCallback('addUserSelectedFolder',
52 function(name, request, response) {
54 var selectedFileSystemName = "";
55 if (response && 'mediaFileSystems' in response &&
56 'selectedFileSystemIndex' in response) {
57 fileSystems = createFileSystemObjectsAndUpdateMetadata(
58 response['mediaFileSystems']);
59 var selectedFileSystemIndex = response['selectedFileSystemIndex'];
60 if (selectedFileSystemIndex >= 0) {
61 selectedFileSystemName = fileSystems[selectedFileSystemIndex].name;
65 request.callback(fileSystems, selectedFileSystemName);
66 request.callback = null;
69 apiFunctions.setCustomCallback('dropPermissionForMediaFileSystem',
70 function(name, request, response) {
71 var galleryId = response;
74 for (var key in mediaGalleriesMetadata) {
75 if (mediaGalleriesMetadata[key].galleryId == galleryId) {
76 delete mediaGalleriesMetadata[key];
83 request.callback = null;
86 apiFunctions.setHandleRequest('getMediaFileSystemMetadata',
87 function(filesystem) {
88 if (filesystem && filesystem.name &&
89 filesystem.name in mediaGalleriesMetadata) {
90 return mediaGalleriesMetadata[filesystem.name];
96 'isMediaDevice': false,
101 apiFunctions.setUpdateArgumentsPostValidate('getMetadata',
102 function(mediaFile, options, callback) {
103 var blobUuid = blobNatives.GetBlobUuid(mediaFile)
104 return [blobUuid, options, callback];
108 exports.binding = binding.generate();