| Index: chrome/browser/extensions/api/record/record_api_test.cc
|
| diff --git a/chrome/browser/extensions/api/record/record_api_test.cc b/chrome/browser/extensions/api/record/record_api_test.cc
|
| deleted file mode 100644
|
| index 40813a218c8afef910d4e162b51c4bdf9e2f6afc..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/record/record_api_test.cc
|
| +++ /dev/null
|
| @@ -1,353 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/extensions/api/record/record_api.h"
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/file_util.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/path_service.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/threading/sequenced_worker_pool.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/extensions/extension_function_test_utils.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_window.h"
|
| -#include "chrome/common/chrome_paths.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/extensions/api/experimental_record.h"
|
| -#include "chrome/test/base/in_process_browser_test.h"
|
| -#include "chrome/test/base/ui_test_utils.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/common/content_switches.h"
|
| -
|
| -namespace utils = extension_function_test_utils;
|
| -
|
| -namespace extensions {
|
| -
|
| -namespace {
|
| -
|
| -// Dummy content for mock stats file.
|
| -const std::string kTestStatistics = "Sample Stat 1\nSample Stat 2\n";
|
| -
|
| -// Standard capture parameters, with a mix of good and bad URLs, and
|
| -// a hole for filling in the user data dir.
|
| -
|
| -// Restore these on the next CL of the new page cycler, when the C++
|
| -// side's implementation is de-hacked.
|
| -//const char kCaptureArgs1[] =
|
| -// "[\"%s\", [\"URL 1\", \"URL 2(bad)\", \"URL 3\", \"URL 4(bad)\"]]";
|
| -
|
| -const char kCaptureArgs1[] =
|
| - "[\"%s\", [\"http://www.google.com\", \"http://www.amazon.com\"]]";
|
| -
|
| -// Standard playback parameters, with the same mix of good and bad URLs
|
| -// as the capture parameters, a hole for filling in the user data dir, and
|
| -// a mocked-up extension path and repeat count (which are used only to
|
| -// verify that they made it into the CommandLine, since extension loading
|
| -// and repeat-counting are hard to emulate in the test ProcessStrategy.
|
| -const char kPlaybackArgs1[] =
|
| - "[\"%s\", 2, {\"extensionPath\": \"MockExtension\"}]";
|
| -
|
| -// Use this as the value of base::FilePath switches (e.g. user-data-dir) that
|
| -// should be replaced by the record methods.
|
| -const base::FilePath::CharType kDummyDirName[] = FILE_PATH_LITERAL("ReplaceMe");
|
| -
|
| -// Use this as the filename for a mock "cache" file in the user-data-dir.
|
| -const base::FilePath::CharType kMockCacheFile[] =
|
| - FILE_PATH_LITERAL("MockCache");
|
| -
|
| -}
|
| -
|
| -class TestProcessStrategy : public ProcessStrategy {
|
| - public:
|
| - explicit TestProcessStrategy(std::vector<base::FilePath>* temp_files)
|
| - : command_line_(CommandLine::NO_PROGRAM), temp_files_(temp_files) {}
|
| -
|
| - virtual ~TestProcessStrategy() {}
|
| -
|
| - // Pump the blocking pool queue, since this is needed during test.
|
| - virtual void PumpBlockingPool() OVERRIDE {
|
| - content::BrowserThread::GetBlockingPool()->FlushForTesting();
|
| - }
|
| -
|
| - // Act somewhat like a real test browser instance. In particular:
|
| - // 1. If visit-urls, then
|
| - // a. If record-mode, then put a copy of the URL list into the user data
|
| - // directory in a mocked up cache file
|
| - // b. If playback-mode, then check for existence of that URL list copy
|
| - // in the cache
|
| - // c. Scan list of URLS, noting in |urls_visited_| all those
|
| - // visited. If there are any "bad" URLS, don't visit these, but
|
| - // create a ".errors" file listing them.
|
| - // 2. If record-stats, then create a mock stats file.
|
| - virtual void RunProcess(const CommandLine& command_line,
|
| - std::vector<std::string>* errors) OVERRIDE {
|
| - command_line_ = command_line;
|
| - visited_urls_.clear();
|
| -
|
| - if (command_line.HasSwitch(switches::kVisitURLs)) {
|
| - base::FilePath url_path =
|
| - command_line.GetSwitchValuePath(switches::kVisitURLs);
|
| -
|
| - temp_files_->push_back(url_path);
|
| - if (command_line.HasSwitch(switches::kRecordMode) ||
|
| - command_line.HasSwitch(switches::kPlaybackMode)) {
|
| - base::FilePath url_path_copy = command_line.GetSwitchValuePath(
|
| - switches::kUserDataDir).Append(
|
| - base::FilePath(base::FilePath::StringType(kMockCacheFile)));
|
| -
|
| - if (command_line.HasSwitch(switches::kRecordMode)) {
|
| - base::CopyFile(url_path, url_path_copy);
|
| - } else {
|
| - if (!base::ContentsEqual(url_path, url_path_copy)) {
|
| - std::string contents1, contents2;
|
| - file_util::ReadFileToString(url_path, &contents1);
|
| - file_util::ReadFileToString(url_path_copy, &contents2);
|
| - LOG(ERROR) << "FILE MISMATCH" << contents1 << " VS " << contents2;
|
| - }
|
| - EXPECT_TRUE(base::ContentsEqual(url_path, url_path_copy));
|
| - }
|
| - }
|
| -
|
| - std::string urls;
|
| - file_util::ReadFileToString(url_path, &urls);
|
| -
|
| - std::vector<std::string> url_vector, bad_urls;
|
| - base::SplitString(urls, '\n', &url_vector);
|
| - for (std::vector<std::string>::iterator itr = url_vector.begin();
|
| - itr != url_vector.end(); ++itr) {
|
| - if (itr->find_first_of("bad") != std::string::npos)
|
| - bad_urls.push_back(*itr);
|
| - else
|
| - visited_urls_.push_back(*itr);
|
| - }
|
| -
|
| - if (!bad_urls.empty()) {
|
| - base::FilePath url_errors_path = url_path.DirName()
|
| - .Append(url_path.BaseName().value() +
|
| - base::FilePath::StringType(kURLErrorsSuffix));
|
| - std::string error_content = JoinString(bad_urls, '\n');
|
| - temp_files_->push_back(url_errors_path);
|
| - file_util::WriteFile(url_errors_path, error_content.c_str(),
|
| - error_content.size());
|
| - }
|
| - }
|
| -
|
| - if (command_line.HasSwitch(switches::kRecordStats)) {
|
| - base::FilePath record_stats_path(command_line.GetSwitchValuePath(
|
| - switches::kRecordStats));
|
| - temp_files_->push_back(record_stats_path);
|
| - file_util::WriteFile(record_stats_path, kTestStatistics.c_str(),
|
| - kTestStatistics.size());
|
| - }
|
| - }
|
| -
|
| - const CommandLine& GetCommandLine() const {
|
| - return command_line_;
|
| - }
|
| -
|
| - const std::vector<std::string>& GetVisitedURLs() const {
|
| - return visited_urls_;
|
| - }
|
| -
|
| - private:
|
| - CommandLine command_line_;
|
| - std::vector<std::string> visited_urls_;
|
| - std::vector<base::FilePath>* temp_files_;
|
| -};
|
| -
|
| -class RecordApiTest : public InProcessBrowserTest {
|
| - public:
|
| - RecordApiTest() {}
|
| - virtual ~RecordApiTest() {}
|
| -
|
| - // Override to scope known temp directories outside the scope of the running
|
| - // browser test.
|
| - virtual void SetUp() OVERRIDE {
|
| - InProcessBrowserTest::SetUp();
|
| - if (!scoped_temp_user_data_dir_.Set(base::FilePath(kDummyDirName)))
|
| - NOTREACHED();
|
| - }
|
| -
|
| - // Override to delete temp directories.
|
| - virtual void TearDown() OVERRIDE {
|
| - if (!scoped_temp_user_data_dir_.Delete())
|
| - NOTREACHED();
|
| - InProcessBrowserTest::TearDown();
|
| - }
|
| -
|
| - // Override to delete temporary files created during execution.
|
| - virtual void CleanUpOnMainThread() OVERRIDE {
|
| - InProcessBrowserTest::CleanUpOnMainThread();
|
| - for (std::vector<base::FilePath>::const_iterator it = temp_files_.begin();
|
| - it != temp_files_.end(); ++it) {
|
| - if (!base::DeleteFile(*it, false))
|
| - NOTREACHED();
|
| - }
|
| - }
|
| -
|
| - // Override SetUpCommandline to specify a dummy user_data_dir, which
|
| - // should be replaced. Clear record-mode, playback-mode, visit-urls,
|
| - // record-stats, and load-extension.
|
| - virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
|
| - std::vector<std::string> remove_switches;
|
| -
|
| - remove_switches.push_back(switches::kUserDataDir);
|
| - remove_switches.push_back(switches::kVisitURLs);
|
| - remove_switches.push_back(switches::kPlaybackMode);
|
| - remove_switches.push_back(switches::kRecordStats);
|
| - remove_switches.push_back(switches::kLoadExtension);
|
| - *command_line = RunPageCyclerFunction::RemoveSwitches(*command_line,
|
| - remove_switches);
|
| -
|
| - command_line->AppendSwitchPath(switches::kUserDataDir,
|
| - base::FilePath(kDummyDirName));
|
| - // Adding a dummy load-extension switch is rather complex since the
|
| - // preent design of InProcessBrowserTest requires a *real* extension
|
| - // for the flag, even if we're just testing its replacement. Opted
|
| - // to omit this for the sake of simplicity.
|
| - }
|
| -
|
| - // Run a capture, using standard URL test list and the specified
|
| - // user data dir. Return via |out_list| the list of error URLs,
|
| - // if any, resulting from the capture. And return directly the
|
| - // RecordCaptureURLsFunction that was used, so that its state may be
|
| - // queried.
|
| - scoped_refptr<RecordCaptureURLsFunction> RunCapture(
|
| - const base::FilePath& user_data_dir,
|
| - scoped_ptr<base::ListValue>* out_list) {
|
| -
|
| - scoped_refptr<RecordCaptureURLsFunction> capture_function(
|
| - new RecordCaptureURLsFunction(new TestProcessStrategy(&temp_files_)));
|
| -
|
| - std::string escaped_user_data_dir;
|
| - ReplaceChars(user_data_dir.AsUTF8Unsafe(), "\\", "\\\\",
|
| - &escaped_user_data_dir);
|
| -
|
| - out_list->reset(utils::ToList(
|
| - utils::RunFunctionAndReturnSingleResult(capture_function.get(),
|
| - base::StringPrintf(kCaptureArgs1, escaped_user_data_dir.c_str()),
|
| - browser())));
|
| -
|
| - return capture_function;
|
| - }
|
| -
|
| - // Verify that the URL list of good and bad URLs was properly handled.
|
| - // Needed by several tests.
|
| - bool VerifyURLHandling(const base::ListValue* result,
|
| - const TestProcessStrategy& strategy) {
|
| -
|
| - // Check that the two bad URLs are returned.
|
| - StringValue badURL2("URL 2(bad)"), badURL4("URL 4(bad)");
|
| -
|
| - /* TODO(CAS) Need to rework this once the new record API is implemented.
|
| - const base::Value* string_value = NULL;
|
| - EXPECT_TRUE(result->GetSize() == 2);
|
| - result->Get(0, &string_value);
|
| - EXPECT_TRUE(base::Value::Equals(string_value, &badURL2));
|
| - result->Get(1, &string_value);
|
| - EXPECT_TRUE(base::Value::Equals(string_value, &badURL4));
|
| -
|
| - // Check that both good URLs were visited.
|
| - std::string goodURL1("URL 1"), goodURL3("URL 3");
|
| - EXPECT_TRUE(strategy.GetVisitedURLs()[0].compare(goodURL1) == 0
|
| - && strategy.GetVisitedURLs()[1].compare(goodURL3) == 0);
|
| - */
|
| -
|
| - return true;
|
| - }
|
| -
|
| - protected:
|
| - std::vector<base::FilePath> temp_files_;
|
| -
|
| - private:
|
| - base::ScopedTempDir scoped_temp_user_data_dir_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RecordApiTest);
|
| -};
|
| -
|
| -
|
| -IN_PROC_BROWSER_TEST_F(RecordApiTest, DISABLED_CheckCapture) {
|
| - base::ScopedTempDir user_data_dir;
|
| - scoped_ptr<base::ListValue> result;
|
| -
|
| - EXPECT_TRUE(user_data_dir.CreateUniqueTempDir());
|
| - scoped_refptr<RecordCaptureURLsFunction> capture_URLs_function =
|
| - RunCapture(user_data_dir.path(), &result);
|
| -
|
| - // Check that user-data-dir switch has been properly overridden.
|
| - const TestProcessStrategy &strategy =
|
| - static_cast<const TestProcessStrategy &>(
|
| - capture_URLs_function->GetProcessStrategy());
|
| - const CommandLine& command_line = strategy.GetCommandLine();
|
| -
|
| - EXPECT_TRUE(command_line.HasSwitch(switches::kUserDataDir));
|
| - EXPECT_TRUE(command_line.GetSwitchValuePath(switches::kUserDataDir) !=
|
| - base::FilePath(kDummyDirName));
|
| -
|
| - EXPECT_TRUE(VerifyURLHandling(result.get(), strategy));
|
| -}
|
| -
|
| -#if defined(ADDRESS_SANITIZER)
|
| -// Times out under ASan, see http://crbug.com/130267.
|
| -#define MAYBE_CheckPlayback DISABLED_CheckPlayback
|
| -#else
|
| -// Flaky on all platforms, see http://crbug.com/167143
|
| -#define MAYBE_CheckPlayback DISABLED_CheckPlayback
|
| -#endif
|
| -IN_PROC_BROWSER_TEST_F(RecordApiTest, MAYBE_CheckPlayback) {
|
| - base::ScopedTempDir user_data_dir;
|
| -
|
| - EXPECT_TRUE(user_data_dir.CreateUniqueTempDir());
|
| -
|
| - // Assume this RunCapture operates w/o error, since it's tested
|
| - // elsewhere.
|
| - scoped_ptr<base::ListValue> capture_result;
|
| - RunCapture(user_data_dir.path(), &capture_result);
|
| -
|
| - std::string escaped_user_data_dir;
|
| - ReplaceChars(user_data_dir.path().AsUTF8Unsafe(), "\\", "\\\\",
|
| - &escaped_user_data_dir);
|
| -
|
| - scoped_refptr<RecordReplayURLsFunction> playback_function(
|
| - new RecordReplayURLsFunction(
|
| - new TestProcessStrategy(&temp_files_)));
|
| - scoped_ptr<base::DictionaryValue> result(
|
| - utils::ToDictionary(utils::RunFunctionAndReturnSingleResult(
|
| - playback_function.get(),
|
| - base::StringPrintf(kPlaybackArgs1, escaped_user_data_dir.c_str()),
|
| - browser())));
|
| -
|
| - // Check that command line user-data-dir was overridden. (That
|
| - // it was *consistently* overridden in both capture and replay
|
| - // is verified elsewhere.
|
| - const TestProcessStrategy &strategy =
|
| - static_cast<const TestProcessStrategy &>(
|
| - playback_function->GetProcessStrategy());
|
| - const CommandLine& command_line = strategy.GetCommandLine();
|
| -
|
| - EXPECT_TRUE(command_line.HasSwitch(switches::kUserDataDir));
|
| - EXPECT_TRUE(command_line.GetSwitchValuePath(switches::kUserDataDir) !=
|
| - base::FilePath(kDummyDirName));
|
| -
|
| - // Check that command line load-extension was overridden.
|
| - EXPECT_TRUE(command_line.HasSwitch(switches::kLoadExtension) &&
|
| - command_line.GetSwitchValuePath(switches::kLoadExtension)
|
| - != base::FilePath(kDummyDirName));
|
| -
|
| - // Check for return value with proper stats.
|
| - EXPECT_EQ(kTestStatistics, utils::GetString(result.get(), kStatsKey));
|
| -
|
| - base::ListValue* errors = NULL;
|
| - EXPECT_TRUE(result->GetList(kErrorsKey, &errors));
|
| - EXPECT_TRUE(VerifyURLHandling(errors, strategy));
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|