Commit 0d283901 authored by thestig@chromium.org's avatar thestig@chromium.org

Media Galleries: Add chrome.mediaGalleries.addUserSelectedFolder().

BUG=318411

Review URL: https://codereview.chromium.org/93643002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@244128 0039d316-1c4b-4281-b951-d872f2087c98
parent 4d61441b
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_ #ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_ #define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_
#include <string>
#include <vector> #include <vector>
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
...@@ -78,6 +79,39 @@ class MediaGalleriesGetAllMediaFileSystemMetadataFunction ...@@ -78,6 +79,39 @@ class MediaGalleriesGetAllMediaFileSystemMetadataFunction
const MediaStorageUtil::DeviceIdSet* available_devices); const MediaStorageUtil::DeviceIdSet* available_devices);
}; };
class MediaGalleriesAddUserSelectedFolderFunction
: public ChromeAsyncExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("mediaGalleries.addUserSelectedFolder",
MEDIAGALLERIES_ADDUSERSELECTEDFOLDER)
protected:
virtual ~MediaGalleriesAddUserSelectedFolderFunction();
virtual bool RunImpl() OVERRIDE;
private:
// Bottom half for RunImpl, invoked after the preferences is initialized.
void OnPreferencesInit();
// Callback for the directory prompt request, with the input from the user.
// If |selected_directory| is empty, then the user canceled.
// Either handle the user canceled case or add the selected gallery.
void OnDirectorySelected(const base::FilePath& selected_directory);
// Callback for the directory prompt request. |pref_id| is for the gallery
// the user just added. |filesystems| is the entire list of file systems.
// The fsid for the file system that corresponds to |pref_id| will be
// appended to the list of file systems returned to the caller. The
// Javascript binding for this API will interpret the list appropriately.
void ReturnGalleriesAndId(
MediaGalleryPrefId pref_id,
const std::vector<MediaFileSystemInfo>& filesystems);
// A helper method that calls
// MediaFileSystemRegistry::GetMediaFileSystemsForExtension().
void GetMediaFileSystemsForExtension(const MediaFileSystemsCallback& cb);
};
class MediaGalleriesGetMetadataFunction : public ChromeAsyncExtensionFunction { class MediaGalleriesGetMetadataFunction : public ChromeAsyncExtensionFunction {
public: public:
DECLARE_EXTENSION_FUNCTION("mediaGalleries.getMetadata", DECLARE_EXTENSION_FUNCTION("mediaGalleries.getMetadata",
......
...@@ -717,6 +717,7 @@ enum HistogramValue { ...@@ -717,6 +717,7 @@ enum HistogramValue {
BOOKMARKMANAGERPRIVATE_REDO, BOOKMARKMANAGERPRIVATE_REDO,
BOOKMARKMANAGERPRIVATE_UNDOINFO, BOOKMARKMANAGERPRIVATE_UNDOINFO,
BOOKMARKMANAGERPRIVATE_REDOINFO, BOOKMARKMANAGERPRIVATE_REDOINFO,
MEDIAGALLERIES_ADDUSERSELECTEDFOLDER,
ENUM_BOUNDARY // Last entry: Add new entries above. ENUM_BOUNDARY // Last entry: Add new entries above.
}; };
......
...@@ -21,6 +21,7 @@ enum MediaGalleriesUsages { ...@@ -21,6 +21,7 @@ enum MediaGalleriesUsages {
PREFS_INITIALIZED_ERROR, PREFS_INITIALIZED_ERROR,
GET_ALL_MEDIA_FILE_SYSTEM_METADATA, GET_ALL_MEDIA_FILE_SYSTEM_METADATA,
GET_METADATA, GET_METADATA,
ADD_USER_SELECTED_FOLDER,
MEDIA_GALLERIES_NUM_USAGES MEDIA_GALLERIES_NUM_USAGES
}; };
......
...@@ -41,6 +41,10 @@ namespace mediaGalleries { ...@@ -41,6 +41,10 @@ namespace mediaGalleries {
callback MediaFileSystemsCallback = callback MediaFileSystemsCallback =
void ([instanceOf=DOMFileSystem] optional object[] mediaFileSystems); void ([instanceOf=DOMFileSystem] optional object[] mediaFileSystems);
callback AddUserFolderCallback =
void ([instanceOf=DOMFileSystem] object[] mediaFileSystems,
DOMString selectedFileSystemName);
[inline_doc] dictionary MediaFileSystemMetadata { [inline_doc] dictionary MediaFileSystemMetadata {
// The name of the file system. // The name of the file system.
DOMString name; DOMString name;
...@@ -97,6 +101,11 @@ namespace mediaGalleries { ...@@ -97,6 +101,11 @@ namespace mediaGalleries {
static void getMediaFileSystems(optional MediaFileSystemsDetails details, static void getMediaFileSystems(optional MediaFileSystemsDetails details,
MediaFileSystemsCallback callback); 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.
static void addUserSelectedFolder(AddUserFolderCallback callback);
// Get metadata about a specific media file system. // Get metadata about a specific media file system.
[nocompile] static MediaFileSystemMetadata getMediaFileSystemMetadata( [nocompile] static MediaFileSystemMetadata getMediaFileSystemMetadata(
[instanceOf=DOMFileSystem] object mediaFileSystem); [instanceOf=DOMFileSystem] object mediaFileSystem);
......
...@@ -11,6 +11,23 @@ var blobNatives = requireNative('blob_natives'); ...@@ -11,6 +11,23 @@ var blobNatives = requireNative('blob_natives');
var mediaGalleriesMetadata = {}; var mediaGalleriesMetadata = {};
function createFileSystemObjectsAndUpdateMetadata(response) {
var result = null;
mediaGalleriesMetadata = {}; // Clear any previous metadata.
if (response) {
result = [];
for (var i = 0; i < response.length; i++) {
var filesystem = mediaGalleriesNatives.GetMediaFileSystemObject(
response[i].fsid);
$Array.push(result, filesystem);
var metadata = response[i];
delete metadata.fsid;
mediaGalleriesMetadata[filesystem.name] = metadata;
}
}
return result;
}
binding.registerCustomHook(function(bindingsAPI, extensionId) { binding.registerCustomHook(function(bindingsAPI, extensionId) {
var apiFunctions = bindingsAPI.apiFunctions; var apiFunctions = bindingsAPI.apiFunctions;
...@@ -18,21 +35,29 @@ binding.registerCustomHook(function(bindingsAPI, extensionId) { ...@@ -18,21 +35,29 @@ binding.registerCustomHook(function(bindingsAPI, extensionId) {
// return an array of file system objects. // return an array of file system objects.
apiFunctions.setCustomCallback('getMediaFileSystems', apiFunctions.setCustomCallback('getMediaFileSystems',
function(name, request, response) { function(name, request, response) {
var result = null; var result = createFileSystemObjectsAndUpdateMetadata(response);
mediaGalleriesMetadata = {}; // Clear any previous metadata. if (request.callback)
if (response) { request.callback(result);
result = []; request.callback = null;
for (var i = 0; i < response.length; i++) { });
var filesystem = mediaGalleriesNatives.GetMediaFileSystemObject(
response[i].fsid); // addUserSelectedFolder uses a custom callback so that it can instantiate
$Array.push(result, filesystem); // and return an array of file system objects.
var metadata = response[i]; apiFunctions.setCustomCallback('addUserSelectedFolder',
delete metadata.fsid; function(name, request, response) {
mediaGalleriesMetadata[filesystem.name] = metadata; var fileSystems = [];
var selectedFileSystemName = "";
if (response && 'mediaFileSystems' in response &&
'selectedFileSystemIndex' in response) {
fileSystems = createFileSystemObjectsAndUpdateMetadata(
response['mediaFileSystems']);
var selectedFileSystemIndex = response['selectedFileSystemIndex'];
if (selectedFileSystemIndex >= 0) {
selectedFileSystemName = fileSystems[selectedFileSystemIndex].name;
} }
} }
if (request.callback) if (request.callback)
request.callback(result); request.callback(fileSystems, selectedFileSystemName);
request.callback = null; request.callback = null;
}); });
......
...@@ -24537,6 +24537,7 @@ other types of suffix sets. ...@@ -24537,6 +24537,7 @@ other types of suffix sets.
<int value="649" label="MEDIAGALLERIES_GETMETADATA"/> <int value="649" label="MEDIAGALLERIES_GETMETADATA"/>
<int value="650" label="INPUT_IME_SENDKEYEVENTS"/> <int value="650" label="INPUT_IME_SENDKEYEVENTS"/>
<int value="651" label="INPUT_IME_HIDEINPUTVIEW"/> <int value="651" label="INPUT_IME_HIDEINPUTVIEW"/>
<int value="652" label="MEDIAGALLERIES_ADDUSERSELECTEDFOLDER"/>
</enum> </enum>
<enum name="ExtensionInstallCause" type="int"> <enum name="ExtensionInstallCause" type="int">
...@@ -27205,6 +27206,7 @@ other types of suffix sets. ...@@ -27205,6 +27206,7 @@ other types of suffix sets.
<int value="9" label="Preferences initialized"/> <int value="9" label="Preferences initialized"/>
<int value="10" label="Preferences initialization failed"/> <int value="10" label="Preferences initialization failed"/>
<int value="11" label="GetAllMediaFileSystemMetadata API invocations"/> <int value="11" label="GetAllMediaFileSystemMetadata API invocations"/>
<int value="12" label="AddUserSelectedFolder API invocations"/>
</enum> </enum>
<enum name="MediaKeyError" type="int"> <enum name="MediaKeyError" type="int">
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment