Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / resources / extensions / media_galleries_custom_bindings.js
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.
4
5 // Custom binding for the Media Gallery API.
6
7 var binding = require('binding').Binding.create('mediaGalleries');
8 var blobNatives = requireNative('blob_natives');
9 var mediaGalleriesNatives = requireNative('mediaGalleries');
10
11 var mediaGalleriesMetadata = {};
12
13 function createFileSystemObjectsAndUpdateMetadata(response) {
14   var result = [];
15   mediaGalleriesMetadata = {};  // Clear any previous metadata.
16   if (response) {
17     for (var i = 0; i < response.length; i++) {
18       var filesystem = mediaGalleriesNatives.GetMediaFileSystemObject(
19           response[i].fsid);
20       $Array.push(result, filesystem);
21       var metadata = response[i];
22       delete metadata.fsid;
23       mediaGalleriesMetadata[filesystem.name] = metadata;
24     }
25   }
26   return result;
27 }
28
29 binding.registerCustomHook(function(bindingsAPI, extensionId) {
30   var apiFunctions = bindingsAPI.apiFunctions;
31
32   // getMediaFileSystems, addUserSelectedFolder, and addScanResults use a
33   // custom callback so that they can instantiate and return an array of file
34   // system objects.
35   apiFunctions.setCustomCallback('getMediaFileSystems',
36                                  function(name, request, response) {
37     var result = createFileSystemObjectsAndUpdateMetadata(response);
38     if (request.callback)
39       request.callback(result);
40     request.callback = null;
41   });
42
43   apiFunctions.setCustomCallback('addScanResults',
44                                  function(name, request, response) {
45     var result = createFileSystemObjectsAndUpdateMetadata(response);
46     if (request.callback)
47       request.callback(result);
48     request.callback = null;
49   });
50
51   apiFunctions.setCustomCallback('addUserSelectedFolder',
52                                  function(name, request, response) {
53     var fileSystems = [];
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;
62       }
63     }
64     if (request.callback)
65       request.callback(fileSystems, selectedFileSystemName);
66     request.callback = null;
67   });
68
69   apiFunctions.setCustomCallback('dropPermissionForMediaFileSystem',
70                                  function(name, request, response) {
71     var galleryId = response;
72
73     if (galleryId) {
74       for (var key in mediaGalleriesMetadata) {
75         if (mediaGalleriesMetadata[key].galleryId == galleryId) {
76           delete mediaGalleriesMetadata[key];
77           break;
78         }
79       }
80     }
81     if (request.callback)
82       request.callback();
83     request.callback = null;
84   });
85
86   apiFunctions.setHandleRequest('getMediaFileSystemMetadata',
87                                 function(filesystem) {
88     if (filesystem && filesystem.name &&
89         filesystem.name in mediaGalleriesMetadata) {
90       return mediaGalleriesMetadata[filesystem.name];
91     }
92     return {
93       'name': '',
94       'galleryId': '',
95       'isRemovable': false,
96       'isMediaDevice': false,
97       'isAvailable': false,
98     };
99   });
100
101   apiFunctions.setUpdateArgumentsPostValidate('getMetadata',
102       function(mediaFile, options, callback) {
103     var blobUuid = blobNatives.GetBlobUuid(mediaFile)
104     return [blobUuid, options, callback];
105   });
106 });
107
108 exports.binding = binding.generate();