Commit 89df1e83 authored by vandebo@chromium.org's avatar vandebo@chromium.org

Enable gallery watches on Mac

Resubmit of https://codereview.chromium.org/332003002

BUG=144491

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277871 0039d316-1c4b-4281-b951-d872f2087c98
parent 593ae88a
...@@ -92,15 +92,12 @@ GalleryWatchStateTracker::~GalleryWatchStateTracker() { ...@@ -92,15 +92,12 @@ GalleryWatchStateTracker::~GalleryWatchStateTracker() {
GalleryWatchStateTracker* GalleryWatchStateTracker::GetForProfile( GalleryWatchStateTracker* GalleryWatchStateTracker::GetForProfile(
Profile* profile) { Profile* profile) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
#if defined(OS_WIN) || defined(OS_LINUX)
// Gallery watch operation is not supported on Mac: crbug.com/144491.
DCHECK(profile); DCHECK(profile);
MediaGalleriesPrivateAPI* private_api = MediaGalleriesPrivateAPI* private_api =
MediaGalleriesPrivateAPI::Get(profile); MediaGalleriesPrivateAPI::Get(profile);
// In unit tests, we don't have a MediaGalleriesPrivateAPI. // In unit tests, we don't have a MediaGalleriesPrivateAPI.
if (private_api) if (private_api)
return private_api->GetGalleryWatchStateTracker(); return private_api->GetGalleryWatchStateTracker();
#endif
return NULL; return NULL;
} }
......
...@@ -192,7 +192,6 @@ void MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferencesInit( ...@@ -192,7 +192,6 @@ void MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferencesInit(
return; return;
} }
#if defined(OS_WIN) || defined(OS_LINUX)
MediaGalleriesPrivateEventRouter* router = MediaGalleriesPrivateEventRouter* router =
MediaGalleriesPrivateAPI::Get(GetProfile())->GetEventRouter(); MediaGalleriesPrivateAPI::Get(GetProfile())->GetEventRouter();
DCHECK(router); DCHECK(router);
...@@ -208,11 +207,6 @@ void MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferencesInit( ...@@ -208,11 +207,6 @@ void MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferencesInit(
base::Bind(&MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse, base::Bind(&MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse,
this, this,
gallery_pref_id)); gallery_pref_id));
#else
// Recursive gallery watch operation is not currently supported on Mac:
// crbug.com/144491
HandleResponse(gallery_pref_id, false);
#endif
} }
void MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse( void MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse(
...@@ -248,8 +242,6 @@ bool MediaGalleriesPrivateRemoveGalleryWatchFunction::RunAsync() { ...@@ -248,8 +242,6 @@ bool MediaGalleriesPrivateRemoveGalleryWatchFunction::RunAsync() {
if (!render_view_host() || !render_view_host()->GetProcess()) if (!render_view_host() || !render_view_host()->GetProcess())
return false; return false;
// Remove gallery watch operation is currently supported on Mac:
// crbug.com/144491
scoped_ptr<RemoveGalleryWatch::Params> params( scoped_ptr<RemoveGalleryWatch::Params> params(
RemoveGalleryWatch::Params::Create(*args_)); RemoveGalleryWatch::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get()); EXTENSION_FUNCTION_VALIDATE(params.get());
...@@ -266,7 +258,6 @@ bool MediaGalleriesPrivateRemoveGalleryWatchFunction::RunAsync() { ...@@ -266,7 +258,6 @@ bool MediaGalleriesPrivateRemoveGalleryWatchFunction::RunAsync() {
void MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferencesInit( void MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferencesInit(
const std::string& pref_id) { const std::string& pref_id) {
#if defined(OS_WIN) || defined(OS_LINUX)
base::FilePath gallery_file_path; base::FilePath gallery_file_path;
MediaGalleryPrefId gallery_pref_id = 0; MediaGalleryPrefId gallery_pref_id = 0;
if (!GetGalleryFilePathAndId(pref_id, if (!GetGalleryFilePathAndId(pref_id,
...@@ -290,7 +281,6 @@ void MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferencesInit( ...@@ -290,7 +281,6 @@ void MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferencesInit(
GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get( GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get(
GetProfile())->GetGalleryWatchStateTracker(); GetProfile())->GetGalleryWatchStateTracker();
state_tracker->OnGalleryWatchRemoved(extension_id(), gallery_pref_id); state_tracker->OnGalleryWatchRemoved(extension_id(), gallery_pref_id);
#endif
SendResponse(true); SendResponse(true);
} }
...@@ -318,7 +308,6 @@ bool MediaGalleriesPrivateGetAllGalleryWatchFunction::RunAsync() { ...@@ -318,7 +308,6 @@ bool MediaGalleriesPrivateGetAllGalleryWatchFunction::RunAsync() {
void MediaGalleriesPrivateGetAllGalleryWatchFunction::OnPreferencesInit() { void MediaGalleriesPrivateGetAllGalleryWatchFunction::OnPreferencesInit() {
std::vector<std::string> result; std::vector<std::string> result;
#if defined(OS_WIN) || defined(OS_LINUX)
GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get( GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get(
GetProfile())->GetGalleryWatchStateTracker(); GetProfile())->GetGalleryWatchStateTracker();
MediaGalleryPrefIdSet gallery_ids = MediaGalleryPrefIdSet gallery_ids =
...@@ -327,7 +316,6 @@ void MediaGalleriesPrivateGetAllGalleryWatchFunction::OnPreferencesInit() { ...@@ -327,7 +316,6 @@ void MediaGalleriesPrivateGetAllGalleryWatchFunction::OnPreferencesInit() {
iter != gallery_ids.end(); ++iter) { iter != gallery_ids.end(); ++iter) {
result.push_back(base::Uint64ToString(*iter)); result.push_back(base::Uint64ToString(*iter));
} }
#endif
results_ = GetAllGalleryWatch::Results::Create(result); results_ = GetAllGalleryWatch::Results::Create(result);
SendResponse(true); SendResponse(true);
} }
...@@ -355,7 +343,6 @@ bool MediaGalleriesPrivateRemoveAllGalleryWatchFunction::RunAsync() { ...@@ -355,7 +343,6 @@ bool MediaGalleriesPrivateRemoveAllGalleryWatchFunction::RunAsync() {
} }
void MediaGalleriesPrivateRemoveAllGalleryWatchFunction::OnPreferencesInit() { void MediaGalleriesPrivateRemoveAllGalleryWatchFunction::OnPreferencesInit() {
#if defined(OS_WIN) || defined(OS_LINUX)
MediaGalleriesPreferences* preferences = MediaGalleriesPreferences* preferences =
g_browser_process->media_file_system_registry()->GetPreferences( g_browser_process->media_file_system_registry()->GetPreferences(
GetProfile()); GetProfile());
...@@ -363,7 +350,6 @@ void MediaGalleriesPrivateRemoveAllGalleryWatchFunction::OnPreferencesInit() { ...@@ -363,7 +350,6 @@ void MediaGalleriesPrivateRemoveAllGalleryWatchFunction::OnPreferencesInit() {
GetProfile())->GetGalleryWatchStateTracker(); GetProfile())->GetGalleryWatchStateTracker();
state_tracker->RemoveAllGalleryWatchersForExtension( state_tracker->RemoveAllGalleryWatchersForExtension(
extension_id(), preferences); extension_id(), preferences);
#endif
SendResponse(true); SendResponse(true);
} }
......
...@@ -6,12 +6,17 @@ ...@@ -6,12 +6,17 @@
#include "base/file_util.h" #include "base/file_util.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/files/file_path_watcher.h"
#include "base/path_service.h" #include "base/path_service.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_test_message_listener.h" #include "chrome/browser/extensions/extension_test_message_listener.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_test_util.h" #include "chrome/browser/media_galleries/media_galleries_test_util.h"
#include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_paths.h"
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
...@@ -27,19 +32,16 @@ namespace { ...@@ -27,19 +32,16 @@ namespace {
const char kTestExtensionId[] = "gceegfkgibmgpfopknlcgleimclbknie"; const char kTestExtensionId[] = "gceegfkgibmgpfopknlcgleimclbknie";
const char kTestExtensionPath[] = "media_galleries_private/gallerywatch"; const char kTestExtensionPath[] = "media_galleries_private/gallerywatch";
#if !defined(OS_CHROMEOS)
// JS commands. // JS commands.
const char kGetAllWatchedGalleryIdsCmd[] = "getAllWatchedGalleryIds()"; const char kGetAllWatchedGalleryIdsCmd[] = "getAllWatchedGalleryIds()";
const char kGetMediaFileSystemsCmd[] = "getMediaFileSystems()"; const char kGetMediaFileSystemsCmd[] = "getMediaFileSystems()";
const char kSetupWatchOnValidGalleriesCmd[] = "setupWatchOnValidGalleries()"; const char kSetupWatchOnValidGalleriesCmd[] = "setupWatchOnValidGalleries()";
#if defined(OS_WIN) || defined(OS_LINUX)
const char kAddGalleryChangedListenerCmd[] = "addGalleryChangedListener()"; const char kAddGalleryChangedListenerCmd[] = "addGalleryChangedListener()";
const char kRemoveAllGalleryWatchCmd[] = "removeAllGalleryWatch()"; const char kRemoveAllGalleryWatchCmd[] = "removeAllGalleryWatch()";
const char kRemoveGalleryChangedListenerCmd[] = const char kRemoveGalleryChangedListenerCmd[] =
"removeGalleryChangedListener()"; "removeGalleryChangedListener()";
const char kRemoveGalleryWatchCmd[] = "removeGalleryWatch()"; const char kRemoveGalleryWatchCmd[] = "removeGalleryWatch()";
const char kSetupWatchOnInvalidGalleryCmd[] = "setupWatchOnInvalidGallery()"; const char kSetupWatchOnInvalidGalleryCmd[] = "setupWatchOnInvalidGallery()";
#endif // defined(OS_WIN) || defined(OS_LINUX)
// And JS reply messages. // And JS reply messages.
const char kAddGalleryWatchOK[] = "add_gallery_watch_ok"; const char kAddGalleryWatchOK[] = "add_gallery_watch_ok";
...@@ -47,24 +49,18 @@ const char kGetAllGalleryWatchOK[] = "get_all_gallery_watch_ok"; ...@@ -47,24 +49,18 @@ const char kGetAllGalleryWatchOK[] = "get_all_gallery_watch_ok";
const char kGetMediaFileSystemsCallbackOK[] = const char kGetMediaFileSystemsCallbackOK[] =
"get_media_file_systems_callback_ok"; "get_media_file_systems_callback_ok";
const char kGetMediaFileSystemsOK[] = "get_media_file_systems_ok"; const char kGetMediaFileSystemsOK[] = "get_media_file_systems_ok";
#if defined(OS_WIN) || defined(OS_LINUX)
const char kAddGalleryChangedListenerOK[] = "add_gallery_changed_listener_ok"; const char kAddGalleryChangedListenerOK[] = "add_gallery_changed_listener_ok";
const char kRemoveAllGalleryWatchOK[] = "remove_all_gallery_watch_ok"; const char kRemoveAllGalleryWatchOK[] = "remove_all_gallery_watch_ok";
const char kRemoveGalleryChangedListenerOK[] = const char kRemoveGalleryChangedListenerOK[] =
"remove_gallery_changed_listener_ok"; "remove_gallery_changed_listener_ok";
const char kRemoveGalleryWatchOK[] = "remove_gallery_watch_ok"; const char kRemoveGalleryWatchOK[] = "remove_gallery_watch_ok";
#endif // defined(OS_WIN) || defined(OS_LINUX)
// Test reply messages. // Test reply messages.
const char kGetAllGalleryWatchResultA[] = "gallery_watchers_does_not_exists"; const char kNoGalleryWatchesInstalled[] = "gallery_watchers_does_not_exists";
const char kAddGalleryWatchRequestFailed[] = "add_watch_request_failed"; const char kAddGalleryWatchRequestFailed[] = "add_watch_request_failed";
#if defined(OS_WIN) || defined(OS_LINUX)
const char kAddGalleryWatchRequestSucceeded[] = "add_watch_request_succeeded"; const char kAddGalleryWatchRequestSucceeded[] = "add_watch_request_succeeded";
const char kGalleryChangedEventReceived[] = "gallery_changed_event_received"; const char kGalleryChangedEventReceived[] = "gallery_changed_event_received";
const char kGetAllGalleryWatchResultB[] = const char kGalleryWatchesCheck[] = "gallery_watcher_checks";
"watchers_for_galleries_{1, 2, 3}_found";
#endif // defined(OS_WIN) || defined(OS_LINUX)
#endif // !defined(OS_CHROMEOS)
} // namespace } // namespace
...@@ -75,7 +71,10 @@ const char kGetAllGalleryWatchResultB[] = ...@@ -75,7 +71,10 @@ const char kGetAllGalleryWatchResultB[] =
class MediaGalleriesPrivateGalleryWatchApiTest : public ExtensionApiTest { class MediaGalleriesPrivateGalleryWatchApiTest : public ExtensionApiTest {
public: public:
MediaGalleriesPrivateGalleryWatchApiTest() {} MediaGalleriesPrivateGalleryWatchApiTest()
: extension_(NULL),
background_host_(NULL) {
}
virtual ~MediaGalleriesPrivateGalleryWatchApiTest() {} virtual ~MediaGalleriesPrivateGalleryWatchApiTest() {}
protected: protected:
...@@ -86,345 +85,255 @@ class MediaGalleriesPrivateGalleryWatchApiTest : public ExtensionApiTest { ...@@ -86,345 +85,255 @@ class MediaGalleriesPrivateGalleryWatchApiTest : public ExtensionApiTest {
extensions::switches::kWhitelistedExtensionID, extensions::switches::kWhitelistedExtensionID,
kTestExtensionId); kTestExtensionId);
} }
virtual void SetUpOnMainThread() OVERRIDE {
ExtensionApiTest::SetUpOnMainThread();
ensure_media_directories_exists_.reset(new EnsureMediaDirectoriesExists);
extension_ = LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath));
GetBackgroundHostForTestExtension();
CreateTestGallery();
FetchMediaGalleriesList();
}
virtual void TearDownOnMainThread() OVERRIDE {
extension_ = NULL;
background_host_ = NULL;
ensure_media_directories_exists_.reset();
ExtensionApiTest::TearDownOnMainThread();
}
void ExecuteCmdAndCheckReply(content::RenderViewHost* host, bool GalleryWatchesSupported() {
const std::string& js_command, return base::FilePathWatcher::RecursiveWatchAvailable();
const std::string& ok_message) { }
void ExecuteCmdAndCheckReply(const std::string& js_command,
const std::string& ok_message) {
ExtensionTestMessageListener listener(ok_message, false); ExtensionTestMessageListener listener(ok_message, false);
host->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16(js_command)); background_host_->GetMainFrame()->ExecuteJavaScript(
base::ASCIIToUTF16(js_command));
EXPECT_TRUE(listener.WaitUntilSatisfied()); EXPECT_TRUE(listener.WaitUntilSatisfied());
} }
bool AddNewFileInGallery(int gallery_directory_key) { bool AddNewFileInTestGallery() {
if ((gallery_directory_key != chrome::DIR_USER_MUSIC) &&
(gallery_directory_key != chrome::DIR_USER_PICTURES) &&
(gallery_directory_key != chrome::DIR_USER_VIDEOS))
return false;
base::FilePath gallery_dir;
if (!PathService::Get(gallery_directory_key, &gallery_dir))
return false;
base::FilePath gallery_file = base::FilePath gallery_file =
gallery_dir.Append(FILE_PATH_LITERAL("test1.txt")); test_gallery_.path().Append(FILE_PATH_LITERAL("test1.txt"));
std::string content("new content"); std::string content("new content");
int write_size = base::WriteFile(gallery_file, content.c_str(), int write_size = base::WriteFile(gallery_file, content.c_str(),
content.length()); content.length());
return (write_size == static_cast<int>(content.length())); return (write_size == static_cast<int>(content.length()));
} }
// Loads the test extension and returns the RenderViewHost of the extension. void SetupGalleryWatches() {
// Returns NULL if the extension load operation failed. std::string expected_result = GalleryWatchesSupported() ?
content::RenderViewHost* GetBackgroundHostForTestExtension() { kAddGalleryWatchRequestSucceeded : kAddGalleryWatchRequestFailed;
const extensions::Extension* extension =
LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath)); ExtensionTestMessageListener add_gallery_watch_finished(
if (!extension) expected_result, false /* no reply */);
return NULL; ExecuteCmdAndCheckReply(kSetupWatchOnValidGalleriesCmd, kAddGalleryWatchOK);
return extensions::ExtensionSystem::Get(browser()->profile())-> EXPECT_TRUE(add_gallery_watch_finished.WaitUntilSatisfied());
process_manager()->GetBackgroundHostForExtension(extension->id())->
render_view_host();
} }
private: private:
void GetBackgroundHostForTestExtension() {
ASSERT_TRUE(extension_);
extensions::ExtensionSystem* extension_system =
extensions::ExtensionSystem::Get(browser()->profile());
background_host_ =
extension_system->process_manager()->GetBackgroundHostForExtension(
extension_->id())->render_view_host();
ASSERT_TRUE(background_host_);
}
void CreateTestGallery() {
MediaGalleriesPreferences* preferences =
g_browser_process->media_file_system_registry()->GetPreferences(
browser()->profile());
base::RunLoop runloop;
preferences->EnsureInitialized(runloop.QuitClosure());
runloop.Run();
ASSERT_TRUE(test_gallery_.CreateUniqueTempDir());
MediaGalleryPrefInfo gallery_info;
ASSERT_FALSE(preferences->LookUpGalleryByPath(test_gallery_.path(),
&gallery_info));
MediaGalleryPrefId id = preferences->AddGallery(
gallery_info.device_id,
gallery_info.path,
MediaGalleryPrefInfo::kAutoDetected,
gallery_info.volume_label,
gallery_info.vendor_name,
gallery_info.model_name,
gallery_info.total_size_in_bytes,
gallery_info.last_attach_time,
0, 0, 0);
preferences->SetGalleryPermissionForExtension(*extension_, id, true);
}
void FetchMediaGalleriesList() {
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(kGetMediaFileSystemsCmd, kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
}
scoped_ptr<EnsureMediaDirectoriesExists> ensure_media_directories_exists_;
base::ScopedTempDir test_gallery_;
const extensions::Extension* extension_;
content::RenderViewHost* background_host_;
DISALLOW_COPY_AND_ASSIGN(MediaGalleriesPrivateGalleryWatchApiTest); DISALLOW_COPY_AND_ASSIGN(MediaGalleriesPrivateGalleryWatchApiTest);
}; };
#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
BasicGalleryWatch) { BasicGalleryWatch) {
EnsureMediaDirectoriesExists media_directories; SetupGalleryWatches();
content::RenderViewHost* host = GetBackgroundHostForTestExtension();
ASSERT_TRUE(host);
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Set up gallery watch.
ExtensionTestMessageListener add_gallery_watch_finished(
kAddGalleryWatchRequestSucceeded, false /* no reply */);
ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd,
kAddGalleryWatchOK);
EXPECT_TRUE(add_gallery_watch_finished.WaitUntilSatisfied());
// Add gallery watch listener. // Add gallery watch listener.
ExecuteCmdAndCheckReply(host, kAddGalleryChangedListenerCmd, ExecuteCmdAndCheckReply(kAddGalleryChangedListenerCmd,
kAddGalleryChangedListenerOK); kAddGalleryChangedListenerOK);
// Modify gallery contents. // Modify gallery contents.
ExtensionTestMessageListener music_gallery_change_event_received( ExtensionTestMessageListener gallery_change_event_received(
kGalleryChangedEventReceived, false /* no reply */);
ASSERT_TRUE(AddNewFileInGallery(chrome::DIR_USER_MUSIC));
EXPECT_TRUE(music_gallery_change_event_received.WaitUntilSatisfied());
ExtensionTestMessageListener pictures_gallery_change_event_received(
kGalleryChangedEventReceived, false /* no reply */);
ASSERT_TRUE(AddNewFileInGallery(chrome::DIR_USER_PICTURES));
EXPECT_TRUE(pictures_gallery_change_event_received.WaitUntilSatisfied());
ExtensionTestMessageListener videos_gallery_change_event_received(
kGalleryChangedEventReceived, false /* no reply */); kGalleryChangedEventReceived, false /* no reply */);
ASSERT_TRUE(AddNewFileInGallery(chrome::DIR_USER_VIDEOS)); ASSERT_TRUE(AddNewFileInTestGallery());
EXPECT_TRUE(videos_gallery_change_event_received.WaitUntilSatisfied()); if (GalleryWatchesSupported())
EXPECT_TRUE(gallery_change_event_received.WaitUntilSatisfied());
// Remove gallery watch listener. // Remove gallery watch listener.
ExecuteCmdAndCheckReply(host, kRemoveGalleryChangedListenerCmd, ExecuteCmdAndCheckReply(kRemoveGalleryChangedListenerCmd,
kRemoveGalleryChangedListenerOK); kRemoveGalleryChangedListenerOK);
// Remove gallery watch request. // Remove gallery watch request.
ExecuteCmdAndCheckReply(host, kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK); if (GalleryWatchesSupported())
ExecuteCmdAndCheckReply(kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK);
} }
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
RemoveListenerAndModifyGallery) { RemoveListenerAndModifyGallery) {
EnsureMediaDirectoriesExists media_directories; if (!GalleryWatchesSupported())
content::RenderViewHost* host = GetBackgroundHostForTestExtension(); return;
ASSERT_TRUE(host);
SetupGalleryWatches();
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Set up gallery watch.
ExtensionTestMessageListener add_gallery_watch_finished(
kAddGalleryWatchRequestSucceeded, false /* no reply */);
ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd,
kAddGalleryWatchOK);
EXPECT_TRUE(add_gallery_watch_finished.WaitUntilSatisfied());
// Add a gallery watch listener. // Add a gallery watch listener.
ExecuteCmdAndCheckReply(host, kAddGalleryChangedListenerCmd, ExecuteCmdAndCheckReply(kAddGalleryChangedListenerCmd,
kAddGalleryChangedListenerOK); kAddGalleryChangedListenerOK);
// Modify gallery contents. // Modify gallery contents.
ExtensionTestMessageListener music_gallery_change_event_received( ExtensionTestMessageListener gallery_change_event_received(
kGalleryChangedEventReceived, false /* no reply */); kGalleryChangedEventReceived, false /* no reply */);
ASSERT_TRUE(AddNewFileInGallery(chrome::DIR_USER_MUSIC)); ASSERT_TRUE(AddNewFileInTestGallery());
EXPECT_TRUE(music_gallery_change_event_received.WaitUntilSatisfied()); EXPECT_TRUE(gallery_change_event_received.WaitUntilSatisfied());
// Remove gallery watch listener. // Remove gallery watch listener.
ExecuteCmdAndCheckReply(host, kRemoveGalleryChangedListenerCmd, ExecuteCmdAndCheckReply(kRemoveGalleryChangedListenerCmd,
kRemoveGalleryChangedListenerOK); kRemoveGalleryChangedListenerOK);
// No listener, modify gallery contents. // No listener, modify gallery contents.
ASSERT_TRUE(AddNewFileInGallery(chrome::DIR_USER_MUSIC)); ASSERT_TRUE(AddNewFileInTestGallery());
// Remove gallery watch. // Remove gallery watch.
ExecuteCmdAndCheckReply(host, kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK); ExecuteCmdAndCheckReply(kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK);
} }
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
SetupGalleryWatchWithoutListeners) { SetupGalleryWatchWithoutListeners) {
EnsureMediaDirectoriesExists media_directories; if (!GalleryWatchesSupported())
content::RenderViewHost* host = GetBackgroundHostForTestExtension(); return;
ASSERT_TRUE(host);
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Set up gallery watch. SetupGalleryWatches();
ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd,
kAddGalleryWatchOK);
// No listeners, modify gallery contents. // No listeners, modify gallery contents.
ExtensionTestMessageListener music_gallery_change_event_received( ExtensionTestMessageListener gallery_change_event_received(
kGalleryChangedEventReceived, false /* no reply */); kGalleryChangedEventReceived, false /* no reply */);
ASSERT_TRUE(AddNewFileInGallery(chrome::DIR_USER_MUSIC)); ASSERT_TRUE(AddNewFileInTestGallery());
// Remove gallery watch. // Remove gallery watch.
ExecuteCmdAndCheckReply(host, kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK); ExecuteCmdAndCheckReply(kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK);
} }
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
SetupGalleryChangedListenerWithoutWatchers) { SetupGalleryChangedListenerWithoutWatchers) {
EnsureMediaDirectoriesExists media_directories;
content::RenderViewHost* host = GetBackgroundHostForTestExtension();
ASSERT_TRUE(host);
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Add gallery watch listener. // Add gallery watch listener.
ExecuteCmdAndCheckReply(host, kAddGalleryChangedListenerCmd, ExecuteCmdAndCheckReply(kAddGalleryChangedListenerCmd,
kAddGalleryChangedListenerOK); kAddGalleryChangedListenerOK);
// Modify gallery contents. Listener should not get called because add watch // Modify gallery contents. Listener should not get called because add watch
// request was not called. // request was not called.
ExtensionTestMessageListener music_gallery_change_event_received( ExtensionTestMessageListener gallery_change_event_received(
kGalleryChangedEventReceived, false /* no reply */); kGalleryChangedEventReceived, false /* no reply */);
ASSERT_TRUE(AddNewFileInGallery(chrome::DIR_USER_MUSIC)); ASSERT_TRUE(AddNewFileInTestGallery());
// Remove gallery watch listener. // Remove gallery watch listener.
ExecuteCmdAndCheckReply(host, kRemoveGalleryChangedListenerCmd, ExecuteCmdAndCheckReply(kRemoveGalleryChangedListenerCmd,
kRemoveGalleryChangedListenerOK); kRemoveGalleryChangedListenerOK);
} }
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
SetupWatchOnInvalidGallery) { SetupWatchOnInvalidGallery) {
content::RenderViewHost* host = GetBackgroundHostForTestExtension();
ASSERT_TRUE(host);
// Set up a invalid gallery watch. // Set up a invalid gallery watch.
ExtensionTestMessageListener invalid_gallery_watch_request_finished( ExtensionTestMessageListener invalid_gallery_watch_request_finished(
kAddGalleryWatchRequestFailed, false /* no reply */); kAddGalleryWatchRequestFailed, false /* no reply */);
ExecuteCmdAndCheckReply(host, kSetupWatchOnInvalidGalleryCmd, ExecuteCmdAndCheckReply(kSetupWatchOnInvalidGalleryCmd, kAddGalleryWatchOK);
kAddGalleryWatchOK);
EXPECT_TRUE(invalid_gallery_watch_request_finished.WaitUntilSatisfied()); EXPECT_TRUE(invalid_gallery_watch_request_finished.WaitUntilSatisfied());
} }
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
GetAllGalleryWatch) { GetAllGalleryWatch) {
EnsureMediaDirectoriesExists media_directories;
content::RenderViewHost* host = GetBackgroundHostForTestExtension();
ASSERT_TRUE(host);
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Gallery watchers are not yet added. // Gallery watchers are not yet added.
// chrome.mediaGalleriesPrivate.getAllGalleryWatch should return an empty // chrome.mediaGalleriesPrivate.getAllGalleryWatch should return an empty
// list. // list.
ExtensionTestMessageListener initial_get_all_check_finished( ExtensionTestMessageListener initial_get_all_check_finished(
kGetAllGalleryWatchResultA, false /* no reply */); kNoGalleryWatchesInstalled, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetAllWatchedGalleryIdsCmd, ExecuteCmdAndCheckReply(kGetAllWatchedGalleryIdsCmd, kGetAllGalleryWatchOK);
kGetAllGalleryWatchOK);
EXPECT_TRUE(initial_get_all_check_finished.WaitUntilSatisfied()); EXPECT_TRUE(initial_get_all_check_finished.WaitUntilSatisfied());
// Set up gallery watchers. if (!GalleryWatchesSupported())
ExtensionTestMessageListener add_gallery_watch_finished( return;
kAddGalleryWatchRequestSucceeded, false /* no reply */);
ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd, SetupGalleryWatches();
kAddGalleryWatchOK);
EXPECT_TRUE(add_gallery_watch_finished.WaitUntilSatisfied());
// chrome.mediaGalleriesPrivate.getAllGalleryWatch should return the // chrome.mediaGalleriesPrivate.getAllGalleryWatch should return the
// gallery identifiers. // gallery identifiers.
ExtensionTestMessageListener get_all_watched_galleries_finished( ExtensionTestMessageListener get_all_watched_galleries_finished(
kGetAllGalleryWatchResultB, false /* no reply */); kGalleryWatchesCheck, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetAllWatchedGalleryIdsCmd, ExecuteCmdAndCheckReply(kGetAllWatchedGalleryIdsCmd, kGetAllGalleryWatchOK);
kGetAllGalleryWatchOK);
EXPECT_TRUE(get_all_watched_galleries_finished.WaitUntilSatisfied()); EXPECT_TRUE(get_all_watched_galleries_finished.WaitUntilSatisfied());
// Remove gallery watch request. // Remove gallery watch request.
ExecuteCmdAndCheckReply(host, kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK); ExecuteCmdAndCheckReply(kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK);
// Gallery watchers removed. // Gallery watchers removed.
// chrome.mediaGalleriesPrivate.getAllGalleryWatch() should return an empty // chrome.mediaGalleriesPrivate.getAllGalleryWatch() should return an empty
// list. // list.
ExtensionTestMessageListener final_get_all_check_finished( ExtensionTestMessageListener final_get_all_check_finished(
kGetAllGalleryWatchResultA, false /* no reply */); kNoGalleryWatchesInstalled, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetAllWatchedGalleryIdsCmd, ExecuteCmdAndCheckReply(kGetAllWatchedGalleryIdsCmd, kGetAllGalleryWatchOK);
kGetAllGalleryWatchOK);
EXPECT_TRUE(final_get_all_check_finished.WaitUntilSatisfied()); EXPECT_TRUE(final_get_all_check_finished.WaitUntilSatisfied());
} }
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
RemoveAllGalleryWatch) { RemoveAllGalleryWatch) {
EnsureMediaDirectoriesExists media_directories; if (!GalleryWatchesSupported())
content::RenderViewHost* host = GetBackgroundHostForTestExtension(); return;
ASSERT_TRUE(host);
SetupGalleryWatches();
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Set up gallery watchers.
ExtensionTestMessageListener add_gallery_watch_finished(
kAddGalleryWatchRequestSucceeded, false /* no reply */);
ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd,
kAddGalleryWatchOK);
EXPECT_TRUE(add_gallery_watch_finished.WaitUntilSatisfied());
// chrome.mediaGalleriesPrivate.getAllGalleryWatch should return the watched // chrome.mediaGalleriesPrivate.getAllGalleryWatch should return the watched
// gallery identifiers. // gallery identifiers.
ExtensionTestMessageListener get_all_watched_galleries_finished( ExtensionTestMessageListener get_all_watched_galleries_finished(
kGetAllGalleryWatchResultB, false /* no reply */); kGalleryWatchesCheck, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetAllWatchedGalleryIdsCmd, ExecuteCmdAndCheckReply(kGetAllWatchedGalleryIdsCmd, kGetAllGalleryWatchOK);
kGetAllGalleryWatchOK);
EXPECT_TRUE(get_all_watched_galleries_finished.WaitUntilSatisfied()); EXPECT_TRUE(get_all_watched_galleries_finished.WaitUntilSatisfied());
// Remove all gallery watchers. // Remove all gallery watchers.
ExecuteCmdAndCheckReply(host, kRemoveAllGalleryWatchCmd, ExecuteCmdAndCheckReply(kRemoveAllGalleryWatchCmd, kRemoveAllGalleryWatchOK);
kRemoveAllGalleryWatchOK);
// Gallery watchers removed. chrome.mediaGalleriesPrivate.getAllGalleryWatch // Gallery watchers removed. chrome.mediaGalleriesPrivate.getAllGalleryWatch
// should return an empty list. // should return an empty list.
ExtensionTestMessageListener final_get_all_check_finished( ExtensionTestMessageListener final_get_all_check_finished(
kGetAllGalleryWatchResultA, false /* no reply */); kNoGalleryWatchesInstalled, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetAllWatchedGalleryIdsCmd, ExecuteCmdAndCheckReply(kGetAllWatchedGalleryIdsCmd, kGetAllGalleryWatchOK);
kGetAllGalleryWatchOK);
EXPECT_TRUE(final_get_all_check_finished.WaitUntilSatisfied()); EXPECT_TRUE(final_get_all_check_finished.WaitUntilSatisfied());
} }
#endif // defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
#if defined(OS_MACOSX)
// Gallery watch request is not enabled on Mac: crbug.com/144491.
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
SetupGalleryWatch) {
EnsureMediaDirectoriesExists media_directories;
content::RenderViewHost* host = GetBackgroundHostForTestExtension();
ASSERT_TRUE(host);
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Set up a invalid gallery watch.
ExtensionTestMessageListener gallery_watch_request_finished(
kAddGalleryWatchRequestFailed, false /* no reply */);
// Set up gallery watch.
ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd,
kAddGalleryWatchOK);
EXPECT_TRUE(gallery_watch_request_finished.WaitUntilSatisfied());
}
IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest,
GetAllGalleryWatch) {
EnsureMediaDirectoriesExists media_directories;
content::RenderViewHost* host = GetBackgroundHostForTestExtension();
ASSERT_TRUE(host);
// Get media file systems.
ExtensionTestMessageListener get_media_systems_finished(
kGetMediaFileSystemsCallbackOK, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd,
kGetMediaFileSystemsOK);
EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied());
// Set up gallery watch.
ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd,
kAddGalleryWatchOK);
// Gallery watchers does not exists.
// chrome.mediaGalleriesPrivate.getAllGalleryWatch should return an empty
// list.
ExtensionTestMessageListener get_all_gallery_watch_finished(
kGetAllGalleryWatchResultA, false /* no reply */);
ExecuteCmdAndCheckReply(host, kGetAllWatchedGalleryIdsCmd,
kGetAllGalleryWatchOK);
EXPECT_TRUE(get_all_gallery_watch_finished.WaitUntilSatisfied());
}
#endif // defined(OS_MACOSX)
...@@ -33,14 +33,14 @@ var getAllGalleryWatchCallback = function (results) { ...@@ -33,14 +33,14 @@ var getAllGalleryWatchCallback = function (results) {
if (results.length == 0) { if (results.length == 0) {
chrome.test.sendMessage('gallery_watchers_does_not_exists'); chrome.test.sendMessage('gallery_watchers_does_not_exists');
} else { } else {
var gallery_ids_str = ""; for (var i = 0; i < results.lendth; ++i) {
for (var i = 0; i < results.length; ++i) { var info = chrome.mediaGalleries.getMediaFileSystemMetadata(galleries[i]);
if (gallery_ids_str != "") if (results[i] !== info.galleryId) {
gallery_ids_str += ", "; chrome.test.sendMessage('gallery_watcher_mismatch');
gallery_ids_str += results[i]; return;
}
} }
chrome.test.sendMessage( chrome.test.sendMessage('gallery_watcher_checks');
'watchers_for_galleries_{' + gallery_ids_str + '}_found');
} }
}; };
......
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