12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <windows.h>
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/base_paths.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/picasa_finder.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_paths.h"
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/crx_file/id_util.h"
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs.h"
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest_constants.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_MACOSX)
288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/mac/foundation_util.h"
298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/strings/sys_string_conversions.h"
308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/iapps_finder_impl.h"
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/preferences_mock_mac.h"
328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // OS_MACOSX
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/test/test_reg_util_win.h"
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/win/registry.h"
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // OS_WIN
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<extensions::Extension> AddMediaGalleriesApp(
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& name,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::vector<std::string>& media_galleries_permissions,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile) {
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> manifest(new base::DictionaryValue);
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  manifest->SetString(extensions::manifest_keys::kName, name);
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  manifest->SetString(extensions::manifest_keys::kVersion, "0.1");
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  manifest->SetInteger(extensions::manifest_keys::kManifestVersion, 2);
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* background_script_list = new base::ListValue;
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  background_script_list->Append(new base::StringValue("background.js"));
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  manifest->Set(extensions::manifest_keys::kPlatformAppBackgroundScripts,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                background_script_list);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* permission_detail_list = new base::ListValue;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < media_galleries_permissions.size(); i++)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    permission_detail_list->Append(
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        new base::StringValue(media_galleries_permissions[i]));
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* media_galleries_permission =
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      new base::DictionaryValue();
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  media_galleries_permission->Set("mediaGalleries", permission_detail_list);
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* permission_list = new base::ListValue;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  permission_list->Append(media_galleries_permission);
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  manifest->Set(extensions::manifest_keys::kPermissions, permission_list);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  extensions::ExtensionPrefs* extension_prefs =
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      extensions::ExtensionPrefs::Get(profile);
6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::FilePath path = extension_prefs->install_directory().AppendASCII(name);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string errors;
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      extensions::Extension::Create(path, extensions::Manifest::INTERNAL,
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                    *manifest.get(),
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                    extensions::Extension::NO_FLAGS, &errors);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(extension.get() != NULL) << errors;
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_TRUE(crx_file::id_util::IdIsValid(extension->id()));
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (!extension.get() || !crx_file::id_util::IdIsValid(extension->id()))
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  extension_prefs->OnExtensionInstalled(
77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      extension.get(),
78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      extensions::Extension::ENABLED,
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      syncer::StringOrdinal::CreateInitialOrdinal(),
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      std::string());
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ExtensionService* extension_service =
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      extensions::ExtensionSystem::Get(profile)->extension_service();
83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  extension_service->AddExtension(extension.get());
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  extension_service->EnableExtension(extension->id());
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return extension;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)EnsureMediaDirectoriesExists::EnsureMediaDirectoriesExists()
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : num_galleries_(0), times_overrides_changed_(0) {
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Init();
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochEnsureMediaDirectoriesExists::~EnsureMediaDirectoriesExists() {
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_MACOSX)
961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  iapps::SetMacPreferencesForTesting(NULL);
971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  picasa::SetMacPreferencesForTesting(NULL);
981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif  // OS_MACOSX
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void EnsureMediaDirectoriesExists::ChangeMediaPathOverrides() {
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Each pointer must be reset an extra time so as to destroy the existing
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // override prior to creating a new one. This is because the PathService,
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // which supports these overrides, only allows one override to exist per path
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // in its internal bookkeeping; attempting to add a second override invokes
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // a CHECK crash.
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  music_override_.reset();
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string music_path_string("music");
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  music_path_string.append(base::IntToString(times_overrides_changed_));
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  music_override_.reset(new base::ScopedPathOverride(
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      chrome::DIR_USER_MUSIC,
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      fake_dir_.path().AppendASCII(music_path_string)));
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  pictures_override_.reset();
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string pictures_path_string("pictures");
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  pictures_path_string.append(base::IntToString(times_overrides_changed_));
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  pictures_override_.reset(new base::ScopedPathOverride(
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      chrome::DIR_USER_PICTURES,
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      fake_dir_.path().AppendASCII(pictures_path_string)));
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  video_override_.reset();
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string videos_path_string("videos");
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  videos_path_string.append(base::IntToString(times_overrides_changed_));
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  video_override_.reset(new base::ScopedPathOverride(
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      chrome::DIR_USER_VIDEOS,
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      fake_dir_.path().AppendASCII(videos_path_string)));
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  times_overrides_changed_++;
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  num_galleries_ = 3;
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::FilePath EnsureMediaDirectoriesExists::GetFakeAppDataPath() const {
1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(fake_dir_.IsValid());
1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return fake_dir_.path().AppendASCII("appdata");
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::FilePath EnsureMediaDirectoriesExists::GetFakeLocalAppDataPath() const {
1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(fake_dir_.IsValid());
1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return fake_dir_.path().AppendASCII("localappdata");
1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void EnsureMediaDirectoriesExists::SetCustomPicasaAppDataPath(
1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const base::FilePath& path) {
1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::win::RegKey key(HKEY_CURRENT_USER, picasa::kPicasaRegistryPath,
1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                        KEY_SET_VALUE);
1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  key.WriteValue(picasa::kPicasaRegistryAppDataPathKey, path.value().c_str());
1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // OS_WIN
1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_MACOSX)
1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void EnsureMediaDirectoriesExists::SetCustomPicasaAppDataPath(
1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const base::FilePath& path) {
1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  mac_preferences_->AddTestItem(
1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      base::mac::NSToCFCast(picasa::kPicasaAppDataPathMacPreferencesKey),
1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      base::SysUTF8ToNSString(path.value()),
1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      false);
1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // OS_MACOSX
1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX)
1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::FilePath
1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)EnsureMediaDirectoriesExists::GetFakePicasaFoldersRootPath() const {
1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(fake_dir_.IsValid());
1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return fake_dir_.path().AppendASCII("picasa_folders");
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // OS_WIN || OS_MACOSX
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX)
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::FilePath EnsureMediaDirectoriesExists::GetFakeITunesRootPath() const {
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(fake_dir_.IsValid());
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return fake_dir_.path().AppendASCII("itunes");
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::FilePath EnsureMediaDirectoriesExists::GetFakeIPhotoRootPath() const {
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(fake_dir_.IsValid());
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return fake_dir_.path().AppendASCII("iphoto");
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // OS_MACOSX
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void EnsureMediaDirectoriesExists::Init() {
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return;
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(fake_dir_.CreateUniqueTempDir());
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN) || defined(OS_MACOSX)
1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // This is to control whether or not tests think iTunes (on Windows) and
1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Picasa are installed.
1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  app_data_override_.reset(new base::ScopedPathOverride(
1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      base::DIR_APP_DATA, GetFakeAppDataPath()));
1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // OS_WIN || OS_MACOSX
1958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Picasa on Windows is by default in the DIR_LOCAL_APP_DATA directory.
1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  local_app_data_override_.reset(new base::ScopedPathOverride(
1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      base::DIR_LOCAL_APP_DATA, GetFakeLocalAppDataPath()));
2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Picasa also looks in the registry for an alternate path.
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  registry_override_.OverrideRegistry(HKEY_CURRENT_USER);
2028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // OS_WIN
2038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_MACOSX)
2058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  mac_preferences_.reset(new MockPreferences);
2068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // iTunes override.
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath itunes_xml =
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GetFakeITunesRootPath().AppendASCII("iTunes Library.xml");
2108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  mac_preferences_->AddTestItem(
2118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      base::mac::NSToCFCast(iapps::kITunesRecentDatabasePathsKey),
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::mac::NSToCFCast(iapps::NSArrayFromFilePath(itunes_xml)),
2138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      false);
2148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // iPhoto override.
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath iphoto_xml =
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GetFakeIPhotoRootPath().AppendASCII("AlbumData.xml");
2188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  mac_preferences_->AddTestItem(
2198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      base::mac::NSToCFCast(iapps::kIPhotoRecentDatabasesKey),
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::mac::NSToCFCast(iapps::NSArrayFromFilePath(iphoto_xml)),
2218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      false);
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  iapps::SetMacPreferencesForTesting(mac_preferences_.get());
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  picasa::SetMacPreferencesForTesting(mac_preferences_.get());
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // OS_MACOSX
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ChangeMediaPathOverrides();
2288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // OS_CHROMEOS || OS_ANDROID
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::FilePath MakeMediaGalleriesTestingPath(const std::string& dir) {
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN)
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::FilePath(FILE_PATH_LITERAL("C:\\")).AppendASCII(dir);
2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#elif defined(OS_POSIX)
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::FilePath(FILE_PATH_LITERAL("/")).Append(dir);
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else
2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NOTREACHED();
2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
240