- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / media_galleries / media_galleries_test_util.cc
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.
4
5 #include "chrome/browser/media_galleries/media_galleries_test_util.h"
6
7 #if defined(OS_WIN)
8 #include <windows.h>
9 #endif
10
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"
25
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"
31 #endif  // OS_MACOSX
32
33 #if defined(OS_WIN)
34 #include "base/test/test_reg_util_win.h"
35 #include "base/win/registry.h"
36 #endif  // OS_WIN
37
38 scoped_refptr<extensions::Extension> AddMediaGalleriesApp(
39     const std::string& name,
40     const std::vector<std::string>& media_galleries_permissions,
41     Profile* profile) {
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);
50
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);
60
61   extensions::ExtensionPrefs* extension_prefs =
62       extensions::ExtensionPrefs::Get(profile);
63   base::FilePath path = extension_prefs->install_directory().AppendASCII(name);
64   std::string errors;
65   scoped_refptr<extensions::Extension> extension =
66       extensions::Extension::Create(path, extensions::Manifest::INTERNAL,
67                                     *manifest.get(),
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()))
72     return NULL;
73
74   extension_prefs->OnExtensionInstalled(
75       extension.get(),
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());
83
84   return extension;
85 }
86
87 EnsureMediaDirectoriesExists::EnsureMediaDirectoriesExists()
88     : num_galleries_(0) {
89   Init();
90 }
91
92 EnsureMediaDirectoriesExists::~EnsureMediaDirectoriesExists() {
93 #if defined(OS_MACOSX)
94   iapps::SetMacPreferencesForTesting(NULL);
95   picasa::SetMacPreferencesForTesting(NULL);
96 #endif  // OS_MACOSX
97 }
98
99 base::FilePath EnsureMediaDirectoriesExists::GetFakeAppDataPath() const {
100   DCHECK(fake_dir_.IsValid());
101   return fake_dir_.path().AppendASCII("appdata");
102 }
103
104 #if defined(OS_WIN)
105 base::FilePath EnsureMediaDirectoriesExists::GetFakeLocalAppDataPath() const {
106   DCHECK(fake_dir_.IsValid());
107   return fake_dir_.path().AppendASCII("localappdata");
108 }
109
110 void EnsureMediaDirectoriesExists::SetCustomPicasaAppDataPath(
111     const base::FilePath& path) {
112   base::win::RegKey key(HKEY_CURRENT_USER, picasa::kPicasaRegistryPath,
113                         KEY_SET_VALUE);
114   key.WriteValue(picasa::kPicasaRegistryAppDataPathKey, path.value().c_str());
115 }
116 #endif  // OS_WIN
117
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()),
124       false);
125 }
126 #endif // OS_MACOSX
127
128 #if defined(OS_WIN) || defined(OS_MACOSX)
129 base::FilePath
130 EnsureMediaDirectoriesExists::GetFakePicasaFoldersRootPath() const {
131   DCHECK(fake_dir_.IsValid());
132   return fake_dir_.path().AppendASCII("picasa_folders");
133 }
134 #endif  // OS_WIN || OS_MACOSX
135
136 void EnsureMediaDirectoriesExists::Init() {
137 #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
138   return;
139 #else
140
141   ASSERT_TRUE(fake_dir_.CreateUniqueTempDir());
142
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
149
150 #if defined(OS_WIN)
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");
156 #endif  // OS_WIN
157
158 #if defined(OS_MACOSX)
159   mac_preferences_.reset(new MockPreferences);
160   iapps::SetMacPreferencesForTesting(mac_preferences_.get());
161   picasa::SetMacPreferencesForTesting(mac_preferences_.get());
162
163   // iTunes override.
164   mac_preferences_->AddTestItem(
165       base::mac::NSToCFCast(iapps::kITunesRecentDatabasePathsKey),
166       base::SysUTF8ToNSString(fake_dir_.path().AppendASCII("itunes").value()),
167       false);
168
169   // iPhoto override.
170   mac_preferences_->AddTestItem(
171       base::mac::NSToCFCast(iapps::kIPhotoRecentDatabasesKey),
172       base::SysUTF8ToNSString(fake_dir_.path().AppendASCII("iphoto").value()),
173       false);
174 #endif // OS_MACOSX
175
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")));
182   num_galleries_ = 3;
183 #endif  // OS_CHROMEOS || OS_ANDROID
184 }