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) 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) MediaGalleriesPlatformAppBrowserTest() : test_jpg_size_(0) {} 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual ~MediaGalleriesPlatformAppBrowserTest() {} 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PlatformAppBrowserTest::SetUpOnMainThread(); 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_.reset(new EnsureMediaDirectoriesExists); 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 file_size; 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(GetCommonDataDir().AppendASCII("test.jpg"), 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &file_size)); 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) test_jpg_size_ = base::checked_numeric_cast<int>(file_size); 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void TearDownOnMainThread() OVERRIDE { 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_.reset(); 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PlatformAppBrowserTest::TearDownOnMainThread(); 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool RunMediaGalleriesTest(const std::string& extension_name) { 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue empty_list_value; 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return RunMediaGalleriesTestWithArg(extension_name, empty_list_value); 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool RunMediaGalleriesTestWithArg(const std::string& extension_name, 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::ListValue& custom_arg_value) { 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Copy the test data for this test into a temporary directory. Then add 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // a common_injected.js to the temporary copy and run it. 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kTestDir[] = "api_test/media_galleries/"; 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath from_dir = 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_data_dir_.AppendASCII(kTestDir + extension_name); 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) from_dir = from_dir.NormalizePathSeparators(); 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ScopedTempDir temp_dir; 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!temp_dir.CreateUniqueTempDir()) 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!base::CopyDirectory(from_dir, temp_dir.path(), true)) 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath common_js_path( 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetCommonDataDir().AppendASCII("common_injected.js")); 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath inject_js_path( 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) temp_dir.path().AppendASCII(extension_name) 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("common_injected.js")); 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!base::CopyFile(common_js_path, inject_js_path)) 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const char* custom_arg = NULL; 9668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string json_string; 9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!custom_arg_value.empty()) { 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::JSONWriter::Write(&custom_arg_value, &json_string); 9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_arg = json_string.c_str(); 10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::AutoReset<base::FilePath> reset(&test_data_dir_, temp_dir.path()); 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return RunPlatformAppTestWithArg(extension_name, custom_arg); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AttachFakeDevice() { 107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) device_id_ = StorageInfo::MakeDeviceId( 108d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM, kDeviceId); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessAttach( 11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) StorageInfo(device_id_, base::string16(), kDevicePath, 11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASCIIToUTF16(kDeviceName), base::string16(), 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::string16(), 0)); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DetachFakeDevice() { 118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessDetach(device_id_); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Called if test only wants a single gallery it creates. 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void RemoveAllGalleries() { 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* preferences = GetAndInitializePreferences(); 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Make a copy, as the iterator would be invalidated otherwise. 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const MediaGalleriesPrefInfoMap galleries = 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) preferences->known_galleries(); 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for (MediaGalleriesPrefInfoMap::const_iterator it = galleries.begin(); 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) it != galleries.end(); ++it) { 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) preferences->ForgetGalleryById(it->first); 132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // This function makes a single fake gallery. This is needed to test platforms 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // with no default media galleries, such as CHROMEOS. This fake gallery is 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // pre-populated with a test.jpg and test.txt. 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void MakeSingleFakeGallery() { 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(fake_gallery_temp_dir_.CreateUniqueTempDir()); 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* preferences = GetAndInitializePreferences(); 142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleryPrefInfo gallery_info; 144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_FALSE(preferences->LookUpGalleryByPath(fake_gallery_temp_dir_.path(), 145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &gallery_info)); 146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) preferences->AddGallery(gallery_info.device_id, 147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gallery_info.path, 148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) false /* user_added */, 149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gallery_info.volume_label, 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gallery_info.vendor_name, 151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gallery_info.model_name, 152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gallery_info.total_size_in_bytes, 153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gallery_info.last_attach_time); 154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath test_data_path(GetCommonDataDir()); 158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::FilePath write_path = fake_gallery_temp_dir_.path(); 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Valid file, should show up in JS as a FileEntry. 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(base::CopyFile(test_data_path.AppendASCII("test.jpg"), 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) write_path.AppendASCII("test.jpg"))); 16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Invalid file, should not show up as a FileEntry in JS at all. 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(base::CopyFile(test_data_path.AppendASCII("test.txt"), 16668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) write_path.AppendASCII("test.txt"))); 16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 16868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 1701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void PopulatePicasaTestData(const base::FilePath& picasa_app_data_root) { 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath picasa_database_path = 1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) picasa::MakePicasaDatabasePath(picasa_app_data_root); 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath picasa_temp_dir_path = 1741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) picasa_database_path.DirName().AppendASCII(picasa::kPicasaTempDirName); 175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(picasa_database_path)); 176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(picasa_temp_dir_path)); 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Create fake folder directories. 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath folders_root = 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_->GetFakePicasaFoldersRootPath(); 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath fake_folder_1 = folders_root.AppendASCII("folder1"); 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath fake_folder_2 = folders_root.AppendASCII("folder2"); 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(fake_folder_1)); 184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(fake_folder_2)); 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Write folder and album contents. 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa::WriteTestAlbumTable( 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa_database_path, fake_folder_1, fake_folder_2); 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa::WriteTestAlbumsImagesIndex(fake_folder_1, fake_folder_2); 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath test_jpg_path = GetCommonDataDir().AppendASCII("test.jpg"); 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_1.AppendASCII("InBoth.jpg"))); 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_1.AppendASCII("InSecondAlbumOnly.jpg"))); 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_2.AppendASCII("InFirstAlbumOnly.jpg"))); 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath GetCommonDataDir() const { 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return test_data_dir_.AppendASCII("api_test") 2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("media_galleries") 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("common"); 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 20768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int num_galleries() const { 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ensure_media_directories_exists_->num_galleries(); 20968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 21068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 21168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int test_jpg_size() const { return test_jpg_size_; } 21268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EnsureMediaDirectoriesExists* ensure_media_directories_exists() const { 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ensure_media_directories_exists_.get(); 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* GetAndInitializePreferences() { 219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* preferences = 220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences( 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->profile()); 222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::RunLoop runloop; 223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) preferences->EnsureInitialized(runloop.QuitClosure()); 224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) runloop.Run(); 225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return preferences; 226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string device_id_; 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ScopedTempDir fake_gallery_temp_dir_; 23068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int test_jpg_size_; 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<EnsureMediaDirectoriesExists> ensure_media_directories_exists_; 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesNoAccess) { 236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MakeSingleFakeGallery(); 2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 24068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 24168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("no_access", custom_args)) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << message_; 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, NoGalleriesRead) { 24668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("no_galleries")) << message_; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 250558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NoGalleriesCopyTo) { 25168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("no_galleries_copy_to")) << message_; 252558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 253558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 254558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochIN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesRead) { 256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RemoveAllGalleries(); 257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MakeSingleFakeGallery(); 25868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 25968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 26068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 26168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("read_access", custom_args)) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 266c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch MediaGalleriesCopyTo) { 267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RemoveAllGalleries(); 268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MakeSingleFakeGallery(); 26968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("copy_to_access")) << message_; 270a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 271a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 272a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MediaGalleriesDelete) { 274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MakeSingleFakeGallery(); 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::ListValue custom_args; 276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("delete_access", custom_args)) 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << message_; 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MediaGalleriesAccessAttached) { 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AttachFakeDevice(); 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 28668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 28768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendString(kDeviceName); 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("access_attached", custom_args)) 29068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) << message_; 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DetachFakeDevice(); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)|| defined(OS_MACOSX) 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PicasaDefaultLocation) { 2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) 2991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData( 3001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->GetFakeLocalAppDataPath()); 3014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#elif defined(OS_MACOSX) 3021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData( 3031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->GetFakeAppDataPath()); 3044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 305a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ListValue custom_args; 307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 308a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("picasa", custom_args)) << message_; 3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PicasaCustomLocation) { 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::ScopedTempDir custom_picasa_app_data_root; 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(custom_picasa_app_data_root.CreateUniqueTempDir()); 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->SetCustomPicasaAppDataPath( 3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) custom_picasa_app_data_root.path()); 3171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData(custom_picasa_app_data_root.path()); 318a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 319a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ListValue custom_args; 320a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 321a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("picasa", custom_args)) << message_; 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 324