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" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/callback.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/json/json_writer.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/numerics/safe_conversions.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/path_service.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string_util.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/values.h" 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/apps/app_browsertest_util.h" 16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/browser_process.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/extensions/api/media_galleries/media_galleries_api.h" 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/media_galleries/media_file_system_registry.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media_galleries/media_folder_finder.h" 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_preferences.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_scan_result_controller.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media_galleries/media_scan_manager.h" 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/storage_info.h" 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/storage_monitor.h" 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/browser/web_contents.h" 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/common/extension.h" 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/result_catcher.h" 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "media/base/test_data_util.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/picasa_finder.h" 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/media_galleries/picasa_test_util.h" 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/media_galleries/picasa_types.h" 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/media_galleries/pmp_test_util.h" 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/mac/foundation_util.h" 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/sys_string_conversions.h" 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/iapps_finder_impl.h" 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // OS_MACOSX 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if !defined(DISABLE_NACL) 48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/command_line.h" 49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/ui/extensions/application_launch.h" 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "ppapi/shared_impl/ppapi_switches.h" 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::PlatformAppBrowserTest; 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using storage_monitor::StorageInfo; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using storage_monitor::StorageMonitor; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Dummy device properties. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDeviceId[] = "testDeviceId"; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDeviceName[] = "foobar"; 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("C:\\qux"); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("/qux"); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DoNothingMediaFolderFinder : public MediaFolderFinder { 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit DoNothingMediaFolderFinder( 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MediaFolderFinderResultsCallback& callback) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : MediaFolderFinder(callback) { 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~DoNothingMediaFolderFinder() {} 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static MediaFolderFinder* CreateDoNothingMediaFolderFinder( 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MediaFolderFinderResultsCallback& callback) { 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return new DoNothingMediaFolderFinder(callback); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void StartScan() OVERRIDE {} 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class TestMediaGalleriesAddScanResultsFunction 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : public extensions::MediaGalleriesAddScanResultsFunction { 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static ExtensionFunction* Factory() { 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return new TestMediaGalleriesAddScanResultsFunction; 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protected: 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~TestMediaGalleriesAddScanResultsFunction() {} 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Accepts the dialog as soon as it is created. 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual MediaGalleriesScanResultController* MakeDialog( 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::WebContents* web_contents, 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const extensions::Extension& extension, 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::Closure& on_finish) OVERRIDE { 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesScanResultController* controller = 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extensions::MediaGalleriesAddScanResultsFunction::MakeDialog( 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) web_contents, extension, on_finish); 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) controller->dialog_->AcceptDialogForTesting(); 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The dialog is closing or closed so don't return it. 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return NULL; 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class MediaGalleriesPlatformAppBrowserTest : public PlatformAppBrowserTest { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) MediaGalleriesPlatformAppBrowserTest() : test_jpg_size_(0) {} 11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual ~MediaGalleriesPlatformAppBrowserTest() {} 11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PlatformAppBrowserTest::SetUpOnMainThread(); 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_.reset(new EnsureMediaDirectoriesExists); 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 file_size; 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(GetCommonDataDir().AppendASCII("test.jpg"), 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &file_size)); 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_jpg_size_ = base::checked_cast<int>(file_size); 12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void TearDownOnMainThread() OVERRIDE { 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_.reset(); 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PlatformAppBrowserTest::TearDownOnMainThread(); 13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool RunMediaGalleriesTest(const std::string& extension_name) { 13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue empty_list_value; 13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return RunMediaGalleriesTestWithArg(extension_name, empty_list_value); 13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool RunMediaGalleriesTestWithArg(const std::string& extension_name, 13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::ListValue& custom_arg_value) { 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Copy the test data for this test into a temporary directory. Then add 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // a common_injected.js to the temporary copy and run it. 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kTestDir[] = "api_test/media_galleries/"; 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath from_dir = 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_data_dir_.AppendASCII(kTestDir + extension_name); 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) from_dir = from_dir.NormalizePathSeparators(); 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ScopedTempDir temp_dir; 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!temp_dir.CreateUniqueTempDir()) 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!base::CopyDirectory(from_dir, temp_dir.path(), true)) 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath common_js_path( 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetCommonDataDir().AppendASCII("common_injected.js")); 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath inject_js_path( 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) temp_dir.path().AppendASCII(extension_name) 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("common_injected.js")); 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!base::CopyFile(common_js_path, inject_js_path)) 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const char* custom_arg = NULL; 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string json_string; 16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!custom_arg_value.empty()) { 16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::JSONWriter::Write(&custom_arg_value, &json_string); 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_arg = json_string.c_str(); 16668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::AutoReset<base::FilePath> reset(&test_data_dir_, temp_dir.path()); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool result = RunPlatformAppTestWithArg(extension_name, custom_arg); 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RunAllPendingInMessageLoop(); // avoid race on exit in registry. 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return result; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AttachFakeDevice() { 175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) device_id_ = StorageInfo::MakeDeviceId( 176d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM, kDeviceId); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessAttach( 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) StorageInfo(device_id_, kDevicePath, base::ASCIIToUTF16(kDeviceName), 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16(), base::string16(), 0)); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DetachFakeDevice() { 185d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessDetach(device_id_); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Called if test only wants a single gallery it creates. 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void RemoveAllGalleries() { 191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* preferences = GetAndInitializePreferences(); 192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Make a copy, as the iterator would be invalidated otherwise. 194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const MediaGalleriesPrefInfoMap galleries = 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) preferences->known_galleries(); 196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for (MediaGalleriesPrefInfoMap::const_iterator it = galleries.begin(); 197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) it != galleries.end(); ++it) { 198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) preferences->ForgetGalleryById(it->first); 199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // This function makes a single fake gallery. This is needed to test platforms 203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // with no default media galleries, such as CHROMEOS. This fake gallery is 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // pre-populated with a test.jpg and test.txt. 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void MakeSingleFakeGallery(MediaGalleryPrefId* pref_id) { 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(fake_gallery_temp_dir_.IsValid()); 207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(fake_gallery_temp_dir_.CreateUniqueTempDir()); 208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* preferences = GetAndInitializePreferences(); 210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleryPrefInfo gallery_info; 212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_FALSE(preferences->LookUpGalleryByPath(fake_gallery_temp_dir_.path(), 213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &gallery_info)); 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MediaGalleryPrefId id = preferences->AddGallery( 215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gallery_info.device_id, 216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gallery_info.path, 217effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MediaGalleryPrefInfo::kAutoDetected, 218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gallery_info.volume_label, 219effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gallery_info.vendor_name, 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gallery_info.model_name, 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gallery_info.total_size_in_bytes, 222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gallery_info.last_attach_time, 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 0, 0, 0); 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (pref_id) 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *pref_id = id; 226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 22868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 22968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Valid file, should show up in JS as a FileEntry. 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddFileToSingleFakeGallery(GetCommonDataDir().AppendASCII("test.jpg")); 23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Invalid file, should not show up as a FileEntry in JS at all. 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddFileToSingleFakeGallery(GetCommonDataDir().AppendASCII("test.txt")); 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void AddFileToSingleFakeGallery(const base::FilePath& source_path) { 237a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(fake_gallery_temp_dir_.IsValid()); 238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::CopyFile( 240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) source_path, 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) fake_gallery_temp_dir_.path().Append(source_path.BaseName()))); 24268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 24368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void PopulatePicasaTestData(const base::FilePath& picasa_app_data_root) { 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath picasa_database_path = 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) picasa::MakePicasaDatabasePath(picasa_app_data_root); 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath picasa_temp_dir_path = 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) picasa_database_path.DirName().AppendASCII(picasa::kPicasaTempDirName); 250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(picasa_database_path)); 251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(picasa_temp_dir_path)); 2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Create fake folder directories. 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath folders_root = 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ensure_media_directories_exists_->GetFakePicasaFoldersRootPath(); 2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath fake_folder_1 = folders_root.AppendASCII("folder1"); 2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath fake_folder_2 = folders_root.AppendASCII("folder2"); 258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(fake_folder_1)); 259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(fake_folder_2)); 2604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Write folder and album contents. 2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa::WriteTestAlbumTable( 2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa_database_path, fake_folder_1, fake_folder_2); 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) picasa::WriteTestAlbumsImagesIndex(fake_folder_1, fake_folder_2); 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath test_jpg_path = GetCommonDataDir().AppendASCII("test.jpg"); 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_1.AppendASCII("InBoth.jpg"))); 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_1.AppendASCII("InSecondAlbumOnly.jpg"))); 2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(base::CopyFile( 2724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_jpg_path, fake_folder_2.AppendASCII("InFirstAlbumOnly.jpg"))); 2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX) 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void PopulateIPhotoTestData(const base::FilePath& iphoto_data_root) { 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string xml_contents = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "<plist version=\"1.0\">" 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "<dict>\n" 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>List of Albums</key>" 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <array>\n" 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <dict>\n" 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>AlbumId</key>" 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <integer>1</integer>" 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>AlbumName</key>" 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>Album1</string>" 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>KeyList</key>\n" 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <array>" 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>1</string>" 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>2</string>" 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </array>\n" 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </dict>\n" 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <dict>\n" 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>AlbumId</key>" 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <integer>2</integer>" 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>AlbumName</key>" 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>Album2</string>" 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>KeyList</key>\n" 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <array>" 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>2</string>" 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </array>\n" 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </dict>\n" 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </array>\n" 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>Master Image List</key>\n" 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <dict>\n" 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>1</key>" 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <dict>\n" 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>MediaType</key>" 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>Image</string>" 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>Caption</key>" 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>caption 1</string>" 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>GUID</key>" 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>1</string>" 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>ModDateAsTimerInterval</key>" 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>386221543.0000</string>" 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>DateAsTimerInterval</key>" 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>386221543.0000</string>" 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>DateAsTimerIntervalGMT</key>" 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>385123456.00</string>" 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>ImagePath</key>" 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>$path1</string>" 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>ThumbPath</key>" 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>/thumb/path</string>\n" 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </dict>\n" 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>2</key>\n" 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <dict>\n" 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>MediaType</key>" 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>Image</string>" 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>Caption</key>" 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>caption 2</string>" 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>GUID</key>" 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>2</string>" 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>ModDateAsTimerInterval</key>" 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>386221543.0000</string>" 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>DateAsTimerInterval</key>" 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>386221543.0000</string>" 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>DateAsTimerIntervalGMT</key>" 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>385123456.00</string>" 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>ImagePath</key>" 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>$path2</string>" 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <key>ThumbPath</key>" 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " <string>/thumb/path2</string>\n" 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </dict>\n" 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " </dict>\n" // Master Image List 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "</dict>\n" 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "</plist>"; 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath test_jpg_path = GetCommonDataDir().AppendASCII("test.jpg"); 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(iphoto_data_root)); 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath first_only_jpg = 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) iphoto_data_root.AppendASCII("InFirstAlbumOnly.jpg"); 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath in_both_jpg = iphoto_data_root.AppendASCII("InBoth.jpg"); 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(base::CopyFile(test_jpg_path, first_only_jpg)); 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(base::CopyFile(test_jpg_path, in_both_jpg)); 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ReplaceFirstSubstringAfterOffset( 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &xml_contents, 0, std::string("$path1"), first_only_jpg.value()); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ReplaceFirstSubstringAfterOffset( 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &xml_contents, 0, std::string("$path2"), in_both_jpg.value()); 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath album_xml = iphoto_data_root.AppendASCII("AlbumData.xml"); 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_NE(-1, base::WriteFile(album_xml, 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) xml_contents.c_str(), xml_contents.size())); 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_MACOSX) 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath GetCommonDataDir() const { 3774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return test_data_dir_.AppendASCII("api_test") 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("media_galleries") 3794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) .AppendASCII("common"); 3804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 3814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 382a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::FilePath GetWallpaperTestDataDir() const { 383a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return test_data_dir_.AppendASCII("api_test") 384a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("wallpaper"); 385a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 386a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 38768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int num_galleries() const { 3884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ensure_media_directories_exists_->num_galleries(); 38968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 39068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 39168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int test_jpg_size() const { return test_jpg_size_; } 39268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EnsureMediaDirectoriesExists* ensure_media_directories_exists() const { 3944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ensure_media_directories_exists_.get(); 3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void InstallDoNothingFolderFinder() { 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MediaScanManager * scan_manager = 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->media_file_system_registry()->media_scan_manager(); 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scan_manager->SetMediaFolderFinderFactory(base::Bind( 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &DoNothingMediaFolderFinder::CreateDoNothingMediaFolderFinder)); 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SetRootsForFolderFinder(const std::vector<base::FilePath>& roots) { 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MediaScanManager* scan_manager = 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) g_browser_process->media_file_system_registry()->media_scan_manager(); 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scan_manager->SetMediaFolderFinderFactory(base::Bind( 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &MediaGalleriesPlatformAppBrowserTest::CreateMediaFolderFinderWithRoots, 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) roots)); 410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static MediaFolderFinder* CreateMediaFolderFinderWithRoots( 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::vector<base::FilePath>& roots, 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const MediaFolderFinder::MediaFolderFinderResultsCallback& callback) { 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MediaFolderFinder* finder = new MediaFolderFinder(callback); 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) finder->SetRootsForTesting(roots); 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return finder; 419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 421a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* GetAndInitializePreferences() { 422a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MediaGalleriesPreferences* preferences = 423a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences( 424a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->profile()); 425a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::RunLoop runloop; 426a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) preferences->EnsureInitialized(runloop.QuitClosure()); 427a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) runloop.Run(); 428a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return preferences; 429a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 430a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string device_id_; 432a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ScopedTempDir fake_gallery_temp_dir_; 43368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int test_jpg_size_; 4344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<EnsureMediaDirectoriesExists> ensure_media_directories_exists_; 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 437a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if !defined(DISABLE_NACL) 438a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass MediaGalleriesPlatformAppPpapiTest 439a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch : public MediaGalleriesPlatformAppBrowserTest { 440a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch protected: 441a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 442a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch MediaGalleriesPlatformAppBrowserTest::SetUpCommandLine(command_line); 443a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch command_line->AppendSwitch(switches::kEnablePepperTesting); 444a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 445a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 446a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void SetUpOnMainThread() OVERRIDE { 447a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch MediaGalleriesPlatformAppBrowserTest::SetUpOnMainThread(); 448a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 449a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_GEN_TEST_DATA, &app_dir_)); 450a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch app_dir_ = app_dir_.AppendASCII("ppapi") 451a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("tests") 452a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("extensions") 453a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("media_galleries") 454a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("newlib"); 455a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 456a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 457a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::FilePath& app_dir() const { 458a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return app_dir_; 459a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 460a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 461a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch private: 462a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::FilePath app_dir_; 463a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 464a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 465a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochIN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppPpapiTest, SendFilesystem) { 466a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch RemoveAllGalleries(); 467a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch MakeSingleFakeGallery(NULL); 468a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 469a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const extensions::Extension* extension = LoadExtension(app_dir()); 470a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(extension); 471a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::ResultCatcher catcher; 473a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AppLaunchParams params(browser()->profile(), 474a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch extension, 475a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch extensions::LAUNCH_CONTAINER_NONE, 476a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NEW_WINDOW); 477a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch params.command_line = *CommandLine::ForCurrentProcess(); 478a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch OpenApplication(params); 479a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 480a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool result = true; 481a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!catcher.GetNextResult()) { 482a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch message_ = catcher.message(); 483a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch result = false; 484a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 485a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch content::RunAllPendingInMessageLoop(); // avoid race on exit in registry. 486a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(result) << message_; 487a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 488a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 489a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // !defined(DISABLE_NACL) 490a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 491e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Test is flaky, it fails on certain bots, namely WinXP Tests(1) and Linux 492e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// (dbg)(1)(32). See crbug.com/354425. 4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_LINUX) 49423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define MAYBE_MediaGalleriesNoAccess DISABLED_MediaGalleriesNoAccess 49523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#else 49623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define MAYBE_MediaGalleriesNoAccess MediaGalleriesNoAccess 49723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif 498868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 49923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MAYBE_MediaGalleriesNoAccess) { 500effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MakeSingleFakeGallery(NULL); 5014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 50268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 5034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 50468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 50568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("no_access", custom_args)) 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << message_; 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 509868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, NoGalleriesRead) { 51068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("no_galleries")) << message_; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 513868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 514558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch NoGalleriesCopyTo) { 51568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("no_galleries_copy_to")) << message_; 516558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 517558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Test is flaky. crbug.com/416128 519558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochIN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISABLED_MediaGalleriesRead) { 521a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RemoveAllGalleries(); 522effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MakeSingleFakeGallery(NULL); 52368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 52468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 52568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 52668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("read_access", custom_args)) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 530e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Test is flaky, it fails on certain bots, namely WinXP Tests(1) and Linux 531e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// (dbg)(1)(32). See crbug.com/354425. 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_LINUX) 53323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define MAYBE_MediaGalleriesCopyTo DISABLED_MediaGalleriesCopyTo 53423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#else 53523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define MAYBE_MediaGalleriesCopyTo MediaGalleriesCopyTo 53623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif 537868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 53823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MAYBE_MediaGalleriesCopyTo) { 539a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RemoveAllGalleries(); 540effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MakeSingleFakeGallery(NULL); 54168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("copy_to_access")) << message_; 542a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 543a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 544a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MediaGalleriesDelete) { 546effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MakeSingleFakeGallery(NULL); 547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::ListValue custom_args; 548a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("delete_access", custom_args)) 550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << message_; 551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MediaGalleriesAccessAttached) { 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AttachFakeDevice(); 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::ListValue custom_args; 55868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendInteger(num_galleries() + 1); 55968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) custom_args.AppendString(kDeviceName); 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("access_attached", custom_args)) 56268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) << message_; 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DetachFakeDevice(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)|| defined(OS_MACOSX) 5684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 5694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PicasaDefaultLocation) { 5704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) 5711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData( 5721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->GetFakeLocalAppDataPath()); 5734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#elif defined(OS_MACOSX) 5741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData( 5751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->GetFakeAppDataPath()); 5764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 578a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ListValue custom_args; 579a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 580a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("picasa", custom_args)) << message_; 5814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 5824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 5844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PicasaCustomLocation) { 5851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::ScopedTempDir custom_picasa_app_data_root; 5861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(custom_picasa_app_data_root.CreateUniqueTempDir()); 5871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ensure_media_directories_exists()->SetCustomPicasaAppDataPath( 5881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) custom_picasa_app_data_root.path()); 5891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PopulatePicasaTestData(custom_picasa_app_data_root.path()); 590a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 591a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ListValue custom_args; 592a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 593a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("picasa", custom_args)) << message_; 5944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 5951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX) 5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IPhotoTest) { 6005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PopulateIPhotoTestData( 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ensure_media_directories_exists()->GetFakeIPhotoRootPath()); 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue custom_args; 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) custom_args.AppendInteger(test_jpg_size()); 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("iphoto", custom_args)) << message_; 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) iapps::SetMacPreferencesForTesting(NULL); 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_MACOSX) 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, CancelScan) { 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) InstallDoNothingFolderFinder(); 613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("cancel_scan")) << message_; 614a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 615a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 616a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochIN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, Scan) { 617a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::ScopedTempDir scan_root; 618a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(scan_root.CreateUniqueTempDir()); 619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::vector<base::FilePath> roots; 620a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) roots.push_back(scan_root.path()); 621a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetRootsForFolderFinder(roots); 622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Override addScanResults so that the dialog is accepted as soon as it is 624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // created. 625e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_TRUE(extensions::ExtensionFunctionDispatcher::OverrideFunction( 626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "mediaGalleries.addScanResults", 627a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &TestMediaGalleriesAddScanResultsFunction::Factory)); 628a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Add some files and directories to the scan root for testing. Only the 630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // "f" directory should be found. 631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string dummy_data; 632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dummy_data.resize(1); 633a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(scan_root.path().AppendASCII("a/b"))); 634a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(static_cast<int>(dummy_data.size()), 635a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WriteFile(scan_root.path().AppendASCII("a/b/c.jpg"), 636a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dummy_data.c_str(), dummy_data.size())); 637a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(scan_root.path().AppendASCII("a/d"))); 638a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dummy_data.resize(201 * 1024); // 200k is the min size for the folder finder. 639a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(static_cast<int>(dummy_data.size()), 640a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WriteFile(scan_root.path().AppendASCII("a/d/e.txt"), 641a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dummy_data.c_str(), dummy_data.size())); 642a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(scan_root.path().AppendASCII("f"))); 643a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(static_cast<int>(dummy_data.size()), 644a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::WriteFile(scan_root.path().AppendASCII("f/g.jpg"), 645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dummy_data.c_str(), dummy_data.size())); 646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTest("scan")) << message_; 6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 649a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 650effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, ToURL) { 651effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RemoveAllGalleries(); 652effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MediaGalleryPrefId pref_id; 653effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MakeSingleFakeGallery(&pref_id); 654effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 655effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::ListValue custom_args; 656effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch custom_args.AppendInteger(base::checked_cast<int>(pref_id)); 657effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch custom_args.AppendString( 658effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch browser()->profile()->GetPath().BaseName().MaybeAsASCII()); 659effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 660effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(RunMediaGalleriesTestWithArg("tourl", custom_args)) << message_; 661effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 662effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 663a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(MediaGalleriesPlatformAppBrowserTest, GetMetadata) { 664a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RemoveAllGalleries(); 665effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MakeSingleFakeGallery(NULL); 666a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 667a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddFileToSingleFakeGallery(media::GetTestDataFilePath("90rotation.mp4")); 668a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddFileToSingleFakeGallery(media::GetTestDataFilePath("id3_png_test.mp3")); 669a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AddFileToSingleFakeGallery(GetWallpaperTestDataDir().AppendASCII("test.jpg")); 670a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::ListValue custom_args; 672a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(USE_PROPRIETARY_CODECS) 673a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) custom_args.AppendBoolean(true); 674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else 675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) custom_args.AppendBoolean(false); 676a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 677a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(RunMediaGalleriesTestWithArg("media_metadata", custom_args)) 678a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << message_; 679a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 680