Index: chrome/browser/chrome_plugin_unittest.cc |
diff --git a/chrome/browser/chrome_plugin_unittest.cc b/chrome/browser/chrome_plugin_unittest.cc |
deleted file mode 100644 |
index d82e8683b4069db4a0f9ecc6b639b0d012fb3a13..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chrome_plugin_unittest.cc |
+++ /dev/null |
@@ -1,294 +0,0 @@ |
-// Copyright (c) 2011 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. |
-// Tests exercising the Chrome Plugin API. |
- |
-#include "base/file_util.h" |
-#include "base/message_loop_proxy.h" |
-#include "base/path_service.h" |
-#include "base/string_util.h" |
-#include "chrome/browser/chrome_plugin_host.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/common/chrome_plugin_lib.h" |
-#include "chrome/common/net/url_request_context_getter.h" |
-#include "chrome/test/chrome_plugin/test_chrome_plugin.h" |
-#include "chrome/test/test_url_request_context_getter.h" |
-#include "content/browser/browser_thread.h" |
-#include "net/base/io_buffer.h" |
-#include "net/http/http_response_headers.h" |
-#include "net/url_request/url_request_test_job.h" |
-#include "net/url_request/url_request_test_util.h" |
-#include "net/test/test_server.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace { |
- |
-const FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("chrome/test/data"); |
-const char kPluginFilename[] = "test_chrome_plugin.dll"; |
-const int kResponseBufferSize = 4096; |
- |
-class ChromePluginTest : public testing::Test, |
- public net::URLRequest::Delegate { |
- public: |
- ChromePluginTest() |
- : io_thread_(BrowserThread::IO, &message_loop_), |
- request_(NULL), |
- response_buffer_(new net::IOBuffer(kResponseBufferSize)), |
- plugin_(NULL), |
- expected_payload_(NULL), |
- request_context_getter_(new TestURLRequestContextGetter()) { |
- test_funcs_.test_make_request = NULL; |
- } |
- |
- // Loads/unloads the chrome test plugin. |
- void LoadPlugin(); |
- void UnloadPlugin(); |
- |
- // Runs the test and expects the given payload as a response. If expectation |
- // is NULL, the request is expected to fail. |
- void RunTest(const GURL& url, const TestResponsePayload* expected_payload); |
- |
- // net::URLRequest::Delegate implementations |
- virtual void OnResponseStarted(net::URLRequest* request); |
- virtual void OnReadCompleted(net::URLRequest* request, int bytes_read); |
- |
- // Helper called when the net::URLRequest is done. |
- void OnURLRequestComplete(); |
- |
- // testing::Test |
- virtual void SetUp() { |
- LoadPlugin(); |
- net::URLRequest::RegisterProtocolFactory("test", |
- &net::URLRequestTestJob::Factory); |
- |
- // We need to setup a default request context in order to issue HTTP |
- // requests. |
- DCHECK(!Profile::GetDefaultRequestContext()); |
- Profile::set_default_request_context(request_context_getter_.get()); |
- } |
- virtual void TearDown() { |
- UnloadPlugin(); |
- net::URLRequest::RegisterProtocolFactory("test", NULL); |
- |
- Profile::set_default_request_context(NULL); |
- |
- // Clear the request before flushing the message loop since killing the |
- // request can result in the generation of more tasks. |
- request_.reset(); |
- |
- // Flush the message loop to make Purify happy. |
- message_loop_.RunAllPending(); |
- } |
- protected: |
- MessageLoopForIO message_loop_; |
- BrowserThread io_thread_; |
- |
- // Note: we use net::URLRequest (instead of URLFetcher) because this allows |
- // the request to be intercepted. |
- scoped_ptr<net::URLRequest> request_; |
- scoped_refptr<net::IOBuffer> response_buffer_; |
- std::string response_data_; |
- |
- ChromePluginLib* plugin_; |
- TestFuncParams::PluginFuncs test_funcs_; |
- const TestResponsePayload* expected_payload_; |
- scoped_refptr<URLRequestContextGetter> request_context_getter_; |
-}; |
- |
-static void STDCALL CPT_Complete(CPRequest* request, bool success, |
- const std::string& raw_headers, |
- const std::string& body) { |
- GURL url(request->url); |
- if (url == GURL(kChromeTestPluginPayloads[0].url)) { |
- // This URL should fail, because the plugin should not have intercepted it. |
- EXPECT_FALSE(success); |
- MessageLoop::current()->Quit(); |
- return; |
- } |
- |
- scoped_refptr<net::HttpResponseHeaders> headers( |
- new net::HttpResponseHeaders(raw_headers)); |
- EXPECT_TRUE(success); |
- EXPECT_EQ(200, headers->response_code()); |
- |
- if (url == net::URLRequestTestJob::test_url_1()) { |
- EXPECT_EQ(net::URLRequestTestJob::test_data_1(), body); |
- } else if (url == net::URLRequestTestJob::test_url_2()) { |
- EXPECT_EQ(net::URLRequestTestJob::test_data_2(), body); |
- } else if (url.spec().find("echo") != std::string::npos) { |
- EXPECT_EQ(kChromeTestPluginPostData, body); |
- } |
- |
- MessageLoop::current()->Quit(); |
-} |
- |
-static void STDCALL CPT_InvokeLater(TestFuncParams::CallbackFunc callback, |
- void* callback_data, int delay_ms) { |
- MessageLoop::current()->PostDelayedTask(FROM_HERE, |
- NewRunnableFunction(callback, callback_data), delay_ms); |
-} |
- |
-void ChromePluginTest::LoadPlugin() { |
- FilePath path; |
- PathService::Get(base::DIR_EXE, &path); |
- path = path.AppendASCII(kPluginFilename); |
- plugin_ = ChromePluginLib::Create(path, GetCPBrowserFuncsForBrowser()); |
- ASSERT_TRUE(plugin_); |
- |
- // Exchange test APIs with the plugin. |
- TestFuncParams params; |
- params.bfuncs.test_complete = CPT_Complete; |
- params.bfuncs.invoke_later = CPT_InvokeLater; |
- EXPECT_EQ(CPERR_SUCCESS, plugin_->CP_Test(¶ms)); |
- test_funcs_ = params.pfuncs; |
-} |
- |
-void ChromePluginTest::UnloadPlugin() { |
- ChromePluginLib::UnloadAllPlugins(); |
- plugin_ = NULL; |
-} |
- |
-void ChromePluginTest::RunTest(const GURL& url, |
- const TestResponsePayload* expected_payload) { |
- expected_payload_ = expected_payload; |
- |
- response_data_.clear(); |
- request_.reset(new net::URLRequest(url, this)); |
- request_->set_context(new TestURLRequestContext()); |
- request_->Start(); |
- |
- MessageLoop::current()->Run(); |
-} |
- |
-void ChromePluginTest::OnResponseStarted(net::URLRequest* request) { |
- DCHECK(request == request_); |
- |
- int bytes_read = 0; |
- if (request_->status().is_success()) |
- request_->Read(response_buffer_, kResponseBufferSize, &bytes_read); |
- OnReadCompleted(request_.get(), bytes_read); |
-} |
- |
-void ChromePluginTest::OnReadCompleted(net::URLRequest* request, |
- int bytes_read) { |
- DCHECK(request == request_); |
- |
- do { |
- if (!request_->status().is_success() || bytes_read <= 0) |
- break; |
- response_data_.append(response_buffer_->data(), bytes_read); |
- } while (request_->Read(response_buffer_, kResponseBufferSize, &bytes_read)); |
- |
- if (!request_->status().is_io_pending()) { |
- OnURLRequestComplete(); |
- } |
-} |
- |
-void ChromePluginTest::OnURLRequestComplete() { |
- if (expected_payload_) { |
- EXPECT_TRUE(request_->status().is_success()); |
- |
- EXPECT_EQ(expected_payload_->status, request_->GetResponseCode()); |
- if (expected_payload_->mime_type) { |
- std::string mime_type; |
- EXPECT_TRUE(request_->response_headers()->GetMimeType(&mime_type)); |
- EXPECT_EQ(expected_payload_->mime_type, mime_type); |
- } |
- if (expected_payload_->body) { |
- EXPECT_EQ(expected_payload_->body, response_data_); |
- } |
- } else { |
- EXPECT_FALSE(request_->status().is_success()); |
- } |
- |
- MessageLoop::current()->Quit(); |
- // If MessageLoop::current() != main_loop_, it will be shut down when the |
- // main loop returns and this thread subsequently goes out of scope. |
-} |
- |
-// Tests that the plugin can intercept URLs. |
-TEST_F(ChromePluginTest, DoesIntercept) { |
- for (size_t i = 0; i < arraysize(kChromeTestPluginPayloads); ++i) { |
- RunTest(GURL(kChromeTestPluginPayloads[i].url), |
- &kChromeTestPluginPayloads[i]); |
- } |
-} |
- |
-// Tests that non-intercepted URLs are handled normally. |
-TEST_F(ChromePluginTest, DoesNotIntercept) { |
- TestResponsePayload about_blank = { |
- "about:blank", |
- false, |
- -1, |
- NULL, |
- "" |
- }; |
- RunTest(GURL(about_blank.url), &about_blank); |
-} |
- |
-// Tests that unloading the plugin correctly unregisters URL interception. |
-TEST_F(ChromePluginTest, UnregisterIntercept) { |
- UnloadPlugin(); |
- |
- RunTest(GURL(kChromeTestPluginPayloads[0].url), NULL); |
-} |
- |
-static void ProcessAllPendingMessages() { |
- while (net::URLRequestTestJob::ProcessOnePendingMessage()); |
-} |
- |
-// Tests that the plugin can issue a GET request and receives the data when |
-// it comes back synchronously. |
-TEST_F(ChromePluginTest, CanMakeGETRequestSync) { |
- // test_url_1 has a synchronous response |
- EXPECT_EQ(CPERR_SUCCESS, test_funcs_.test_make_request( |
- "GET", net::URLRequestTestJob::test_url_1())); |
- |
- // Note: we must add this task after we make the request, so that |
- // net::URLRequestTestJob's StartAsync task is added and run first. |
- MessageLoop::current()->PostTask(FROM_HERE, |
- NewRunnableFunction(&ProcessAllPendingMessages)); |
- MessageLoop::current()->Run(); |
-} |
- |
-// Tests that the plugin can issue a GET request and receives the data when |
-// it comes back asynchronously. |
-TEST_F(ChromePluginTest, CanMakeGETRequestAsync) { |
- // test_url_2 has an asynchronous response |
- EXPECT_EQ(CPERR_SUCCESS, test_funcs_.test_make_request( |
- "GET", net::URLRequestTestJob::test_url_2())); |
- |
- // Note: we must add this task after we make the request, so that |
- // net::URLRequestTestJob's StartAsync task is added and run first. |
- MessageLoop::current()->PostTask(FROM_HERE, |
- NewRunnableFunction(&ProcessAllPendingMessages)); |
- MessageLoop::current()->Run(); |
-} |
- |
-// Tests that the plugin can issue a POST request. |
-TEST_F(ChromePluginTest, CanMakePOSTRequest) { |
- net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); |
- ASSERT_TRUE(test_server.Start()); |
- |
- GURL url = test_server.GetURL("echo"); |
- |
- EXPECT_EQ(CPERR_SUCCESS, test_funcs_.test_make_request("POST", url)); |
- |
- // Note: we must add this task after we make the request, so that |
- // net::URLRequestTestJob's StartAsync task is added and run first. |
- MessageLoop::current()->PostTask(FROM_HERE, |
- NewRunnableFunction(&ProcessAllPendingMessages)); |
- MessageLoop::current()->Run(); |
-} |
- |
-// Tests that the plugin does not intercept its own requests. |
-TEST_F(ChromePluginTest, DoesNotInterceptOwnRequest) { |
- const TestResponsePayload& payload = kChromeTestPluginPayloads[0]; |
- |
- EXPECT_EQ(CPERR_SUCCESS, test_funcs_.test_make_request( |
- "GET", GURL(payload.url))); |
- |
- MessageLoop::current()->Run(); |
-} |
- |
-} // namespace |