| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
| 7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "base/strings/string_split.h" | 9 #include "base/strings/string_split.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 } | 44 } |
| 45 | 45 |
| 46 // Initialize file paths within a temporary directory; this should be | 46 // Initialize file paths within a temporary directory; this should be |
| 47 // empty and nonexistent. | 47 // empty and nonexistent. |
| 48 virtual void InitFilePaths(base::FilePath temp_path) { | 48 virtual void InitFilePaths(base::FilePath temp_path) { |
| 49 temp_path_ = temp_path; | 49 temp_path_ = temp_path; |
| 50 urls_file_ = temp_path.AppendASCII("urls_file"); | 50 urls_file_ = temp_path.AppendASCII("urls_file"); |
| 51 errors_file_ = temp_path.AppendASCII("errors"); | 51 errors_file_ = temp_path.AppendASCII("errors"); |
| 52 stats_file_ = temp_path.AppendASCII("stats"); | 52 stats_file_ = temp_path.AppendASCII("stats"); |
| 53 | 53 |
| 54 ASSERT_FALSE(file_util::PathExists(urls_file_)); | 54 ASSERT_FALSE(base::PathExists(urls_file_)); |
| 55 ASSERT_FALSE(file_util::PathExists(errors_file_)); | 55 ASSERT_FALSE(base::PathExists(errors_file_)); |
| 56 ASSERT_FALSE(file_util::PathExists(stats_file_)); | 56 ASSERT_FALSE(base::PathExists(stats_file_)); |
| 57 } | 57 } |
| 58 | 58 |
| 59 // Initialize a PageCycler using either the base fields, or using provided | 59 // Initialize a PageCycler using either the base fields, or using provided |
| 60 // ones. | 60 // ones. |
| 61 void InitPageCycler() { | 61 void InitPageCycler() { |
| 62 page_cycler_ = new PageCycler(browser(), urls_file()); | 62 page_cycler_ = new PageCycler(browser(), urls_file()); |
| 63 page_cycler_->set_errors_file(errors_file()); | 63 page_cycler_->set_errors_file(errors_file()); |
| 64 page_cycler_->set_stats_file(stats_file()); | 64 page_cycler_->set_stats_file(stats_file()); |
| 65 } | 65 } |
| 66 | 66 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 class PageCyclerCachedBrowserTest : public PageCyclerBrowserTest { | 145 class PageCyclerCachedBrowserTest : public PageCyclerBrowserTest { |
| 146 public: | 146 public: |
| 147 // For a cached test, we use the provided user data directory from the test | 147 // For a cached test, we use the provided user data directory from the test |
| 148 // directory. | 148 // directory. |
| 149 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 149 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 150 base::FilePath test_dir; | 150 base::FilePath test_dir; |
| 151 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); | 151 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); |
| 152 test_dir = test_dir.AppendASCII("page_cycler"); | 152 test_dir = test_dir.AppendASCII("page_cycler"); |
| 153 | 153 |
| 154 base::FilePath source_data_dir = test_dir.AppendASCII("cached_data_dir"); | 154 base::FilePath source_data_dir = test_dir.AppendASCII("cached_data_dir"); |
| 155 CHECK(file_util::PathExists(source_data_dir)); | 155 CHECK(base::PathExists(source_data_dir)); |
| 156 | 156 |
| 157 CHECK(user_data_dir_.CreateUniqueTempDir()); | 157 CHECK(user_data_dir_.CreateUniqueTempDir()); |
| 158 | 158 |
| 159 base::FilePath dest_data_dir = | 159 base::FilePath dest_data_dir = |
| 160 user_data_dir_.path().AppendASCII("cached_data_dir"); | 160 user_data_dir_.path().AppendASCII("cached_data_dir"); |
| 161 CHECK(!file_util::PathExists(dest_data_dir)); | 161 CHECK(!base::PathExists(dest_data_dir)); |
| 162 | 162 |
| 163 CHECK(base::CopyDirectory(source_data_dir, user_data_dir_.path(), | 163 CHECK(base::CopyDirectory(source_data_dir, user_data_dir_.path(), |
| 164 true)); // recursive. | 164 true)); // recursive. |
| 165 CHECK(file_util::PathExists(dest_data_dir)); | 165 CHECK(base::PathExists(dest_data_dir)); |
| 166 | 166 |
| 167 command_line->AppendSwitchPath(switches::kUserDataDir, | 167 command_line->AppendSwitchPath(switches::kUserDataDir, |
| 168 dest_data_dir); | 168 dest_data_dir); |
| 169 command_line->AppendSwitch(switches::kPlaybackMode); | 169 command_line->AppendSwitch(switches::kPlaybackMode); |
| 170 } | 170 } |
| 171 | 171 |
| 172 // Initialize the file paths to use the UserDataDir's urls file, instead | 172 // Initialize the file paths to use the UserDataDir's urls file, instead |
| 173 // of one to be written. | 173 // of one to be written. |
| 174 virtual void InitFilePaths(base::FilePath temp_path) OVERRIDE { | 174 virtual void InitFilePaths(base::FilePath temp_path) OVERRIDE { |
| 175 urls_file_ = user_data_dir_.path().AppendASCII("cached_data_dir") | 175 urls_file_ = user_data_dir_.path().AppendASCII("cached_data_dir") |
| 176 .AppendASCII("urls"); | 176 .AppendASCII("urls"); |
| 177 errors_file_ = temp_path.AppendASCII("errors"); | 177 errors_file_ = temp_path.AppendASCII("errors"); |
| 178 stats_file_ = temp_path.AppendASCII("stats"); | 178 stats_file_ = temp_path.AppendASCII("stats"); |
| 179 | 179 |
| 180 ASSERT_TRUE(file_util::PathExists(urls_file_)); | 180 ASSERT_TRUE(base::PathExists(urls_file_)); |
| 181 ASSERT_FALSE(file_util::PathExists(errors_file_)); | 181 ASSERT_FALSE(base::PathExists(errors_file_)); |
| 182 ASSERT_FALSE(file_util::PathExists(stats_file_)); | 182 ASSERT_FALSE(base::PathExists(stats_file_)); |
| 183 } | 183 } |
| 184 | 184 |
| 185 private: | 185 private: |
| 186 // The directory storing the copy of the UserDataDir. | 186 // The directory storing the copy of the UserDataDir. |
| 187 base::ScopedTempDir user_data_dir_; | 187 base::ScopedTempDir user_data_dir_; |
| 188 }; | 188 }; |
| 189 | 189 |
| 190 // Sanity check; iterate through a series of URLs and make sure there are no | 190 // Sanity check; iterate through a series of URLs and make sure there are no |
| 191 // errors. | 191 // errors. |
| 192 IN_PROC_BROWSER_TEST_F(PageCyclerBrowserTest, BasicTest) { | 192 IN_PROC_BROWSER_TEST_F(PageCyclerBrowserTest, BasicTest) { |
| 193 base::ScopedTempDir temp; | 193 base::ScopedTempDir temp; |
| 194 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 194 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 195 | 195 |
| 196 RegisterForNotifications(); | 196 RegisterForNotifications(); |
| 197 InitFilePaths(temp.path()); | 197 InitFilePaths(temp.path()); |
| 198 | 198 |
| 199 ASSERT_TRUE(test_server()->Start()); | 199 ASSERT_TRUE(test_server()->Start()); |
| 200 | 200 |
| 201 std::string urls_string = GetStringFromURLs(GetURLs());; | 201 std::string urls_string = GetStringFromURLs(GetURLs());; |
| 202 | 202 |
| 203 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), | 203 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), |
| 204 urls_string.size())); | 204 urls_string.size())); |
| 205 | 205 |
| 206 InitPageCycler(); | 206 InitPageCycler(); |
| 207 page_cycler()->Run(); | 207 page_cycler()->Run(); |
| 208 | 208 |
| 209 content::RunMessageLoop(); | 209 content::RunMessageLoop(); |
| 210 ASSERT_FALSE(file_util::PathExists(errors_file())); | 210 ASSERT_FALSE(base::PathExists(errors_file())); |
| 211 ASSERT_TRUE(file_util::PathExists(stats_file())); | 211 ASSERT_TRUE(base::PathExists(stats_file())); |
| 212 } | 212 } |
| 213 | 213 |
| 214 // Test to make sure that PageCycler will recognize unvisitable URLs, and will | 214 // Test to make sure that PageCycler will recognize unvisitable URLs, and will |
| 215 // handle them appropriately. | 215 // handle them appropriately. |
| 216 IN_PROC_BROWSER_TEST_F(PageCyclerBrowserTest, UnvisitableURL) { | 216 IN_PROC_BROWSER_TEST_F(PageCyclerBrowserTest, UnvisitableURL) { |
| 217 const size_t kNumErrors = 1; | 217 const size_t kNumErrors = 1; |
| 218 const char kFakeURL[] = "http://www.pleasenoonehavethisurlanytimeinthenext" | 218 const char kFakeURL[] = "http://www.pleasenoonehavethisurlanytimeinthenext" |
| 219 "century.com/gibberish"; | 219 "century.com/gibberish"; |
| 220 base::ScopedTempDir temp; | 220 base::ScopedTempDir temp; |
| 221 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 221 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 222 | 222 |
| 223 RegisterForNotifications(); | 223 RegisterForNotifications(); |
| 224 InitFilePaths(temp.path()); | 224 InitFilePaths(temp.path()); |
| 225 | 225 |
| 226 ASSERT_TRUE(test_server()->Start()); | 226 ASSERT_TRUE(test_server()->Start()); |
| 227 | 227 |
| 228 std::vector<GURL> urls = GetURLs(); | 228 std::vector<GURL> urls = GetURLs(); |
| 229 urls.push_back(GURL(kFakeURL)); | 229 urls.push_back(GURL(kFakeURL)); |
| 230 std::string urls_string = GetStringFromURLs(urls); | 230 std::string urls_string = GetStringFromURLs(urls); |
| 231 | 231 |
| 232 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), | 232 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), |
| 233 urls_string.size())); | 233 urls_string.size())); |
| 234 | 234 |
| 235 InitPageCycler(); | 235 InitPageCycler(); |
| 236 page_cycler()->Run(); | 236 page_cycler()->Run(); |
| 237 | 237 |
| 238 content::RunMessageLoop(); | 238 content::RunMessageLoop(); |
| 239 ASSERT_TRUE(file_util::PathExists(errors_file())); | 239 ASSERT_TRUE(base::PathExists(errors_file())); |
| 240 ASSERT_TRUE(file_util::PathExists(stats_file())); | 240 ASSERT_TRUE(base::PathExists(stats_file())); |
| 241 | 241 |
| 242 std::vector<std::string> errors = GetErrorsFromFile(); | 242 std::vector<std::string> errors = GetErrorsFromFile(); |
| 243 | 243 |
| 244 ASSERT_EQ(kNumErrors, errors.size()); | 244 ASSERT_EQ(kNumErrors, errors.size()); |
| 245 | 245 |
| 246 // Check that each error message contains the fake URL (i.e., that it wasn't | 246 // Check that each error message contains the fake URL (i.e., that it wasn't |
| 247 // from a valid URL, and that the fake URL was caught each time). | 247 // from a valid URL, and that the fake URL was caught each time). |
| 248 ASSERT_NE(std::string::npos, errors[0].find(kFakeURL)); | 248 ASSERT_NE(std::string::npos, errors[0].find(kFakeURL)); |
| 249 } | 249 } |
| 250 | 250 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 263 std::string urls_string = GetStringFromURLs(GetURLs()); | 263 std::string urls_string = GetStringFromURLs(GetURLs()); |
| 264 urls_string.append(kBadURL).append("\n"); | 264 urls_string.append(kBadURL).append("\n"); |
| 265 | 265 |
| 266 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), | 266 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), |
| 267 urls_string.size())); | 267 urls_string.size())); |
| 268 | 268 |
| 269 InitPageCycler(); | 269 InitPageCycler(); |
| 270 page_cycler()->Run(); | 270 page_cycler()->Run(); |
| 271 | 271 |
| 272 content::RunMessageLoop(); | 272 content::RunMessageLoop(); |
| 273 ASSERT_TRUE(file_util::PathExists(errors_file())); | 273 ASSERT_TRUE(base::PathExists(errors_file())); |
| 274 ASSERT_TRUE(file_util::PathExists(stats_file())); | 274 ASSERT_TRUE(base::PathExists(stats_file())); |
| 275 | 275 |
| 276 std::vector<std::string> errors = GetErrorsFromFile(); | 276 std::vector<std::string> errors = GetErrorsFromFile(); |
| 277 ASSERT_EQ(1u, errors.size()); | 277 ASSERT_EQ(1u, errors.size()); |
| 278 | 278 |
| 279 std::string expected_error = "Omitting invalid URL: "; | 279 std::string expected_error = "Omitting invalid URL: "; |
| 280 expected_error.append(kBadURL).append("."); | 280 expected_error.append(kBadURL).append("."); |
| 281 | 281 |
| 282 ASSERT_FALSE(errors[0].compare(expected_error)); | 282 ASSERT_FALSE(errors[0].compare(expected_error)); |
| 283 } | 283 } |
| 284 | 284 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 296 urls.push_back(GURL(content::kUnreachableWebDataURL)); | 296 urls.push_back(GURL(content::kUnreachableWebDataURL)); |
| 297 std::string urls_string = GetStringFromURLs(urls); | 297 std::string urls_string = GetStringFromURLs(urls); |
| 298 | 298 |
| 299 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), | 299 ASSERT_TRUE(file_util::WriteFile(urls_file(), urls_string.c_str(), |
| 300 urls_string.size())); | 300 urls_string.size())); |
| 301 | 301 |
| 302 InitPageCycler(); | 302 InitPageCycler(); |
| 303 page_cycler()->Run(); | 303 page_cycler()->Run(); |
| 304 | 304 |
| 305 content::RunMessageLoop(); | 305 content::RunMessageLoop(); |
| 306 ASSERT_TRUE(file_util::PathExists(errors_file())); | 306 ASSERT_TRUE(base::PathExists(errors_file())); |
| 307 ASSERT_TRUE(file_util::PathExists(stats_file())); | 307 ASSERT_TRUE(base::PathExists(stats_file())); |
| 308 | 308 |
| 309 std::vector<std::string> errors = GetErrorsFromFile(); | 309 std::vector<std::string> errors = GetErrorsFromFile(); |
| 310 ASSERT_EQ(1u, errors.size()); | 310 ASSERT_EQ(1u, errors.size()); |
| 311 | 311 |
| 312 std::string expected_error = "Chrome error pages are not allowed as urls. " | 312 std::string expected_error = "Chrome error pages are not allowed as urls. " |
| 313 "Omitting url: "; | 313 "Omitting url: "; |
| 314 expected_error.append(content::kUnreachableWebDataURL).append("."); | 314 expected_error.append(content::kUnreachableWebDataURL).append("."); |
| 315 | 315 |
| 316 ASSERT_FALSE(errors[0].compare(expected_error)); | 316 ASSERT_FALSE(errors[0].compare(expected_error)); |
| 317 } | 317 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 336 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 336 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 337 | 337 |
| 338 RegisterForNotifications(); | 338 RegisterForNotifications(); |
| 339 InitFilePaths(temp.path()); | 339 InitFilePaths(temp.path()); |
| 340 | 340 |
| 341 InitPageCycler(); | 341 InitPageCycler(); |
| 342 | 342 |
| 343 page_cycler()->Run(); | 343 page_cycler()->Run(); |
| 344 | 344 |
| 345 content::RunMessageLoop(); | 345 content::RunMessageLoop(); |
| 346 ASSERT_TRUE(file_util::PathExists(stats_file())); | 346 ASSERT_TRUE(base::PathExists(stats_file())); |
| 347 ASSERT_FALSE(file_util::PathExists(errors_file())); | 347 ASSERT_FALSE(base::PathExists(errors_file())); |
| 348 } | 348 } |
| 349 #endif // !defined(OS_CHROMEOS) | 349 #endif // !defined(OS_CHROMEOS) |
| 350 | 350 |
| 351 #if !defined(OS_CHROMEOS) | 351 #if !defined(OS_CHROMEOS) |
| 352 // TODO(rdevlin.cronin): Perhaps page cycler isn't completely implemented on | 352 // TODO(rdevlin.cronin): Perhaps page cycler isn't completely implemented on |
| 353 // ChromeOS? | 353 // ChromeOS? |
| 354 | 354 |
| 355 // Test that PageCycler will have a cache miss if a URL is missing from the | 355 // Test that PageCycler will have a cache miss if a URL is missing from the |
| 356 // cache directory while in playback mode. | 356 // cache directory while in playback mode. |
| 357 // Bug 131333: This test fails on a XP debug bot since Build 17609. | 357 // Bug 131333: This test fails on a XP debug bot since Build 17609. |
| 358 #if (defined(OS_WIN) || defined(OS_MACOSX)) && !defined(NDEBUG) | 358 #if (defined(OS_WIN) || defined(OS_MACOSX)) && !defined(NDEBUG) |
| 359 #define MAYBE_URLNotInCache DISABLED_URLNotInCache | 359 #define MAYBE_URLNotInCache DISABLED_URLNotInCache |
| 360 #else | 360 #else |
| 361 #define MAYBE_URLNotInCache URLNotInCache | 361 #define MAYBE_URLNotInCache URLNotInCache |
| 362 #endif | 362 #endif |
| 363 IN_PROC_BROWSER_TEST_F(PageCyclerCachedBrowserTest, MAYBE_URLNotInCache) { | 363 IN_PROC_BROWSER_TEST_F(PageCyclerCachedBrowserTest, MAYBE_URLNotInCache) { |
| 364 const char kCacheMissURL[] = "http://www.images.google.com/"; | 364 const char kCacheMissURL[] = "http://www.images.google.com/"; |
| 365 | 365 |
| 366 base::ScopedTempDir temp; | 366 base::ScopedTempDir temp; |
| 367 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 367 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 368 | 368 |
| 369 RegisterForNotifications(); | 369 RegisterForNotifications(); |
| 370 InitFilePaths(temp.path()); | 370 InitFilePaths(temp.path()); |
| 371 | 371 |
| 372 // Only use a single URL that is not in cache. That's sufficient for the test | 372 // Only use a single URL that is not in cache. That's sufficient for the test |
| 373 // scenario, and makes things faster than needlessly cycling through all the | 373 // scenario, and makes things faster than needlessly cycling through all the |
| 374 // other URLs. | 374 // other URLs. |
| 375 | 375 |
| 376 base::FilePath new_urls_file = temp.path().AppendASCII("urls"); | 376 base::FilePath new_urls_file = temp.path().AppendASCII("urls"); |
| 377 ASSERT_FALSE(file_util::PathExists(new_urls_file)); | 377 ASSERT_FALSE(base::PathExists(new_urls_file)); |
| 378 | 378 |
| 379 ASSERT_TRUE(file_util::WriteFile(new_urls_file, kCacheMissURL, | 379 ASSERT_TRUE(file_util::WriteFile(new_urls_file, kCacheMissURL, |
| 380 sizeof(kCacheMissURL))); | 380 sizeof(kCacheMissURL))); |
| 381 | 381 |
| 382 InitPageCycler(new_urls_file, errors_file(), stats_file()); | 382 InitPageCycler(new_urls_file, errors_file(), stats_file()); |
| 383 page_cycler()->Run(); | 383 page_cycler()->Run(); |
| 384 | 384 |
| 385 content::RunMessageLoop(); | 385 content::RunMessageLoop(); |
| 386 ASSERT_TRUE(file_util::PathExists(errors_file())); | 386 ASSERT_TRUE(base::PathExists(errors_file())); |
| 387 ASSERT_TRUE(file_util::PathExists(stats_file())); | 387 ASSERT_TRUE(base::PathExists(stats_file())); |
| 388 | 388 |
| 389 std::vector<std::string> errors = GetErrorsFromFile(); | 389 std::vector<std::string> errors = GetErrorsFromFile(); |
| 390 ASSERT_EQ(1u, errors.size()); | 390 ASSERT_EQ(1u, errors.size()); |
| 391 | 391 |
| 392 std::string expected_error; | 392 std::string expected_error; |
| 393 expected_error.append("Failed to load the page at: ") | 393 expected_error.append("Failed to load the page at: ") |
| 394 .append(kCacheMissURL) | 394 .append(kCacheMissURL) |
| 395 .append(": The requested entry was not found in the cache."); | 395 .append(": The requested entry was not found in the cache."); |
| 396 | 396 |
| 397 ASSERT_FALSE(errors[0].compare(expected_error)); | 397 ASSERT_FALSE(errors[0].compare(expected_error)); |
| 398 } | 398 } |
| 399 #endif // !defined(OS_CHROMEOS) | 399 #endif // !defined(OS_CHROMEOS) |
| OLD | NEW |