blob: 02d21d1d741f931891c98fb61720722e4a397f66 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Use the <code>chrome.mediaGalleries</code> API to access media files (audio,
// images, video) from the user's local disks (with the user's consent).
namespace mediaGalleries {
[inline_doc] enum GalleryChangeType {
// The contents of the gallery have changed.
contents_changed,
// The watch has been dropped because the device has been detached,
// the gallery permission has been removed, or any other reason.
watch_dropped
};
[inline_doc] enum GetMediaFileSystemsInteractivity {
// Do not act interactively.
no,
// Ask the user to manage permitted media galleries.
yes,
// Ask the user to manage permitted galleries only if the return set would
// otherwise be empty.
if_needed
};
[inline_doc] enum GetMetadataType {
// Retrieve the mime type, metadata tags, and attached images.
all,
// Retrieve only the mime type and the metadata tags.
mimeTypeAndTags,
// Retrieve only the mime type.
mimeTypeOnly
};
[inline_doc] enum ScanProgressType {
// The scan started.
start,
// The scan was cancelled.
cancel,
// The scan finished but none of the result have been added,
// addScanResults() has to be called to ask the user for permission.
finish,
// The scan encountered an error and could not proceed.
error
};
[inline_doc] dictionary GalleryChangeDetails {
// Type of change event.
GalleryChangeType type;
// Identifies the modified gallery.
DOMString galleryId;
};
[inline_doc] dictionary MediaFileSystemsDetails {
// Whether to prompt the user for permission to additional media galleries
// before returning the permitted set. Default is silent. If the value
// 'yes' is passed, or if the application has not been granted access to
// any media galleries and the value 'if_needed' is passed, then the
// media gallery configuration dialog will be displayed.
GetMediaFileSystemsInteractivity? interactive;
};
[inline_doc] dictionary MediaMetadataOptions {
// Specifies which subset of the metadata to retrieve. Defaults to 'all'
// if the option is omitted.
GetMetadataType? metadataType;
};
callback MediaFileSystemsCallback =
void ([instanceOf=DOMFileSystem] object[] mediaFileSystems);
callback AddUserFolderCallback =
void ([instanceOf=DOMFileSystem] object[] mediaFileSystems,
DOMString selectedFileSystemName);
callback DropPermissionForMediaFileSystemCallback = void ();
[inline_doc] dictionary MediaFileSystemMetadata {
// The name of the file system.
DOMString name;
// A unique and persistent id for the media gallery.
DOMString galleryId;
// If the media gallery is on a removable device, a unique id for the
// device while the device is online.
DOMString? deviceId;
// True if the media gallery is on a removable device.
boolean isRemovable;
// True if the device the media gallery is on was detected as a media
// device. i.e. a PTP or MTP device, or a DCIM directory is present.
boolean isMediaDevice;
// True if the device is currently available.
boolean isAvailable;
};
[inline_doc] dictionary ScanProgressDetails {
// The type of progress event, i.e. start, finish, etc.
ScanProgressType type;
// The number of Galleries found.
long? galleryCount;
// Appoximate number of media files found; some file types can be either
// audio or video and are included in both counts.
long? audioCount;
long? imageCount;
long? videoCount;
};
callback MediaFileSystemsMetadataCallback =
void (MediaFileSystemMetadata[] metadata);
dictionary StreamInfo {
// Describes format of container or codec of stream, i.e. "mp3", "h264".
DOMString type;
// An unfiltered string->string dictionary of tags for the stream.
object tags;
};
dictionary MediaMetadata {
// The browser sniffed mime type.
DOMString mimeType;
// Defined for images and video. In pixels.
long? height;
long? width;
// Defined for images only.
double? xResolution;
double? yResolution;
// Defined for audio and video. In seconds.
double? duration;
// Defined for images and video. In degrees.
long? rotation;
// Defined for images only.
DOMString? cameraMake;
DOMString? cameraModel;
double? exposureTimeSeconds;
boolean? flashFired;
double? fNumber;
double? focalLengthMm;
double? isoEquivalent;
// Defined for audio and video only.
DOMString? album;
DOMString? artist;
DOMString? comment;
DOMString? copyright;
long? disc;
DOMString? genre;
DOMString? language;
DOMString? title;
long? track;
// All the metadata in the media file. For formats with multiple streams,
// stream order will be preserved. Container metadata is the first element.
StreamInfo[] rawTags;
// The images embedded in the media file's metadata. This is most often
// used for album art or video thumbnails.
[instanceOf=Blob] object[] attachedImages;
};
callback MediaMetadataCallback = void (MediaMetadata metadata);
interface Functions {
// Get the media galleries configured in this user agent. If none are
// configured or available, the callback will receive an empty array.
static void getMediaFileSystems(optional MediaFileSystemsDetails details,
MediaFileSystemsCallback callback);
// Present a directory picker to the user and add the selected directory
// as a gallery. If the user cancels the picker, selectedFileSystemName
// will be empty.
// A user gesture is required for the dialog to display. Without a user
// gesture, the callback will run as though the user canceled.
static void addUserSelectedFolder(AddUserFolderCallback callback);
// Give up access to a given media gallery.
static void dropPermissionForMediaFileSystem(
DOMString galleryId,
optional DropPermissionForMediaFileSystemCallback callback);
// Start a scan of the user's hard disks for directories containing media.
// The scan may take a long time so progress and completion is communicated
// by events. No permission is granted as a result of the scan, see
// addScanResults.
static void startMediaScan();
// Cancel any pending media scan. Well behaved apps should provide a way
// for the user to cancel scans they start.
static void cancelMediaScan();
// Show the user the scan results and let them add any or all of them as
// galleries. This should be used after the 'finish' onScanProgress()
// event has happened. All galleries the app has access to are returned, not
// just the newly added galleries.
static void addScanResults(MediaFileSystemsCallback callback);
// Get metadata about a specific media file system.
[nocompile] static MediaFileSystemMetadata getMediaFileSystemMetadata(
[instanceOf=DOMFileSystem] object mediaFileSystem);
// Get metadata for all available media galleries.
static void getAllMediaFileSystemMetadata(
MediaFileSystemsMetadataCallback callback);
// Gets the media-specific metadata for a media file. This should work
// for files in media galleries as well as other DOM filesystems.
static void getMetadata([instanceOf=Blob] object mediaFile,
optional MediaMetadataOptions options,
MediaMetadataCallback callback);
};
interface Events {
// Fired when a media gallery is changed or a gallery watch is dropped.
static void onGalleryChanged(GalleryChangeDetails details);
// The pending media scan has changed state. See details for more
// information.
static void onScanProgress(ScanProgressDetails details);
};
};