media_galleries_apitest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/auto_reset.h" 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/file_util.h" 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/json/json_writer.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/path_service.h" 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/safe_numerics.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/values.h" 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/apps/app_browsertest_util.h" 14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/browser_process.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/media_galleries/media_file_system_registry.h" 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_preferences.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h" 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/storage_monitor/storage_info.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/storage_monitor/storage_monitor.h" 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/picasa_finder.h" 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/media_galleries/picasa_test_util.h" 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/media_galleries/picasa_types.h" 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/media_galleries/pmp_test_util.h" 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::PlatformAppBrowserTest; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Dummy device properties. 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDeviceId[] = "testDeviceId"; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDeviceName[] = "foobar"; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("C:\\qux"); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("/qux"); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// This function is to ensure at least one (fake) media gallery exists for 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// testing platforms with no default media galleries, such as CHROMEOS. 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void MakeFakeMediaGalleryForTest(Profile* profile, const base::FilePath& path) { 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleriesPreferences* preferences = 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences(profile); 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::RunLoop runloop; 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preferences->EnsureInitialized(runloop.QuitClosure()); 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) runloop.Run(); 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefInfo gallery_info; 54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_FALSE(preferences->LookUpGalleryByPath(path, &gallery_info)); 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) preferences->AddGallery(gallery_info.device_id, 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gallery_info.path, 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) false /* user_added */, 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gallery_info.volume_label, 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gallery_info.vendor_name, 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gallery_info.model_name, 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gallery_info.total_size_in_bytes, 62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gallery_info.last_attach_time); 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) MediaGalleriesPlatformAppBrowserTest() : test_jpg_size_(0) {} 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual ~MediaGalleriesPlatformAppBrowserTest() {} 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PlatformAppBrowserTest::SetUpOnMainThread(); 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_.reset(new EnsureMediaDirectoriesExists); 7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PopulatePicturesDirectoryTestData(); 7868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void TearDownOnMainThread() OVERRIDE { 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_.reset(); 8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PlatformAppBrowserTest::TearDownOnMainThread(); 8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 8468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool RunMediaGalleriesTest(const std::string& extension_name) { 8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue empty_list_value; 8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return RunMediaGalleriesTestWithArg(extension_name, empty_list_value); 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool RunMediaGalleriesTestWithArg(const std::string& extension_name, 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::ListValue& custom_arg_value) { 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Copy the test data for this test into a temporary directory. Then add 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // a common_injected.js to the temporary copy and run it. 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kTestDir[] = "api_test/media_galleries/"; 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath from_dir = 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_data_dir_.AppendASCII(kTestDir + extension_name); 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) from_dir = from_dir.NormalizePathSeparators(); 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ScopedTempDir temp_dir; 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!temp_dir.CreateUniqueTempDir()) 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!base::CopyDirectory(from_dir, temp_dir.path(), true)) 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath common_js_path( 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetCommonDataDir().AppendASCII("common_injected.js")); 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath inject_js_path( 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) temp_dir.path().AppendASCII(extension_name) 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("common_injected.js")); 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!base::CopyFile(common_js_path, inject_js_path)) 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const char* custom_arg = NULL; 11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string json_string; 11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!custom_arg_value.empty()) { 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::JSONWriter::Write(&custom_arg_value, &json_string); 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_arg = json_string.c_str(); 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::AutoReset<base::FilePath> reset(&test_data_dir_, temp_dir.path()); 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return RunPlatformAppTestWithArg(extension_name, custom_arg); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AttachFakeDevice() { 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) device_id_ = StorageInfo::MakeDeviceId( 127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM, kDeviceId); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessAttach( 13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) StorageInfo(device_id_, base::string16(), kDevicePath, 13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASCIIToUTF16(kDeviceName), base::string16(), 13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::string16(), 0)); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DetachFakeDevice() { 137d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessDetach(device_id_); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void PopulatePicturesDirectoryTestData() { 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (ensure_media_directories_exists_->num_galleries() == 0) 14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return; 14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath test_data_path(GetCommonDataDir()); 14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::FilePath write_path; 14768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_USER_PICTURES, &write_path)); 14868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Valid file, should show up in JS as a FileEntry. 15068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(base::CopyFile(test_data_path.AppendASCII("test.jpg"), 15168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) write_path.AppendASCII("test.jpg"))); 15268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Invalid file, should not show up as a FileEntry in JS at all. 15468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(base::CopyFile(test_data_path.AppendASCII("test.txt"), 15568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) write_path.AppendASCII("test.txt"))); 15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 file_size; 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(file_util::GetFileSize(test_data_path.AppendASCII("test.jpg"), 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) &file_size)); 16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) test_jpg_size_ = base::checked_numeric_cast<int>(file_size); 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void PopulatePicasaTestData(const base::FilePath& picasa_app_data_root) { 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath picasa_database_path = 1661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) picasa::MakePicasaDatabasePath(picasa_app_data_root); 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath picasa_temp_dir_path = 1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) picasa_database_path.DirName().AppendASCII(picasa::kPicasaTempDirName); 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(file_util::CreateDirectory(picasa_database_path)); 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(file_util::CreateDirectory(picasa_temp_dir_path)); 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Create fake folder directories. 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath folders_root = 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_->GetFakePicasaFoldersRootPath(); 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath fake_folder_1 = folders_root.AppendASCII("folder1"); 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath fake_folder_2 = folders_root.AppendASCII("folder2"); 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(file_util::CreateDirectory(fake_folder_1)); 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(file_util::CreateDirectory(fake_folder_2)); 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Write folder and album contents. 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa::WriteTestAlbumTable( 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa_database_path, fake_folder_1, fake_folder_2); 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa::WriteTestAlbumsImagesIndex(fake_folder_1, fake_folder_2); 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath test_jpg_path = GetCommonDataDir().AppendASCII("test.jpg"); 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_1.AppendASCII("InBoth.jpg"))); 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_1.AppendASCII("InSecondAlbumOnly.jpg"))); 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_2.AppendASCII("InFirstAlbumOnly.jpg"))); 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath GetCommonDataDir() const { 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return test_data_dir_.AppendASCII("api_test") 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("media_galleries") 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("common"); 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int num_galleries() const { 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ensure_media_directories_exists_->num_galleries(); 20368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 20468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 20568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int test_jpg_size() const { return test_jpg_size_; } 20668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EnsureMediaDirectoriesExists* ensure_media_directories_exists() const { 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ensure_media_directories_exists_.get(); 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string device_id_; 21368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int test_jpg_size_; 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<EnsureMediaDirectoriesExists> ensure_media_directories_exists_; 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesNoAccess) { 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ScopedTempDir temp_dir; 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MakeFakeMediaGalleryForTest(browser()->profile(), temp_dir.path()); 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 22568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 22668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("no_access", custom_args)) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << message_; 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 230868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, NoGalleriesRead) { 23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("no_galleries")) << message_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 235558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NoGalleriesCopyTo) { 23668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("no_galleries_copy_to")) << message_; 237558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 238558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 239558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochIN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesRead) { 24168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 24268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendInteger(num_galleries()); 24368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 24468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 24568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("read_access", custom_args)) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 250c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch MediaGalleriesCopyTo) { 251a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::ScopedTempDir temp_dir; 252a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 253a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) MakeFakeMediaGalleryForTest(browser()->profile(), temp_dir.path()); 25468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("copy_to_access")) << message_; 255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 256a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 257a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MediaGalleriesAccessAttached) { 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AttachFakeDevice(); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 26268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 26368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendString(kDeviceName); 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("access_attached", custom_args)) 26668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) << message_; 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DetachFakeDevice(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetFilesystemMetadata) { 27368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("metadata")) << message_; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)|| defined(OS_MACOSX) 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PicasaDefaultLocation) { 2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) 2801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData( 2811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->GetFakeLocalAppDataPath()); 2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#elif defined(OS_MACOSX) 2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData( 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->GetFakeAppDataPath()); 2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 2864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("picasa")) << message_; 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PicasaCustomLocation) { 2911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::ScopedTempDir custom_picasa_app_data_root; 2921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(custom_picasa_app_data_root.CreateUniqueTempDir()); 2931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->SetCustomPicasaAppDataPath( 2941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) custom_picasa_app_data_root.path()); 2951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData(custom_picasa_app_data_root.path()); 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("picasa")) << message_; 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 299