OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // Tests exercising the Chrome Plugin API. | 4 // Tests exercising the Chrome Plugin API. |
5 | 5 |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "chrome/browser/chrome_plugin_host.h" | 9 #include "chrome/browser/chrome_plugin_host.h" |
10 #include "chrome/browser/net/url_fetcher.h" | 10 #include "chrome/browser/net/url_fetcher.h" |
11 #include "chrome/browser/profile.h" | 11 #include "chrome/browser/profile.h" |
12 #include "chrome/common/chrome_plugin_lib.h" | 12 #include "chrome/common/chrome_plugin_lib.h" |
13 #include "chrome/test/chrome_plugin/test_chrome_plugin.h" | 13 #include "chrome/test/chrome_plugin/test_chrome_plugin.h" |
| 14 #include "net/base/io_buffer.h" |
14 #include "net/url_request/url_request_test_job.h" | 15 #include "net/url_request/url_request_test_job.h" |
15 #include "net/url_request/url_request_unittest.h" | 16 #include "net/url_request/url_request_unittest.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
17 | 18 |
18 namespace { | 19 namespace { |
19 | 20 |
20 const wchar_t kDocRoot[] = L"chrome/test/data"; | 21 const wchar_t kDocRoot[] = L"chrome/test/data"; |
21 const char kPluginFilename[] = "test_chrome_plugin.dll"; | 22 const char kPluginFilename[] = "test_chrome_plugin.dll"; |
| 23 const int kResponseBufferSize = 4096; |
22 | 24 |
23 class ChromePluginTest : public testing::Test, public URLRequest::Delegate { | 25 class ChromePluginTest : public testing::Test, public URLRequest::Delegate { |
24 public: | 26 public: |
25 ChromePluginTest() | 27 ChromePluginTest() |
26 : request_(NULL), | 28 : request_(NULL), |
| 29 response_buffer_(new net::IOBuffer(kResponseBufferSize)), |
27 plugin_(NULL), | 30 plugin_(NULL), |
28 expected_payload_(NULL), | 31 expected_payload_(NULL), |
29 request_context_(new TestURLRequestContext()) { | 32 request_context_(new TestURLRequestContext()) { |
30 } | 33 } |
31 | 34 |
32 // Loads/unloads the chrome test plugin. | 35 // Loads/unloads the chrome test plugin. |
33 void LoadPlugin(); | 36 void LoadPlugin(); |
34 void UnloadPlugin(); | 37 void UnloadPlugin(); |
35 | 38 |
36 // Runs the test and expects the given payload as a response. If expectation | 39 // Runs the test and expects the given payload as a response. If expectation |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 | 71 |
69 // Flush the message loop to make Purify happy. | 72 // Flush the message loop to make Purify happy. |
70 message_loop_.RunAllPending(); | 73 message_loop_.RunAllPending(); |
71 } | 74 } |
72 protected: | 75 protected: |
73 MessageLoopForIO message_loop_; | 76 MessageLoopForIO message_loop_; |
74 | 77 |
75 // Note: we use URLRequest (instead of URLFetcher) because this allows the | 78 // Note: we use URLRequest (instead of URLFetcher) because this allows the |
76 // request to be intercepted. | 79 // request to be intercepted. |
77 scoped_ptr<URLRequest> request_; | 80 scoped_ptr<URLRequest> request_; |
78 char response_buffer_[4096]; | 81 scoped_refptr<net::IOBuffer> response_buffer_; |
79 std::string response_data_; | 82 std::string response_data_; |
80 | 83 |
81 ChromePluginLib* plugin_; | 84 ChromePluginLib* plugin_; |
82 TestFuncParams::PluginFuncs test_funcs_; | 85 TestFuncParams::PluginFuncs test_funcs_; |
83 const TestResponsePayload* expected_payload_; | 86 const TestResponsePayload* expected_payload_; |
84 scoped_refptr<URLRequestContext> request_context_; | 87 scoped_refptr<URLRequestContext> request_context_; |
85 }; | 88 }; |
86 | 89 |
87 static void STDCALL CPT_Complete(CPRequest* request, bool success, | 90 static void STDCALL CPT_Complete(CPRequest* request, bool success, |
88 const std::string& raw_headers, | 91 const std::string& raw_headers, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 request_->Start(); | 151 request_->Start(); |
149 | 152 |
150 MessageLoop::current()->Run(); | 153 MessageLoop::current()->Run(); |
151 } | 154 } |
152 | 155 |
153 void ChromePluginTest::OnResponseStarted(URLRequest* request) { | 156 void ChromePluginTest::OnResponseStarted(URLRequest* request) { |
154 DCHECK(request == request_); | 157 DCHECK(request == request_); |
155 | 158 |
156 int bytes_read = 0; | 159 int bytes_read = 0; |
157 if (request_->status().is_success()) | 160 if (request_->status().is_success()) |
158 request_->Read(response_buffer_, sizeof(response_buffer_), &bytes_read); | 161 request_->Read(response_buffer_, kResponseBufferSize, &bytes_read); |
159 OnReadCompleted(request_.get(), bytes_read); | 162 OnReadCompleted(request_.get(), bytes_read); |
160 } | 163 } |
161 | 164 |
162 void ChromePluginTest::OnReadCompleted(URLRequest* request, int bytes_read) { | 165 void ChromePluginTest::OnReadCompleted(URLRequest* request, int bytes_read) { |
163 DCHECK(request == request_); | 166 DCHECK(request == request_); |
164 | 167 |
165 do { | 168 do { |
166 if (!request_->status().is_success() || bytes_read <= 0) | 169 if (!request_->status().is_success() || bytes_read <= 0) |
167 break; | 170 break; |
168 response_data_.append(response_buffer_, bytes_read); | 171 response_data_.append(response_buffer_->data(), bytes_read); |
169 } while (request_->Read(response_buffer_, sizeof(response_buffer_), | 172 } while (request_->Read(response_buffer_, kResponseBufferSize, &bytes_read)); |
170 &bytes_read)); | |
171 | 173 |
172 if (!request_->status().is_io_pending()) { | 174 if (!request_->status().is_io_pending()) { |
173 OnURLRequestComplete(); | 175 OnURLRequestComplete(); |
174 } | 176 } |
175 } | 177 } |
176 | 178 |
177 void ChromePluginTest::OnURLRequestComplete() { | 179 void ChromePluginTest::OnURLRequestComplete() { |
178 if (expected_payload_) { | 180 if (expected_payload_) { |
179 EXPECT_TRUE(request_->status().is_success()); | 181 EXPECT_TRUE(request_->status().is_success()); |
180 | 182 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 // Tests that the plugin does not intercept its own requests. | 279 // Tests that the plugin does not intercept its own requests. |
278 TEST_F(ChromePluginTest, DoesNotInterceptOwnRequest) { | 280 TEST_F(ChromePluginTest, DoesNotInterceptOwnRequest) { |
279 const TestResponsePayload& payload = kChromeTestPluginPayloads[0]; | 281 const TestResponsePayload& payload = kChromeTestPluginPayloads[0]; |
280 | 282 |
281 EXPECT_EQ(CPERR_SUCCESS, test_funcs_.test_make_request( | 283 EXPECT_EQ(CPERR_SUCCESS, test_funcs_.test_make_request( |
282 "GET", GURL(payload.url))); | 284 "GET", GURL(payload.url))); |
283 | 285 |
284 MessageLoop::current()->Run(); | 286 MessageLoop::current()->Run(); |
285 } | 287 } |
286 | 288 |
OLD | NEW |