Commit d1282794 authored by Devlin Cronin's avatar Devlin Cronin Committed by Commit Bot

[Extensions + Apps] Move the mediaGalleries API

Move the mediaGalleries API out of extensions code and into apps
code. This includes the API implementation, schema definition, features
entries, and API permission info.

Bug: 877240

Change-Id: I8b750143cdcd36700f36d9da088ebaec4abd4cfe
Reviewed-on: https://chromium-review.googlesource.com/1255584Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarTommy Li <tommycli@chromium.org>
Commit-Queue: Devlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595866}
parent 3401067a
...@@ -27,15 +27,28 @@ source_set("api") { ...@@ -27,15 +27,28 @@ source_set("api") {
"browser/browser_api.h", "browser/browser_api.h",
"browser_context_keyed_service_factories.cc", "browser_context_keyed_service_factories.cc",
"browser_context_keyed_service_factories.h", "browser_context_keyed_service_factories.h",
"media_galleries/blob_data_source_factory.cc",
"media_galleries/blob_data_source_factory.h",
"media_galleries/media_galleries_api.cc",
"media_galleries/media_galleries_api.h",
"media_galleries/media_galleries_api_util.cc",
"media_galleries/media_galleries_api_util.h",
] ]
deps = [ deps = [
"//chrome/app:generated_resources_grit",
# TODO(https://crbug.com/883570): It'd be nice to have more APIs here # TODO(https://crbug.com/883570): It'd be nice to have more APIs here
# extracted into their own BUILD files (so they are easy to audit, add, or # extracted into their own BUILD files (so they are easy to audit, add, or
# remove), but any that depend on //chrome/browser:browser can't. # remove), but any that depend on //chrome/browser:browser can't.
"//chrome/browser/apps/platform_apps/api/music_manager_private", "//chrome/browser/apps/platform_apps/api/music_manager_private",
"//chrome/browser/extensions", "//chrome/browser/extensions",
"//chrome/browser/ui",
"//chrome/common",
"//chrome/common/apps/platform_apps/api", "//chrome/common/apps/platform_apps/api",
"//chrome/services/media_gallery_util/public/cpp",
"//components/storage_monitor",
"//components/web_modal",
"//extensions/browser", "//extensions/browser",
] ]
...@@ -52,7 +65,6 @@ source_set("api") { ...@@ -52,7 +65,6 @@ source_set("api") {
deps += [ deps += [
"//chrome:strings", "//chrome:strings",
"//chrome/browser/chromeos", "//chrome/browser/chromeos",
"//chrome/browser/ui",
"//chromeos/components/proximity_auth", "//chromeos/components/proximity_auth",
"//chromeos/components/proximity_auth/logging", "//chromeos/components/proximity_auth/logging",
"//components/account_id", "//components/account_id",
......
...@@ -2,12 +2,13 @@ ...@@ -2,12 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/extensions/api/media_galleries/blob_data_source_factory.h" #include "chrome/browser/apps/platform_apps/api/media_galleries/blob_data_source_factory.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "extensions/browser/blob_reader.h" #include "extensions/browser/blob_reader.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
namespace extensions { namespace chrome_apps {
namespace api {
namespace { namespace {
// Media data source that reads data from a blob in browser process. // Media data source that reads data from a blob in browser process.
...@@ -80,4 +81,5 @@ BlobDataSourceFactory::CreateMediaDataSource( ...@@ -80,4 +81,5 @@ BlobDataSourceFactory::CreateMediaDataSource(
blob_uuid_, media_data_callback); blob_uuid_, media_data_callback);
} }
} // namespace extensions } // namespace api
} // namespace chrome_apps
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_BLOB_DATA_SOURCE_FACTORY_H_ #ifndef CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_BLOB_DATA_SOURCE_FACTORY_H_
#define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_BLOB_DATA_SOURCE_FACTORY_H_ #define CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_BLOB_DATA_SOURCE_FACTORY_H_
#include <memory> #include <memory>
#include <string> #include <string>
...@@ -16,7 +16,8 @@ namespace content { ...@@ -16,7 +16,8 @@ namespace content {
class BrowserContext; class BrowserContext;
} // namespace content } // namespace content
namespace extensions { namespace chrome_apps {
namespace api {
// Factory to provide media data source for extension media gallery API. // Factory to provide media data source for extension media gallery API.
// Internally it will read media data from a blob in browser process. // Internally it will read media data from a blob in browser process.
...@@ -40,6 +41,7 @@ class BlobDataSourceFactory ...@@ -40,6 +41,7 @@ class BlobDataSourceFactory
DISALLOW_COPY_AND_ASSIGN(BlobDataSourceFactory); DISALLOW_COPY_AND_ASSIGN(BlobDataSourceFactory);
}; };
} // namespace extensions } // namespace api
} // namespace chrome_apps
#endif // CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_BLOB_DATA_SOURCE_FACTORY_H_ #endif // CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_BLOB_DATA_SOURCE_FACTORY_H_
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
// Defines the Chrome Extensions Media Galleries API functions for accessing // Defines the Chrome Extensions Media Galleries API functions for accessing
// user's media files, as specified in the extension API IDL. // user's media files, as specified in the extension API IDL.
#ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_ #ifndef CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_ #define CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_
#include <stdint.h> #include <stdint.h>
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include "chrome/browser/extensions/chrome_extension_function.h" #include "chrome/browser/extensions/chrome_extension_function.h"
#include "chrome/browser/media_galleries/gallery_watch_manager_observer.h" #include "chrome/browser/media_galleries/gallery_watch_manager_observer.h"
#include "chrome/browser/media_galleries/media_file_system_registry.h" #include "chrome/browser/media_galleries/media_file_system_registry.h"
#include "chrome/common/extensions/api/media_galleries.h" #include "chrome/common/apps/platform_apps/api/media_galleries.h"
#include "chrome/common/media_galleries/metadata_types.h" #include "chrome/common/media_galleries/metadata_types.h"
#include "chrome/services/media_gallery_util/public/mojom/media_parser.mojom.h" #include "chrome/services/media_gallery_util/public/mojom/media_parser.mojom.h"
#include "components/storage_monitor/media_storage_util.h" #include "components/storage_monitor/media_storage_util.h"
...@@ -28,19 +28,18 @@ ...@@ -28,19 +28,18 @@
#include "extensions/browser/event_router.h" #include "extensions/browser/event_router.h"
#include "extensions/browser/extension_event_histogram_value.h" #include "extensions/browser/extension_event_histogram_value.h"
namespace MediaGalleries = extensions::api::media_galleries;
namespace content { namespace content {
class BlobHandle; class BlobHandle;
} }
class SafeMediaMetadataParser; class SafeMediaMetadataParser;
namespace extensions { namespace chrome_apps {
namespace api {
// The profile-keyed service that manages the media galleries extension API. // The profile-keyed service that manages the media galleries extension API.
// Created at the same time as the Profile. This is also the event router. // Created at the same time as the Profile. This is also the event router.
class MediaGalleriesEventRouter : public BrowserContextKeyedAPI, class MediaGalleriesEventRouter : public extensions::BrowserContextKeyedAPI,
public GalleryWatchManagerObserver, public GalleryWatchManagerObserver,
public extensions::EventRouter::Observer { public extensions::EventRouter::Observer {
public: public:
...@@ -48,8 +47,8 @@ class MediaGalleriesEventRouter : public BrowserContextKeyedAPI, ...@@ -48,8 +47,8 @@ class MediaGalleriesEventRouter : public BrowserContextKeyedAPI,
void Shutdown() override; void Shutdown() override;
// BrowserContextKeyedAPI implementation. // BrowserContextKeyedAPI implementation.
static BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter>* static extensions::BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter>*
GetFactoryInstance(); GetFactoryInstance();
// Convenience method to get the MediaGalleriesAPI for a profile. // Convenience method to get the MediaGalleriesAPI for a profile.
static MediaGalleriesEventRouter* Get(content::BrowserContext* context); static MediaGalleriesEventRouter* Get(content::BrowserContext* context);
...@@ -57,20 +56,20 @@ class MediaGalleriesEventRouter : public BrowserContextKeyedAPI, ...@@ -57,20 +56,20 @@ class MediaGalleriesEventRouter : public BrowserContextKeyedAPI,
bool ExtensionHasGalleryChangeListener(const std::string& extension_id) const; bool ExtensionHasGalleryChangeListener(const std::string& extension_id) const;
private: private:
friend class BrowserContextKeyedAPIFactory<MediaGalleriesEventRouter>; friend class extensions::BrowserContextKeyedAPIFactory<
MediaGalleriesEventRouter>;
void DispatchEventToExtension(const std::string& extension_id, void DispatchEventToExtension(
events::HistogramValue histogram_value, const std::string& extension_id,
const std::string& event_name, extensions::events::HistogramValue histogram_value,
std::unique_ptr<base::ListValue> event_args); const std::string& event_name,
std::unique_ptr<base::ListValue> event_args);
explicit MediaGalleriesEventRouter(content::BrowserContext* context); explicit MediaGalleriesEventRouter(content::BrowserContext* context);
~MediaGalleriesEventRouter() override; ~MediaGalleriesEventRouter() override;
// BrowserContextKeyedAPI implementation. // BrowserContextKeyedAPI implementation.
static const char* service_name() { static const char* service_name() { return "MediaGalleriesAPI"; }
return "MediaGalleriesAPI";
}
static const bool kServiceIsNULLWhileTesting = true; static const bool kServiceIsNULLWhileTesting = true;
// GalleryWatchManagerObserver // GalleryWatchManagerObserver
...@@ -80,7 +79,7 @@ class MediaGalleriesEventRouter : public BrowserContextKeyedAPI, ...@@ -80,7 +79,7 @@ class MediaGalleriesEventRouter : public BrowserContextKeyedAPI,
MediaGalleryPrefId gallery_id) override; MediaGalleryPrefId gallery_id) override;
// extensions::EventRouter::Observer implementation. // extensions::EventRouter::Observer implementation.
void OnListenerRemoved(const EventListenerInfo& details) override; void OnListenerRemoved(const extensions::EventListenerInfo& details) override;
// Current profile. // Current profile.
Profile* profile_; Profile* profile_;
...@@ -103,7 +102,7 @@ class MediaGalleriesGetMediaFileSystemsFunction ...@@ -103,7 +102,7 @@ class MediaGalleriesGetMediaFileSystemsFunction
private: private:
// Bottom half for RunAsync, invoked after the preferences is initialized. // Bottom half for RunAsync, invoked after the preferences is initialized.
void OnPreferencesInit( void OnPreferencesInit(
MediaGalleries::GetMediaFileSystemsInteractivity interactive); media_galleries::GetMediaFileSystemsInteractivity interactive);
// Always show the dialog. // Always show the dialog.
void AlwaysShowDialog(const std::vector<MediaFileSystemInfo>& filesystems); void AlwaysShowDialog(const std::vector<MediaFileSystemInfo>& filesystems);
...@@ -171,10 +170,10 @@ class MediaGalleriesGetMetadataFunction : public ChromeAsyncExtensionFunction { ...@@ -171,10 +170,10 @@ class MediaGalleriesGetMetadataFunction : public ChromeAsyncExtensionFunction {
private: private:
// Bottom half for RunAsync, invoked after the preferences is initialized. // Bottom half for RunAsync, invoked after the preferences is initialized.
void OnPreferencesInit(MediaGalleries::GetMetadataType metadata_type, void OnPreferencesInit(media_galleries::GetMetadataType metadata_type,
const std::string& blob_uuid); const std::string& blob_uuid);
void GetMetadata(MediaGalleries::GetMetadataType metadata_type, void GetMetadata(media_galleries::GetMetadataType metadata_type,
const std::string& blob_uuid, const std::string& blob_uuid,
std::unique_ptr<std::string> blob_header, std::unique_ptr<std::string> blob_header,
int64_t total_blob_length); int64_t total_blob_length);
...@@ -223,6 +222,7 @@ class MediaGalleriesRemoveGalleryWatchFunction ...@@ -223,6 +222,7 @@ class MediaGalleriesRemoveGalleryWatchFunction
void OnPreferencesInit(const std::string& pref_id); void OnPreferencesInit(const std::string& pref_id);
}; };
} // namespace extensions } // namespace api
} // namespace chrome_apps
#endif // CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_ #endif // CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_H_
...@@ -2,12 +2,13 @@ ...@@ -2,12 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/extensions/api/media_galleries/media_galleries_api_util.h" #include "chrome/browser/apps/platform_apps/api/media_galleries/media_galleries_api_util.h"
#include "base/logging.h" #include "base/logging.h"
#include "chrome/common/extensions/api/media_galleries.h" #include "chrome/common/apps/platform_apps/api/media_galleries.h"
namespace extensions { namespace chrome_apps {
namespace api {
template <class T> template <class T>
void SetValueScopedPtr(T value, std::unique_ptr<T>* destination) { void SetValueScopedPtr(T value, std::unique_ptr<T>* destination) {
...@@ -27,7 +28,7 @@ void SetValueScopedPtr(std::string value, ...@@ -27,7 +28,7 @@ void SetValueScopedPtr(std::string value,
std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata( std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata(
chrome::mojom::MediaMetadataPtr metadata) { chrome::mojom::MediaMetadataPtr metadata) {
DCHECK(metadata); DCHECK(metadata);
extensions::api::media_galleries::MediaMetadata extension_metadata; media_galleries::MediaMetadata extension_metadata;
extension_metadata.mime_type = std::move(metadata->mime_type); extension_metadata.mime_type = std::move(metadata->mime_type);
if (metadata->height >= 0 && metadata->width >= 0) { if (metadata->height >= 0 && metadata->width >= 0) {
extension_metadata.height.reset(new int(metadata->height)); extension_metadata.height.reset(new int(metadata->height));
...@@ -49,7 +50,7 @@ std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata( ...@@ -49,7 +50,7 @@ std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata(
SetValueScopedPtr(metadata->track, &extension_metadata.track); SetValueScopedPtr(metadata->track, &extension_metadata.track);
for (const chrome::mojom::MediaStreamInfoPtr& info : metadata->raw_tags) { for (const chrome::mojom::MediaStreamInfoPtr& info : metadata->raw_tags) {
extensions::api::media_galleries::StreamInfo stream_info; media_galleries::StreamInfo stream_info;
stream_info.type = std::move(info->type); stream_info.type = std::move(info->type);
base::DictionaryValue* dict_value; base::DictionaryValue* dict_value;
info->additional_properties.GetAsDictionary(&dict_value); info->additional_properties.GetAsDictionary(&dict_value);
...@@ -60,4 +61,5 @@ std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata( ...@@ -60,4 +61,5 @@ std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata(
return extension_metadata.ToValue(); return extension_metadata.ToValue();
} }
} // namespace extensions } // namespace api
} // namespace chrome_apps
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_UTIL_H_ #ifndef CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_UTIL_H_
#define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_UTIL_H_ #define CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_UTIL_H_
#include <memory> #include <memory>
...@@ -13,13 +13,15 @@ namespace base { ...@@ -13,13 +13,15 @@ namespace base {
class DictionaryValue; class DictionaryValue;
} // namespace base } // namespace base
namespace extensions { namespace chrome_apps {
namespace api {
// Converts a mojo media metadata struct into a dictionary. Internally uses // Converts a mojo media metadata struct into a dictionary. Internally uses
// extension's auto generated serializer. // extension's auto generated serializer.
std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata( std::unique_ptr<base::DictionaryValue> SerializeMediaMetadata(
chrome::mojom::MediaMetadataPtr metadata); chrome::mojom::MediaMetadataPtr metadata);
} // namespace extensions } // namespace api
} // namespace chrome_apps
#endif // CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_UTIL_H_ #endif // CHROME_BROWSER_APPS_PLATFORM_APPS_API_MEDIA_GALLERIES_MEDIA_GALLERIES_API_UTIL_H_
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
#include "base/threading/thread_restrictions.h" #include "base/threading/thread_restrictions.h"
#include "base/values.h" #include "base/values.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/apps/platform_apps/api/media_galleries/media_galleries_api.h"
#include "chrome/browser/apps/platform_apps/app_browsertest_util.h" #include "chrome/browser/apps/platform_apps/app_browsertest_util.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/api/media_galleries/media_galleries_api.h"
#include "chrome/browser/media_galleries/media_file_system_registry.h" #include "chrome/browser/media_galleries/media_file_system_registry.h"
#include "chrome/browser/media_galleries/media_galleries_preferences.h" #include "chrome/browser/media_galleries/media_galleries_preferences.h"
#include "chrome/browser/media_galleries/media_galleries_test_util.h" #include "chrome/browser/media_galleries/media_galleries_test_util.h"
...@@ -156,8 +156,7 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest { ...@@ -156,8 +156,7 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest {
MediaGalleriesPreferences* preferences = GetAndInitializePreferences(); MediaGalleriesPreferences* preferences = GetAndInitializePreferences();
// Make a copy, as the iterator would be invalidated otherwise. // Make a copy, as the iterator would be invalidated otherwise.
const MediaGalleriesPrefInfoMap galleries = const MediaGalleriesPrefInfoMap galleries = preferences->known_galleries();
preferences->known_galleries();
for (MediaGalleriesPrefInfoMap::const_iterator it = galleries.begin(); for (MediaGalleriesPrefInfoMap::const_iterator it = galleries.begin();
it != galleries.end(); ++it) { it != galleries.end(); ++it) {
preferences->ForgetGalleryById(it->first); preferences->ForgetGalleryById(it->first);
...@@ -178,15 +177,11 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest { ...@@ -178,15 +177,11 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest {
ASSERT_FALSE(preferences->LookUpGalleryByPath( ASSERT_FALSE(preferences->LookUpGalleryByPath(
fake_gallery_temp_dir_.GetPath(), &gallery_info)); fake_gallery_temp_dir_.GetPath(), &gallery_info));
MediaGalleryPrefId id = preferences->AddGallery( MediaGalleryPrefId id = preferences->AddGallery(
gallery_info.device_id, gallery_info.device_id, gallery_info.path,
gallery_info.path, MediaGalleryPrefInfo::kAutoDetected, gallery_info.volume_label,
MediaGalleryPrefInfo::kAutoDetected, gallery_info.vendor_name, gallery_info.model_name,
gallery_info.volume_label, gallery_info.total_size_in_bytes, gallery_info.last_attach_time, 0, 0,
gallery_info.vendor_name, 0);
gallery_info.model_name,
gallery_info.total_size_in_bytes,
gallery_info.last_attach_time,
0, 0, 0);
if (pref_id) if (pref_id)
*pref_id = id; *pref_id = id;
...@@ -210,8 +205,8 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest { ...@@ -210,8 +205,8 @@ class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest {
base::FilePath GetCommonDataDir() const { base::FilePath GetCommonDataDir() const {
return test_data_dir_.AppendASCII("api_test") return test_data_dir_.AppendASCII("api_test")
.AppendASCII("media_galleries") .AppendASCII("media_galleries")
.AppendASCII("common"); .AppendASCII("common");
} }
int num_galleries() const { int num_galleries() const {
...@@ -256,15 +251,13 @@ class MediaGalleriesPlatformAppPpapiTest ...@@ -256,15 +251,13 @@ class MediaGalleriesPlatformAppPpapiTest
ASSERT_TRUE(base::PathService::Get(chrome::DIR_GEN_TEST_DATA, &app_dir_)); ASSERT_TRUE(base::PathService::Get(chrome::DIR_GEN_TEST_DATA, &app_dir_));
app_dir_ = app_dir_.AppendASCII("ppapi") app_dir_ = app_dir_.AppendASCII("ppapi")
.AppendASCII("tests") .AppendASCII("tests")
.AppendASCII("extensions") .AppendASCII("extensions")
.AppendASCII("media_galleries") .AppendASCII("media_galleries")
.AppendASCII("newlib"); .AppendASCII("newlib");
} }
const base::FilePath& app_dir() const { const base::FilePath& app_dir() const { return app_dir_; }
return app_dir_;
}
private: private:
base::FilePath app_dir_; base::FilePath app_dir_;
......
...@@ -151,18 +151,12 @@ class MediaGalleriesGalleryWatchApiTest : public extensions::ExtensionApiTest { ...@@ -151,18 +151,12 @@ class MediaGalleriesGalleryWatchApiTest : public extensions::ExtensionApiTest {
MediaGalleryPrefInfo gallery_info; MediaGalleryPrefInfo gallery_info;
ASSERT_FALSE(preferences->LookUpGalleryByPath(test_gallery_.GetPath(), ASSERT_FALSE(preferences->LookUpGalleryByPath(test_gallery_.GetPath(),
&gallery_info)); &gallery_info));
MediaGalleryPrefId id = MediaGalleryPrefId id = preferences->AddGallery(
preferences->AddGallery(gallery_info.device_id, gallery_info.device_id, gallery_info.path,
gallery_info.path, MediaGalleryPrefInfo::kAutoDetected, gallery_info.volume_label,
MediaGalleryPrefInfo::kAutoDetected, gallery_info.vendor_name, gallery_info.model_name,
gallery_info.volume_label, gallery_info.total_size_in_bytes, gallery_info.last_attach_time, 0, 0,
gallery_info.vendor_name, 0);
gallery_info.model_name,
gallery_info.total_size_in_bytes,
gallery_info.last_attach_time,
0,
0,
0);
preferences->SetGalleryPermissionForExtension(*extension_, id, true); preferences->SetGalleryPermissionForExtension(*extension_, id, true);
} }
...@@ -220,10 +214,9 @@ IN_PROC_BROWSER_TEST_F(MediaGalleriesGalleryWatchApiTest, ...@@ -220,10 +214,9 @@ IN_PROC_BROWSER_TEST_F(MediaGalleriesGalleryWatchApiTest,
kAddGalleryChangedListenerOK); kAddGalleryChangedListenerOK);
SetupGalleryWatches(); SetupGalleryWatches();
// Modify gallery contents; expect correct details. // Modify gallery contents; expect correct details.
ExtensionTestMessageListener got_correct_details( ExtensionTestMessageListener got_correct_details(kOnGalleryChangedCheckingOK,
kOnGalleryChangedCheckingOK, false); false);
ASSERT_TRUE(AddNewFileInTestGallery()); ASSERT_TRUE(AddNewFileInTestGallery());
EXPECT_TRUE(got_correct_details.WaitUntilSatisfied()); EXPECT_TRUE(got_correct_details.WaitUntilSatisfied());
} }
...@@ -287,6 +280,6 @@ IN_PROC_BROWSER_TEST_F(MediaGalleriesGalleryWatchApiTest, ...@@ -287,6 +280,6 @@ IN_PROC_BROWSER_TEST_F(MediaGalleriesGalleryWatchApiTest,
ExecuteCmdAndCheckReply(kAddGalleryChangedListenerCmd, ExecuteCmdAndCheckReply(kAddGalleryChangedListenerCmd,
kAddGalleryChangedListenerOK); kAddGalleryChangedListenerOK);
// Set up a invalid gallery watch. // Set up a invalid gallery watch.
ExecuteCmdAndCheckReply( ExecuteCmdAndCheckReply(kSetupWatchOnInvalidGalleryCmd,
kSetupWatchOnInvalidGalleryCmd, kAddGalleryWatchRequestFailed); kAddGalleryWatchRequestFailed);
} }
...@@ -238,12 +238,6 @@ jumbo_static_library("extensions") { ...@@ -238,12 +238,6 @@ jumbo_static_library("extensions") {
"api/language_settings_private/language_settings_private_delegate_factory.h", "api/language_settings_private/language_settings_private_delegate_factory.h",
"api/management/chrome_management_api_delegate.cc", "api/management/chrome_management_api_delegate.cc",
"api/management/chrome_management_api_delegate.h", "api/management/chrome_management_api_delegate.h",
"api/media_galleries/blob_data_source_factory.cc",
"api/media_galleries/blob_data_source_factory.h",
"api/media_galleries/media_galleries_api.cc",
"api/media_galleries/media_galleries_api.h",
"api/media_galleries/media_galleries_api_util.cc",
"api/media_galleries/media_galleries_api_util.h",
"api/messaging/chrome_messaging_delegate.cc", "api/messaging/chrome_messaging_delegate.cc",
"api/messaging/chrome_messaging_delegate.h", "api/messaging/chrome_messaging_delegate.h",
"api/messaging/incognito_connectability.cc", "api/messaging/incognito_connectability.cc",
...@@ -803,7 +797,6 @@ jumbo_static_library("extensions") { ...@@ -803,7 +797,6 @@ jumbo_static_library("extensions") {
"//chrome/common/extensions:mojo_bindings", "//chrome/common/extensions:mojo_bindings",
"//chrome/common/extensions/api:extensions_features", "//chrome/common/extensions/api:extensions_features",
"//chrome/common/safe_browsing:proto", "//chrome/common/safe_browsing:proto",
"//chrome/services/media_gallery_util/public/cpp",
"//chrome/services/removable_storage_writer/public/mojom", "//chrome/services/removable_storage_writer/public/mojom",
"//components/app_modal", "//components/app_modal",
"//components/autofill/content/browser", "//components/autofill/content/browser",
......
...@@ -15,6 +15,10 @@ ...@@ -15,6 +15,10 @@
"dependencies": ["permission:easyUnlockPrivate"], "dependencies": ["permission:easyUnlockPrivate"],
"contexts": ["blessed_extension"] "contexts": ["blessed_extension"]
}, },
"mediaGalleries": {
"dependencies": ["permission:mediaGalleries"],
"contexts": ["blessed_extension"]
},
"musicManagerPrivate": { "musicManagerPrivate": {
"dependencies": ["permission:musicManagerPrivate"], "dependencies": ["permission:musicManagerPrivate"],
"contexts": ["blessed_extension"] "contexts": ["blessed_extension"]
......
...@@ -17,6 +17,32 @@ ...@@ -17,6 +17,32 @@
"location": "component", "location": "component",
"platforms": ["chromeos"] "platforms": ["chromeos"]
}, },
"mediaGalleries": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
// TODO(devlin): These all specify the same permissions. There's no need for
// child features.
"mediaGalleries.allAutoDetected": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.scan": {
"channel": "dev",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.read": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.copyTo": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.delete": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"musicManagerPrivate": { "musicManagerPrivate": {
"channel": "stable", "channel": "stable",
"extension_types": ["platform_app"], "extension_types": ["platform_app"],
......
...@@ -7,7 +7,10 @@ import("//chrome/common/features.gni") ...@@ -7,7 +7,10 @@ import("//chrome/common/features.gni")
assert(enable_extensions) assert(enable_extensions)
chrome_apps_api_schema_files_ = [ "browser.idl" ] chrome_apps_api_schema_files_ = [
"browser.idl",
"media_galleries.idl",
]
if (is_chromeos) { if (is_chromeos) {
chrome_apps_api_schema_files_ += [ "easy_unlock_private.idl" ] chrome_apps_api_schema_files_ += [ "easy_unlock_private.idl" ]
......
...@@ -4,9 +4,17 @@ ...@@ -4,9 +4,17 @@
#include "chrome/common/apps/platform_apps/chrome_apps_api_permissions.h" #include "chrome/common/apps/platform_apps/chrome_apps_api_permissions.h"
#include "extensions/common/permissions/media_galleries_permission.h"
namespace chrome_apps_api_permissions { namespace chrome_apps_api_permissions {
namespace { namespace {
template <typename T>
extensions::APIPermission* CreateAPIPermission(
const extensions::APIPermissionInfo* permission) {
return new T(permission);
}
// WARNING: If you are modifying a permission message in this list, be sure to // WARNING: If you are modifying a permission message in this list, be sure to
// add the corresponding permission message rule to // add the corresponding permission message rule to
// ChromePermissionMessageProvider::GetPermissionMessages as well. // ChromePermissionMessageProvider::GetPermissionMessages as well.
...@@ -15,6 +23,9 @@ constexpr extensions::APIPermissionInfo::InitInfo permissions_to_register[] = { ...@@ -15,6 +23,9 @@ constexpr extensions::APIPermissionInfo::InitInfo permissions_to_register[] = {
{extensions::APIPermission::kEasyUnlockPrivate, "easyUnlockPrivate"}, {extensions::APIPermission::kEasyUnlockPrivate, "easyUnlockPrivate"},
{extensions::APIPermission::kMusicManagerPrivate, "musicManagerPrivate", {extensions::APIPermission::kMusicManagerPrivate, "musicManagerPrivate",
extensions::APIPermissionInfo::kFlagCannotBeOptional}, extensions::APIPermissionInfo::kFlagCannotBeOptional},
{extensions::APIPermission::kMediaGalleries, "mediaGalleries",
extensions::APIPermissionInfo::kFlagNone,
&CreateAPIPermission<extensions::MediaGalleriesPermission>},
}; };
} // namespace } // namespace
......
...@@ -570,10 +570,6 @@ ...@@ -570,10 +570,6 @@
"channel": "stable", "channel": "stable",
"contexts": ["blessed_extension"] "contexts": ["blessed_extension"]
}, },
"mediaGalleries": {
"dependencies": ["permission:mediaGalleries"],
"contexts": ["blessed_extension"]
},
"mediaPlayerPrivate": { "mediaPlayerPrivate": {
"dependencies": ["permission:mediaPlayerPrivate"], "dependencies": ["permission:mediaPlayerPrivate"],
"contexts": ["blessed_extension"] "contexts": ["blessed_extension"]
......
...@@ -515,30 +515,6 @@ ...@@ -515,30 +515,6 @@
"session_types": ["kiosk"] "session_types": ["kiosk"]
} }
], ],
"mediaGalleries": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.allAutoDetected": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.scan": {
"channel": "dev",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.read": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.copyTo": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaGalleries.delete": {
"channel": "stable",
"extension_types": [ "platform_app" ]
},
"mediaPlayerPrivate": { "mediaPlayerPrivate": {
"channel": "stable", "channel": "stable",
"extension_types": ["extension", "legacy_packaged_app", "platform_app"], "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
......
...@@ -48,7 +48,6 @@ schema_sources_ = [ ...@@ -48,7 +48,6 @@ schema_sources_ = [
"instance_id.json", "instance_id.json",
"language_settings_private.idl", "language_settings_private.idl",
"manifest_types.json", "manifest_types.json",
"media_galleries.idl",
"notifications.idl", "notifications.idl",
"omnibox.json", "omnibox.json",
"page_capture.json", "page_capture.json",
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "extensions/common/permissions/api_permission.h" #include "extensions/common/permissions/api_permission.h"
#include "extensions/common/permissions/api_permission_set.h" #include "extensions/common/permissions/api_permission_set.h"
#include "extensions/common/permissions/media_galleries_permission.h"
#include "extensions/common/permissions/permissions_info.h" #include "extensions/common/permissions/permissions_info.h"
#include "extensions/common/permissions/settings_override_permission.h" #include "extensions/common/permissions/settings_override_permission.h"
...@@ -205,9 +204,6 @@ constexpr APIPermissionInfo::InitInfo permissions_to_register[] = { ...@@ -205,9 +204,6 @@ constexpr APIPermissionInfo::InitInfo permissions_to_register[] = {
// Platform-app permissions. // Platform-app permissions.
{APIPermission::kFileSystemProvider, "fileSystemProvider"}, {APIPermission::kFileSystemProvider, "fileSystemProvider"},
{APIPermission::kMediaGalleries, "mediaGalleries",
APIPermissionInfo::kFlagNone,
&CreateAPIPermission<MediaGalleriesPermission>},
{APIPermission::kPointerLock, "pointerLock"}, {APIPermission::kPointerLock, "pointerLock"},
{APIPermission::kCastStreaming, "cast.streaming"}, {APIPermission::kCastStreaming, "cast.streaming"},
{APIPermission::kLauncherSearchProvider, "launcherSearchProvider"}, {APIPermission::kLauncherSearchProvider, "launcherSearchProvider"},
......
...@@ -1203,6 +1203,8 @@ test("browser_tests") { ...@@ -1203,6 +1203,8 @@ test("browser_tests") {
sources += [ sources += [
"../browser/accessibility/accessibility_extension_api_browsertest.cc", "../browser/accessibility/accessibility_extension_api_browsertest.cc",
"../browser/apps/platform_apps/api/browser/browser_apitest.cc", "../browser/apps/platform_apps/api/browser/browser_apitest.cc",
"../browser/apps/platform_apps/api/media_galleries/media_galleries_apitest.cc",
"../browser/apps/platform_apps/api/media_galleries/media_galleries_watch_apitest.cc",
"../browser/apps/platform_apps/api/music_manager_private/music_manager_private_browsertest.cc", "../browser/apps/platform_apps/api/music_manager_private/music_manager_private_browsertest.cc",
"../browser/apps/platform_apps/app_browsertest_util.cc", "../browser/apps/platform_apps/app_browsertest_util.cc",
"../browser/apps/platform_apps/app_browsertest_util.h", "../browser/apps/platform_apps/app_browsertest_util.h",
...@@ -1261,8 +1263,6 @@ test("browser_tests") { ...@@ -1261,8 +1263,6 @@ test("browser_tests") {
"../browser/extensions/api/management/management_api_browsertest.cc", "../browser/extensions/api/management/management_api_browsertest.cc",
"../browser/extensions/api/management/management_apitest.cc", "../browser/extensions/api/management/management_apitest.cc",
"../browser/extensions/api/management/management_browsertest.cc", "../browser/extensions/api/management/management_browsertest.cc",
"../browser/extensions/api/media_galleries/media_galleries_apitest.cc",
"../browser/extensions/api/media_galleries/media_galleries_watch_apitest.cc",
"../browser/extensions/api/messaging/native_messaging_apitest.cc", "../browser/extensions/api/messaging/native_messaging_apitest.cc",
"../browser/extensions/api/metrics_private/metrics_apitest.cc", "../browser/extensions/api/metrics_private/metrics_apitest.cc",
"../browser/extensions/api/module/module_apitest.cc", "../browser/extensions/api/module/module_apitest.cc",
......
...@@ -25,6 +25,7 @@ namespace extensions { ...@@ -25,6 +25,7 @@ namespace extensions {
// {"mediaGalleries": "read delete"}, // {"mediaGalleries": "read delete"},
// We also allow a permission without any sub-permissions: // We also allow a permission without any sub-permissions:
// "mediaGalleries", // "mediaGalleries",
// TODO(devlin): Move this class to chrome/common/apps/platform_apps.
class MediaGalleriesPermission class MediaGalleriesPermission
: public SetDisjunctionPermission<MediaGalleriesPermissionData, : public SetDisjunctionPermission<MediaGalleriesPermissionData,
MediaGalleriesPermission> { MediaGalleriesPermission> {
......
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