diff options
Diffstat (limited to 'chrome/test/plugin/plugin_test.cpp')
-rw-r--r-- | chrome/test/plugin/plugin_test.cpp | 151 |
1 files changed, 135 insertions, 16 deletions
diff --git a/chrome/test/plugin/plugin_test.cpp b/chrome/test/plugin/plugin_test.cpp index aaf2e37..3d0a2ed 100644 --- a/chrome/test/plugin/plugin_test.cpp +++ b/chrome/test/plugin/plugin_test.cpp @@ -29,13 +29,23 @@ #include "base/file_path.h" #include "base/file_util.h" +#include "base/message_loop.h" #include "base/path_service.h" #include "chrome/browser/net/url_request_mock_http_job.h" +#include "chrome/browser/plugin_download_helper.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_paths.h" #include "chrome/test/automation/tab_proxy.h" #include "chrome/test/ui/ui_test.h" +#include "net/base/capturing_net_log.h" +#include "net/base/host_resolver.h" #include "net/base/net_util.h" +#include "net/base/ssl_config_service_defaults.h" +#include "net/http/http_auth_handler_factory.h" +#include "net/http/http_cache.h" +#include "net/http/http_network_layer.h" +#include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_status.h" #include "third_party/npapi/bindings/npapi.h" #include "webkit/glue/plugins/plugin_constants_win.h" #include "webkit/glue/plugins/plugin_list.h" @@ -45,6 +55,23 @@ #endif class PluginTest : public UITest { + public: + // Generate the URL for testing a particular test. + // HTML for the tests is all located in test_directory\plugin\<testcase> + // Set |mock_http| to true to use mock HTTP server. + static GURL GetTestUrl(const std::string &test_case, bool mock_http) { + static const FilePath::CharType kPluginPath[] = FILE_PATH_LITERAL("plugin"); + if (mock_http) { + FilePath plugin_path = FilePath(kPluginPath).AppendASCII(test_case); + return URLRequestMockHTTPJob::GetMockUrl(plugin_path); + } + + FilePath path; + PathService::Get(chrome::DIR_TEST_DATA, &path); + path = path.Append(kPluginPath).AppendASCII(test_case); + return net::FilePathToFileURL(path); + } + protected: #if defined(OS_WIN) virtual void SetUp() { @@ -80,22 +107,6 @@ class PluginTest : public UITest { WaitForFinish(timeout, mock_http); } - // Generate the URL for testing a particular test. - // HTML for the tests is all located in test_directory\plugin\<testcase> - // Set |mock_http| to true to use mock HTTP server. - GURL GetTestUrl(const std::string &test_case, bool mock_http) { - static const FilePath::CharType kPluginPath[] = FILE_PATH_LITERAL("plugin"); - if (mock_http) { - FilePath plugin_path = FilePath(kPluginPath).AppendASCII(test_case); - return URLRequestMockHTTPJob::GetMockUrl(plugin_path); - } - - FilePath path; - PathService::Get(chrome::DIR_TEST_DATA, &path); - path = path.Append(kPluginPath).AppendASCII(test_case); - return net::FilePathToFileURL(path); - } - // Waits for the test case to finish. void WaitForFinish(const int wait_time, bool mock_http) { static const char kTestCompleteCookie[] = "status"; @@ -183,4 +194,112 @@ TEST_F(PluginTest, DISABLED_Java) { TEST_F(PluginTest, Silverlight) { TestPlugin("silverlight.html", action_max_timeout_ms(), false); } + +// This class provides functionality to test the plugin installer download +// file functionality. +class PluginInstallerDownloadTest + : public PluginDownloadUrlHelper::DownloadDelegate, + public testing::Test { + public: + // This class provides HTTP request context information for the downloads. + class UploadRequestContext : public URLRequestContext { + public: + UploadRequestContext() { + Initialize(); + } + + ~UploadRequestContext() { + DLOG(INFO) << __FUNCTION__; + delete http_transaction_factory_; + delete http_auth_handler_factory_; + } + + void Initialize() { + host_resolver_ = + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism, + NULL); + net::ProxyConfigService* proxy_config_service = + net::ProxyService::CreateSystemProxyConfigService(NULL, NULL); + DCHECK(proxy_config_service); + + const size_t kNetLogBound = 50u; + net_log_.reset(new net::CapturingNetLog(kNetLogBound)); + + proxy_service_ = net::ProxyService::Create(proxy_config_service, false, 0, + this, net_log_.get(), + MessageLoop::current()); + DCHECK(proxy_service_); + + ssl_config_service_ = new net::SSLConfigServiceDefaults; + http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault(); + http_transaction_factory_ = new net::HttpCache( + net::HttpNetworkLayer::CreateFactory(host_resolver_, + proxy_service_, + ssl_config_service_, + http_auth_handler_factory_, + network_delegate_, + NULL), + net::HttpCache::DefaultBackend::InMemory(0)); + } + + private: + scoped_ptr<net::NetLog> net_log_; + scoped_ptr<net::URLSecurityManager> url_security_manager_; + }; + + PluginInstallerDownloadTest() + : success_(false), + download_helper_(NULL) {} + ~PluginInstallerDownloadTest() {} + + void Start() { + initial_download_path_ = PluginTest::GetTestUrl("flash.html", false); + download_helper_ = new PluginDownloadUrlHelper( + initial_download_path_.spec(), base::GetCurrentProcId(), NULL, + static_cast<PluginDownloadUrlHelper::DownloadDelegate*>(this)); + download_helper_->InitiateDownload(new UploadRequestContext); + + MessageLoop::current()->PostDelayedTask( + FROM_HERE, new MessageLoop::QuitTask, + TestTimeouts::action_max_timeout_ms()); + } + + virtual void OnDownloadCompleted(const FilePath& download_path, + bool success) { + success_ = success; + final_download_path_ = download_path; + MessageLoop::current()->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: + 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) { + MessageLoop loop(MessageLoop::TYPE_IO); + Start(); + loop.Run(); + + EXPECT_TRUE(success()); + EXPECT_TRUE(initial_download_path().BaseName().value() == + final_download_path().BaseName().value()); +} #endif // defined(OS_WIN) |