1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/media_galleries/media_galleries_test_util.h"
11 #include "base/base_paths.h"
12 #include "base/file_util.h"
13 #include "base/files/file_path.h"
14 #include "base/path_service.h"
15 #include "base/strings/stringprintf.h"
16 #include "chrome/browser/extensions/extension_prefs.h"
17 #include "chrome/browser/extensions/extension_service.h"
18 #include "chrome/browser/extensions/extension_system.h"
19 #include "chrome/browser/media_galleries/fileapi/picasa_finder.h"
20 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/common/chrome_paths.h"
22 #include "chrome/common/extensions/extension.h"
23 #include "extensions/common/manifest_constants.h"
24 #include "testing/gtest/include/gtest/gtest.h"
26 #if defined(OS_MACOSX)
27 #include "base/mac/foundation_util.h"
28 #include "base/strings/sys_string_conversions.h"
29 #include "chrome/browser/media_galleries/fileapi/iapps_finder_impl.h"
30 #include "chrome/browser/policy/preferences_mock_mac.h"
34 #include "base/test/test_reg_util_win.h"
35 #include "base/win/registry.h"
38 scoped_refptr<extensions::Extension> AddMediaGalleriesApp(
39 const std::string& name,
40 const std::vector<std::string>& media_galleries_permissions,
42 scoped_ptr<DictionaryValue> manifest(new DictionaryValue);
43 manifest->SetString(extensions::manifest_keys::kName, name);
44 manifest->SetString(extensions::manifest_keys::kVersion, "0.1");
45 manifest->SetInteger(extensions::manifest_keys::kManifestVersion, 2);
46 ListValue* background_script_list = new ListValue;
47 background_script_list->Append(Value::CreateStringValue("background.js"));
48 manifest->Set(extensions::manifest_keys::kPlatformAppBackgroundScripts,
49 background_script_list);
51 ListValue* permission_detail_list = new ListValue;
52 for (size_t i = 0; i < media_galleries_permissions.size(); i++)
53 permission_detail_list->Append(
54 Value::CreateStringValue(media_galleries_permissions[i]));
55 DictionaryValue* media_galleries_permission = new DictionaryValue();
56 media_galleries_permission->Set("mediaGalleries", permission_detail_list);
57 ListValue* permission_list = new ListValue;
58 permission_list->Append(media_galleries_permission);
59 manifest->Set(extensions::manifest_keys::kPermissions, permission_list);
61 extensions::ExtensionPrefs* extension_prefs =
62 extensions::ExtensionPrefs::Get(profile);
63 base::FilePath path = extension_prefs->install_directory().AppendASCII(name);
65 scoped_refptr<extensions::Extension> extension =
66 extensions::Extension::Create(path, extensions::Manifest::INTERNAL,
68 extensions::Extension::NO_FLAGS, &errors);
69 EXPECT_TRUE(extension.get() != NULL) << errors;
70 EXPECT_TRUE(extensions::Extension::IdIsValid(extension->id()));
71 if (!extension.get() || !extensions::Extension::IdIsValid(extension->id()))
74 extension_prefs->OnExtensionInstalled(
76 extensions::Extension::ENABLED,
77 extensions::Blacklist::NOT_BLACKLISTED,
78 syncer::StringOrdinal::CreateInitialOrdinal());
79 ExtensionService* extension_service =
80 extensions::ExtensionSystem::Get(profile)->extension_service();
81 extension_service->AddExtension(extension.get());
82 extension_service->EnableExtension(extension->id());
87 EnsureMediaDirectoriesExists::EnsureMediaDirectoriesExists()
92 EnsureMediaDirectoriesExists::~EnsureMediaDirectoriesExists() {
93 #if defined(OS_MACOSX)
94 iapps::SetMacPreferencesForTesting(NULL);
95 picasa::SetMacPreferencesForTesting(NULL);
99 base::FilePath EnsureMediaDirectoriesExists::GetFakeAppDataPath() const {
100 DCHECK(fake_dir_.IsValid());
101 return fake_dir_.path().AppendASCII("appdata");
105 base::FilePath EnsureMediaDirectoriesExists::GetFakeLocalAppDataPath() const {
106 DCHECK(fake_dir_.IsValid());
107 return fake_dir_.path().AppendASCII("localappdata");
110 void EnsureMediaDirectoriesExists::SetCustomPicasaAppDataPath(
111 const base::FilePath& path) {
112 base::win::RegKey key(HKEY_CURRENT_USER, picasa::kPicasaRegistryPath,
114 key.WriteValue(picasa::kPicasaRegistryAppDataPathKey, path.value().c_str());
118 #if defined(OS_MACOSX)
119 void EnsureMediaDirectoriesExists::SetCustomPicasaAppDataPath(
120 const base::FilePath& path) {
121 mac_preferences_->AddTestItem(
122 base::mac::NSToCFCast(picasa::kPicasaAppDataPathMacPreferencesKey),
123 base::SysUTF8ToNSString(path.value()),
128 #if defined(OS_WIN) || defined(OS_MACOSX)
130 EnsureMediaDirectoriesExists::GetFakePicasaFoldersRootPath() const {
131 DCHECK(fake_dir_.IsValid());
132 return fake_dir_.path().AppendASCII("picasa_folders");
134 #endif // OS_WIN || OS_MACOSX
136 void EnsureMediaDirectoriesExists::Init() {
137 #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
141 ASSERT_TRUE(fake_dir_.CreateUniqueTempDir());
143 #if defined(OS_WIN) || defined(OS_MACOSX)
144 // This is to control whether or not tests think iTunes (on Windows) and
145 // Picasa are installed.
146 app_data_override_.reset(new base::ScopedPathOverride(
147 base::DIR_APP_DATA, GetFakeAppDataPath()));
148 #endif // OS_WIN || OS_MACOSX
151 // Picasa on Windows is by default in the DIR_LOCAL_APP_DATA directory.
152 local_app_data_override_.reset(new base::ScopedPathOverride(
153 base::DIR_LOCAL_APP_DATA, GetFakeLocalAppDataPath()));
154 // Picasa also looks in the registry for an alternate path.
155 registry_override_.OverrideRegistry(HKEY_CURRENT_USER, L"hkcu_picasa");
158 #if defined(OS_MACOSX)
159 mac_preferences_.reset(new MockPreferences);
160 iapps::SetMacPreferencesForTesting(mac_preferences_.get());
161 picasa::SetMacPreferencesForTesting(mac_preferences_.get());
164 mac_preferences_->AddTestItem(
165 base::mac::NSToCFCast(iapps::kITunesRecentDatabasePathsKey),
166 base::SysUTF8ToNSString(fake_dir_.path().AppendASCII("itunes").value()),
170 mac_preferences_->AddTestItem(
171 base::mac::NSToCFCast(iapps::kIPhotoRecentDatabasesKey),
172 base::SysUTF8ToNSString(fake_dir_.path().AppendASCII("iphoto").value()),
176 music_override_.reset(new base::ScopedPathOverride(
177 chrome::DIR_USER_MUSIC, fake_dir_.path().AppendASCII("music")));
178 pictures_override_.reset(new base::ScopedPathOverride(
179 chrome::DIR_USER_PICTURES, fake_dir_.path().AppendASCII("pictures")));
180 video_override_.reset(new base::ScopedPathOverride(
181 chrome::DIR_USER_VIDEOS, fake_dir_.path().AppendASCII("videos")));
183 #endif // OS_CHROMEOS || OS_ANDROID