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 // Use the <code>chrome.mediaGalleries</code> API to access media files (audio,
6 // images, video) from the user's local disks (with the user's consent).
7 namespace mediaGalleries {
9 [inline_doc] enum GetMediaFileSystemsInteractivity {
10 // Do not act interactively.
12 // Ask the user to manage permitted media galleries.
14 // Ask the user to manage permitted galleries only if the return set would
15 // otherwise be empty.
19 [inline_doc] enum GetMetadataType {
20 // Retrieve all available metadata.
22 // Retrieve only the mime type.
26 [inline_doc] enum ScanProgressType {
29 // The scan was cancelled.
31 // The scan finished but none of the result have been added,
32 // addScanResults() has to be called to ask the user for permission.
34 // The scan encountered an error and could not proceed.
38 [inline_doc] dictionary MediaFileSystemsDetails {
39 // Whether to prompt the user for permission to additional media galleries
40 // before returning the permitted set. Default is silent. If the value
41 // 'yes' is passed, or if the application has not been granted access to
42 // any media galleries and the value 'if_needed' is passed, then the
43 // media gallery configuration dialog will be displayed.
44 GetMediaFileSystemsInteractivity? interactive;
47 [inline_doc] dictionary MediaMetadataOptions {
48 // Specifies which subset of the metadata to retrieve. Defaults to 'all'
49 // if the option is omitted.
50 GetMetadataType? metadataType;
53 callback MediaFileSystemsCallback =
54 void ([instanceOf=DOMFileSystem] optional object[] mediaFileSystems);
56 callback AddUserFolderCallback =
57 void ([instanceOf=DOMFileSystem] object[] mediaFileSystems,
58 DOMString selectedFileSystemName);
60 [inline_doc] dictionary MediaFileSystemMetadata {
61 // The name of the file system.
64 // A unique and persistent id for the media gallery.
67 // If the media gallery is on a removable device, a unique id for the
68 // device while the device is online.
71 // True if the media gallery is on a removable device.
74 // True if the device the media gallery is on was detected as a media
75 // device. i.e. a PTP or MTP device, or a DCIM directory is present.
76 boolean isMediaDevice;
78 // True if the device is currently available.
82 [inline_doc] dictionary ScanProgressDetails {
83 // The type of progress event, i.e. start, finish, etc.
84 ScanProgressType type;
86 // The number of Galleries found.
89 // Appoximate number of media files found; some file types can be either
90 // audio or video and are included in both counts.
96 callback MediaFileSystemsMetadataCallback =
97 void (MediaFileSystemMetadata[] metadata);
99 dictionary MediaMetadata {
100 // The browser sniffed mime type.
103 // Defined for images and video. In pixels.
107 // Defined for audio and video. In seconds.
110 // Defined for images and video. In degrees.
113 // Generic metadata tags.
117 DOMString? copyright;
125 callback MediaMetadataCallback = void (MediaMetadata metadata);
127 interface Functions {
128 // Get the media galleries configured in this user agent. If none are
129 // configured or available, the callback will receive an empty array.
130 static void getMediaFileSystems(optional MediaFileSystemsDetails details,
131 MediaFileSystemsCallback callback);
133 // Present a directory picker to the user and add the selected directory
134 // as a gallery. If the user cancels the picker, selectedFileSystemName
136 // A user gesture is required for the dialog to display. Without a user
137 // gesture, the callback will run as though the user canceled.
138 static void addUserSelectedFolder(AddUserFolderCallback callback);
140 // Start a scan of the user's hard disks for directories containing media.
141 // The scan may take a long time so progress and completion is communicated
142 // by events. No permission is granted as a result of the scan, see
144 static void startMediaScan();
146 // Cancel any pending media scan. Well behaved apps should provide a way
147 // for the user to cancel scans they start.
148 static void cancelMediaScan();
150 // Show the user the scan results and let them add any or all of them as
151 // galleries. This should be used after the 'finish' onScanProgress()
152 // event has happened. A galleries the app has access to are returned, not
153 // just the newly added galleries.
154 static void addScanResults(MediaFileSystemsCallback callback);
156 // Get metadata about a specific media file system.
157 [nocompile] static MediaFileSystemMetadata getMediaFileSystemMetadata(
158 [instanceOf=DOMFileSystem] object mediaFileSystem);
160 // Get metadata for all available media galleries.
161 static void getAllMediaFileSystemMetadata(
162 MediaFileSystemsMetadataCallback callback);
164 // Gets the media-specific metadata for a media file. This should work
165 // for files in media galleries as well as other DOM filesystems.
166 static void getMetadata([instanceOf=Blob] object mediaFile,
167 optional MediaMetadataOptions options,
168 MediaMetadataCallback callback);
172 // The pending media scan has changed state. See details for more
174 static void onScanProgress(ScanProgressDetails details);