Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / media_galleries / fileapi / iapps_finder_impl_win_browsertest.cc
blob903d0f78d617e0558de2ff1983f750ac18fbe8f6
1 // Copyright 2013 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 "base/base64.h"
6 #include "base/base_paths_win.h"
7 #include "base/bind.h"
8 #include "base/file_util.h"
9 #include "base/files/scoped_temp_dir.h"
10 #include "base/logging.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop/message_loop.h"
13 #include "base/path_service.h"
14 #include "base/run_loop.h"
15 #include "base/strings/stringprintf.h"
16 #include "base/test/scoped_path_override.h"
17 #include "chrome/browser/media_galleries/fileapi/iapps_finder_impl.h"
18 #include "chrome/common/chrome_paths.h"
19 #include "chrome/test/base/in_process_browser_test.h"
21 namespace iapps {
23 namespace {
25 std::string EncodePath(const base::FilePath& path) {
26 std::string input(reinterpret_cast<const char*>(path.value().data()),
27 path.value().size()*2);
28 std::string result;
29 base::Base64Encode(input, &result);
30 return result;
33 void TouchFile(const base::FilePath& file) {
34 ASSERT_EQ(1, file_util::WriteFile(file, " ", 1));
37 class ITunesFinderWinTest : public InProcessBrowserTest {
38 public:
39 ITunesFinderWinTest() : test_finder_callback_called_(false) {}
41 virtual ~ITunesFinderWinTest() {}
43 virtual void SetUp() OVERRIDE {
44 ASSERT_TRUE(app_data_dir_.CreateUniqueTempDir());
45 ASSERT_TRUE(music_dir_.CreateUniqueTempDir());
46 app_data_dir_override_.reset(
47 new base::ScopedPathOverride(base::DIR_APP_DATA, app_data_dir()));
48 music_dir_override_.reset(
49 new base::ScopedPathOverride(chrome::DIR_USER_MUSIC, music_dir()));
50 InProcessBrowserTest::SetUp();
53 const base::FilePath& app_data_dir() {
54 return app_data_dir_.path();
57 const base::FilePath& music_dir() {
58 return music_dir_.path();
61 void WritePrefFile(const std::string& data) {
62 base::FilePath pref_dir =
63 app_data_dir().AppendASCII("Apple Computer").AppendASCII("iTunes");
64 ASSERT_TRUE(base::CreateDirectory(pref_dir));
65 ASSERT_EQ(data.size(),
66 file_util::WriteFile(pref_dir.AppendASCII("iTunesPrefs.xml"),
67 data.data(), data.size()));
70 void TouchDefault() {
71 base::FilePath default_dir = music_dir().AppendASCII("iTunes");
72 ASSERT_TRUE(base::CreateDirectory(default_dir));
73 TouchFile(default_dir.AppendASCII("iTunes Music Library.xml"));
76 void TestFindITunesLibrary() {
77 test_finder_callback_called_ = false;
78 result_.clear();
79 base::RunLoop loop;
80 FindITunesLibrary(base::Bind(&ITunesFinderWinTest::TestFinderCallback,
81 base::Unretained(this), loop.QuitClosure()));
82 loop.Run();
85 bool EmptyResult() const {
86 return result_.empty();
89 bool test_finder_callback_called() const {
90 return test_finder_callback_called_;
93 private:
94 void TestFinderCallback(const base::Closure& quit_closure,
95 const std::string& result) {
96 test_finder_callback_called_ = true;
97 result_ = result;
98 quit_closure.Run();
101 scoped_ptr<base::ScopedPathOverride> app_data_dir_override_;
102 scoped_ptr<base::ScopedPathOverride> music_dir_override_;
103 base::ScopedTempDir app_data_dir_;
104 base::ScopedTempDir music_dir_;
106 bool test_finder_callback_called_;
107 std::string result_;
109 DISALLOW_COPY_AND_ASSIGN(ITunesFinderWinTest);
112 IN_PROC_BROWSER_TEST_F(ITunesFinderWinTest, NotFound) {
113 TestFindITunesLibrary();
114 EXPECT_TRUE(test_finder_callback_called());
115 EXPECT_TRUE(EmptyResult());
118 IN_PROC_BROWSER_TEST_F(ITunesFinderWinTest, DefaultLocation) {
119 TouchDefault();
120 TestFindITunesLibrary();
121 EXPECT_TRUE(test_finder_callback_called());
122 EXPECT_FALSE(EmptyResult());
125 IN_PROC_BROWSER_TEST_F(ITunesFinderWinTest, CustomLocation) {
126 base::FilePath library_xml = music_dir().AppendASCII("library.xml");
127 TouchFile(library_xml);
128 std::string xml = base::StringPrintf(
129 "<plist>"
130 " <dict>"
131 " <key>User Preferences</key>"
132 " <dict>"
133 " <key>iTunes Library XML Location:1</key>"
134 " <data>%s</data>"
135 " </dict>"
136 " </dict>"
137 "</plist>", EncodePath(library_xml).c_str());
138 WritePrefFile(xml);
139 TestFindITunesLibrary();
140 EXPECT_TRUE(test_finder_callback_called());
141 EXPECT_FALSE(EmptyResult());
144 IN_PROC_BROWSER_TEST_F(ITunesFinderWinTest, BadCustomLocation) {
145 // Missing file.
146 base::FilePath library_xml = music_dir().AppendASCII("library.xml");
147 std::string xml = base::StringPrintf(
148 "<plist>"
149 " <dict>"
150 " <key>User Preferences</key>"
151 " <dict>"
152 " <key>iTunes Library XML Location:1</key>"
153 " <data>%s</data>"
154 " </dict>"
155 " </dict>"
156 "</plist>", EncodePath(library_xml).c_str());
157 WritePrefFile(xml);
158 TestFindITunesLibrary();
159 EXPECT_TRUE(test_finder_callback_called());
160 EXPECT_TRUE(EmptyResult());
161 TouchFile(library_xml);
163 // User Preferences dictionary at the wrong level.
164 xml = base::StringPrintf(
165 "<plist>"
166 " <key>User Preferences</key>"
167 " <dict>"
168 " <key>iTunes Library XML Location:1</key>"
169 " <data>%s</data>"
170 " </dict>"
171 "</plist>", EncodePath(library_xml).c_str());
172 WritePrefFile(xml);
173 TestFindITunesLibrary();
174 EXPECT_TRUE(test_finder_callback_called());
175 EXPECT_TRUE(EmptyResult());
177 // Library location at the wrong scope.
178 xml = base::StringPrintf(
179 "<plist>"
180 " <dict>"
181 " <key>User Preferences</key>"
182 " <dict/>"
183 " <key>iTunes Library XML Location:1</key>"
184 " <data>%s</data>"
185 " </dict>"
186 "</plist>", EncodePath(library_xml).c_str());
187 WritePrefFile(xml);
188 TestFindITunesLibrary();
189 EXPECT_TRUE(test_finder_callback_called());
190 EXPECT_TRUE(EmptyResult());
193 } // namespace
195 } // namespace iapps