summaryrefslogtreecommitdiffstats
path: root/chrome/browser/plugin_download_helper_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/plugin_download_helper_unittest.cc')
-rw-r--r--chrome/browser/plugin_download_helper_unittest.cc122
1 files changed, 122 insertions, 0 deletions
diff --git a/chrome/browser/plugin_download_helper_unittest.cc b/chrome/browser/plugin_download_helper_unittest.cc
new file mode 100644
index 0000000..5615c5c
--- /dev/null
+++ b/chrome/browser/plugin_download_helper_unittest.cc
@@ -0,0 +1,122 @@
+// 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/plugin_download_helper.h"
+
+#include "base/bind.h"
+#include "base/file_path.h"
+#include "base/message_loop.h"
+#include "base/test/test_timeouts.h"
+#include "chrome/common/chrome_paths.h"
+#include "content/test/test_browser_thread.h"
+#include "net/base/net_util.h"
+#include "net/url_request/url_request_context.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+class TestURLRequestContextGetter : public net::URLRequestContextGetter {
+ public:
+ TestURLRequestContextGetter()
+ : io_message_loop_proxy_(base::MessageLoopProxy::current()) {
+ }
+
+ virtual net::URLRequestContext* GetURLRequestContext() {
+ if (!context_)
+ context_ = new TestURLRequestContext();
+ return context_;
+ }
+ virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() const {
+ return io_message_loop_proxy_;
+ }
+
+ protected:
+ scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_;
+
+ private:
+ virtual ~TestURLRequestContextGetter() {}
+
+ scoped_refptr<net::URLRequestContext> context_;
+};
+
+} // namespace
+
+// This class provides functionality to test the plugin installer download
+// file functionality.
+class PluginInstallerDownloadTest : public testing::Test {
+ public:
+ PluginInstallerDownloadTest()
+ : message_loop_(MessageLoop::TYPE_IO),
+ file_thread_(content::BrowserThread::FILE, &message_loop_),
+ download_helper_(NULL),
+ success_(false) {}
+ ~PluginInstallerDownloadTest() {}
+
+ void Start() {
+ FilePath path;
+ PathService::Get(chrome::DIR_TEST_DATA, &path);
+ initial_download_path_ = net::FilePathToFileURL(
+ path.AppendASCII("download-test1.lib"));
+ download_helper_ = new PluginDownloadUrlHelper();
+ TestURLRequestContextGetter* context_getter =
+ new TestURLRequestContextGetter;
+ download_helper_->InitiateDownload(
+ initial_download_path_,
+ context_getter,
+ base::Bind(&PluginInstallerDownloadTest::OnDownloadCompleted,
+ base::Unretained(this)),
+ base::Bind(&PluginInstallerDownloadTest::OnDownloadError,
+ base::Unretained(this)));
+
+ message_loop_.PostDelayedTask(
+ FROM_HERE, MessageLoop::QuitClosure(),
+ TestTimeouts::action_max_timeout_ms());
+ }
+
+ void OnDownloadCompleted(const FilePath& download_path) {
+ success_ = true;
+ final_download_path_ = download_path;
+ message_loop_.Quit();
+ download_helper_ = NULL;
+ }
+
+ void OnDownloadError(const std::string& error) {
+ ADD_FAILURE() << error;
+ message_loop_.Quit();
+ download_helper_ = NULL;
+ }
+
+ FilePath final_download_path() const {
+ return final_download_path_;
+ }
+
+ FilePath initial_download_path() const {
+ return final_download_path_;
+ }
+
+ bool success() const {
+ return success_;
+ }
+
+ private:
+ MessageLoop message_loop_;
+ content::TestBrowserThread file_thread_;
+ FilePath final_download_path_;
+ PluginDownloadUrlHelper* download_helper_;
+ bool success_;
+ GURL initial_download_path_;
+};
+
+// This test validates that the plugin downloader downloads the specified file
+// to a temporary path with the same file name.
+TEST_F(PluginInstallerDownloadTest, PluginInstallerDownloadPathTest) {
+ Start();
+ MessageLoop::current()->Run();
+
+ ASSERT_TRUE(success());
+ EXPECT_TRUE(initial_download_path().BaseName().value() ==
+ final_download_path().BaseName().value());
+}