| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 | 4 |
| 5 #include "content/test/test_url_fetcher_factory.h" | 5 #include "content/test/test_url_fetcher_factory.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| 11 #include "content/public/common/url_fetcher_delegate.h" |
| 11 #include "net/http/http_response_headers.h" | 12 #include "net/http/http_response_headers.h" |
| 12 #include "net/url_request/url_request_status.h" | 13 #include "net/url_request/url_request_status.h" |
| 13 | 14 |
| 14 ScopedURLFetcherFactory::ScopedURLFetcherFactory(URLFetcher::Factory* factory) { | 15 ScopedURLFetcherFactory::ScopedURLFetcherFactory(URLFetcher::Factory* factory) { |
| 15 DCHECK(!URLFetcher::factory()); | 16 DCHECK(!URLFetcher::factory()); |
| 16 URLFetcher::set_factory(factory); | 17 URLFetcher::set_factory(factory); |
| 17 } | 18 } |
| 18 | 19 |
| 19 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { | 20 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { |
| 20 DCHECK(URLFetcher::factory()); | 21 DCHECK(URLFetcher::factory()); |
| 21 URLFetcher::set_factory(NULL); | 22 URLFetcher::set_factory(NULL); |
| 22 } | 23 } |
| 23 | 24 |
| 24 TestURLFetcher::TestURLFetcher(int id, | 25 TestURLFetcher::TestURLFetcher(int id, |
| 25 const GURL& url, | 26 const GURL& url, |
| 26 URLFetcher::RequestType request_type, | 27 URLFetcher::RequestType request_type, |
| 27 URLFetcher::Delegate* d) | 28 content::URLFetcherDelegate* d) |
| 28 : URLFetcher(url, request_type, d), | 29 : URLFetcher(url, request_type, d), |
| 29 id_(id), | 30 id_(id), |
| 30 original_url_(url), | 31 original_url_(url), |
| 31 did_receive_last_chunk_(false) { | 32 did_receive_last_chunk_(false) { |
| 32 } | 33 } |
| 33 | 34 |
| 34 TestURLFetcher::~TestURLFetcher() { | 35 TestURLFetcher::~TestURLFetcher() { |
| 35 } | 36 } |
| 36 | 37 |
| 37 void TestURLFetcher::AppendChunkToUpload(const std::string& data, | 38 void TestURLFetcher::AppendChunkToUpload(const std::string& data, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 61 void TestURLFetcher::SetResponseString(const std::string& response) { | 62 void TestURLFetcher::SetResponseString(const std::string& response) { |
| 62 SetResponseDestinationForTesting(STRING); | 63 SetResponseDestinationForTesting(STRING); |
| 63 fake_response_string_ = response; | 64 fake_response_string_ = response; |
| 64 } | 65 } |
| 65 | 66 |
| 66 void TestURLFetcher::SetResponseFilePath(const FilePath& path) { | 67 void TestURLFetcher::SetResponseFilePath(const FilePath& path) { |
| 67 SetResponseDestinationForTesting(TEMP_FILE); | 68 SetResponseDestinationForTesting(TEMP_FILE); |
| 68 fake_response_file_path_ = path; | 69 fake_response_file_path_ = path; |
| 69 } | 70 } |
| 70 | 71 |
| 71 const std::string& TestURLFetcher::GetResponseStringRef() const { | |
| 72 return fake_response_string_; | |
| 73 } | |
| 74 | |
| 75 bool TestURLFetcher::GetResponseAsString( | 72 bool TestURLFetcher::GetResponseAsString( |
| 76 std::string* out_response_string) const { | 73 std::string* out_response_string) const { |
| 77 if (GetResponseDestinationForTesting() != STRING) | 74 if (GetResponseDestinationForTesting() != STRING) |
| 78 return false; | 75 return false; |
| 79 | 76 |
| 80 *out_response_string = fake_response_string_; | 77 *out_response_string = fake_response_string_; |
| 81 return true; | 78 return true; |
| 82 } | 79 } |
| 83 | 80 |
| 84 bool TestURLFetcher::GetResponseAsFilePath( | 81 bool TestURLFetcher::GetResponseAsFilePath( |
| 85 bool take_ownership, FilePath* out_response_path) const { | 82 bool take_ownership, FilePath* out_response_path) const { |
| 86 if (GetResponseDestinationForTesting() != TEMP_FILE) | 83 if (GetResponseDestinationForTesting() != TEMP_FILE) |
| 87 return false; | 84 return false; |
| 88 | 85 |
| 89 *out_response_path = fake_response_file_path_; | 86 *out_response_path = fake_response_file_path_; |
| 90 return true; | 87 return true; |
| 91 } | 88 } |
| 92 | 89 |
| 93 TestURLFetcherFactory::TestURLFetcherFactory() | 90 TestURLFetcherFactory::TestURLFetcherFactory() |
| 94 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 91 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 95 } | 92 } |
| 96 | 93 |
| 97 TestURLFetcherFactory::~TestURLFetcherFactory() {} | 94 TestURLFetcherFactory::~TestURLFetcherFactory() {} |
| 98 | 95 |
| 99 URLFetcher* TestURLFetcherFactory::CreateURLFetcher( | 96 URLFetcher* TestURLFetcherFactory::CreateURLFetcher( |
| 100 int id, | 97 int id, |
| 101 const GURL& url, | 98 const GURL& url, |
| 102 URLFetcher::RequestType request_type, | 99 URLFetcher::RequestType request_type, |
| 103 URLFetcher::Delegate* d) { | 100 content::URLFetcherDelegate* d) { |
| 104 TestURLFetcher* fetcher = new TestURLFetcher(id, url, request_type, d); | 101 TestURLFetcher* fetcher = new TestURLFetcher(id, url, request_type, d); |
| 105 fetchers_[id] = fetcher; | 102 fetchers_[id] = fetcher; |
| 106 return fetcher; | 103 return fetcher; |
| 107 } | 104 } |
| 108 | 105 |
| 109 TestURLFetcher* TestURLFetcherFactory::GetFetcherByID(int id) const { | 106 TestURLFetcher* TestURLFetcherFactory::GetFetcherByID(int id) const { |
| 110 Fetchers::const_iterator i = fetchers_.find(id); | 107 Fetchers::const_iterator i = fetchers_.find(id); |
| 111 return i == fetchers_.end() ? NULL : i->second; | 108 return i == fetchers_.end() ? NULL : i->second; |
| 112 } | 109 } |
| 113 | 110 |
| 114 void TestURLFetcherFactory::RemoveFetcherFromMap(int id) { | 111 void TestURLFetcherFactory::RemoveFetcherFromMap(int id) { |
| 115 Fetchers::iterator i = fetchers_.find(id); | 112 Fetchers::iterator i = fetchers_.find(id); |
| 116 DCHECK(i != fetchers_.end()); | 113 DCHECK(i != fetchers_.end()); |
| 117 fetchers_.erase(i); | 114 fetchers_.erase(i); |
| 118 } | 115 } |
| 119 | 116 |
| 120 const GURL& TestURLFetcher::url() const { | 117 const GURL& TestURLFetcher::url() const { |
| 121 return fake_url_; | 118 return fake_url_; |
| 122 } | 119 } |
| 123 | 120 |
| 124 const net::URLRequestStatus& TestURLFetcher::status() const { | 121 const net::URLRequestStatus& TestURLFetcher::status() const { |
| 125 return fake_status_; | 122 return fake_status_; |
| 126 } | 123 } |
| 127 | 124 |
| 128 int TestURLFetcher::response_code() const { | 125 int TestURLFetcher::response_code() const { |
| 129 return fake_response_code_; | 126 return fake_response_code_; |
| 130 } | 127 } |
| 131 | 128 |
| 129 const net::ResponseCookies& TestURLFetcher::cookies() const { |
| 130 return fake_cookies_; |
| 131 } |
| 132 |
| 132 // This class is used by the FakeURLFetcherFactory below. | 133 // This class is used by the FakeURLFetcherFactory below. |
| 133 class FakeURLFetcher : public URLFetcher { | 134 class FakeURLFetcher : public URLFetcher { |
| 134 public: | 135 public: |
| 135 // Normal URL fetcher constructor but also takes in a pre-baked response. | 136 // Normal URL fetcher constructor but also takes in a pre-baked response. |
| 136 FakeURLFetcher(const GURL& url, RequestType request_type, Delegate* d, | 137 FakeURLFetcher(const GURL& url, RequestType request_type, |
| 138 content::URLFetcherDelegate* d, |
| 137 const std::string& response_data, bool success) | 139 const std::string& response_data, bool success) |
| 138 : URLFetcher(url, request_type, d), | 140 : URLFetcher(url, request_type, d), |
| 139 url_(url), | 141 url_(url), |
| 140 response_data_(response_data), | 142 response_data_(response_data), |
| 141 success_(success), | 143 success_(success), |
| 142 status_(success ? net::URLRequestStatus::SUCCESS : | 144 status_(success ? net::URLRequestStatus::SUCCESS : |
| 143 net::URLRequestStatus::FAILED, 0), | 145 net::URLRequestStatus::FAILED, 0), |
| 144 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { | 146 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { |
| 145 } | 147 } |
| 146 | 148 |
| 147 // Start the request. This will call the given delegate asynchronously | 149 // Start the request. This will call the given delegate asynchronously |
| 148 // with the pre-baked response as parameter. | 150 // with the pre-baked response as parameter. |
| 149 virtual void Start() OVERRIDE { | 151 virtual void Start() OVERRIDE { |
| 150 MessageLoop::current()->PostTask( | 152 MessageLoop::current()->PostTask( |
| 151 FROM_HERE, | 153 FROM_HERE, |
| 152 method_factory_.NewRunnableMethod(&FakeURLFetcher::RunDelegate)); | 154 method_factory_.NewRunnableMethod(&FakeURLFetcher::RunDelegate)); |
| 153 } | 155 } |
| 154 | 156 |
| 155 // These methods are overriden so we can use the version of | 157 // These methods are overriden so we can use the version of |
| 156 // OnURLFetchComplete that only has a single URLFetcher argument. | 158 // OnURLFetchComplete that only has a single URLFetcher argument. |
| 157 virtual const net::ResponseCookies& cookies() const OVERRIDE { | 159 virtual const net::ResponseCookies& cookies() const OVERRIDE { |
| 158 return cookies_; | 160 return cookies_; |
| 159 } | 161 } |
| 160 | 162 |
| 161 virtual const std::string& GetResponseStringRef() const OVERRIDE { | |
| 162 return response_data_; | |
| 163 } | |
| 164 | |
| 165 virtual bool GetResponseAsString( | 163 virtual bool GetResponseAsString( |
| 166 std::string* out_response_string) const OVERRIDE { | 164 std::string* out_response_string) const OVERRIDE { |
| 167 *out_response_string = response_data_; | 165 *out_response_string = response_data_; |
| 168 return true; | 166 return true; |
| 169 } | 167 } |
| 170 | 168 |
| 171 virtual int response_code() const OVERRIDE { | 169 virtual int response_code() const OVERRIDE { |
| 172 return success_ ? 200 : 500; | 170 return success_ ? 200 : 500; |
| 173 } | 171 } |
| 174 | 172 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 211 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 214 default_factory_(default_factory) { | 212 default_factory_(default_factory) { |
| 215 } | 213 } |
| 216 | 214 |
| 217 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} | 215 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} |
| 218 | 216 |
| 219 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( | 217 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( |
| 220 int id, | 218 int id, |
| 221 const GURL& url, | 219 const GURL& url, |
| 222 URLFetcher::RequestType request_type, | 220 URLFetcher::RequestType request_type, |
| 223 URLFetcher::Delegate* d) { | 221 content::URLFetcherDelegate* d) { |
| 224 FakeResponseMap::const_iterator it = fake_responses_.find(url); | 222 FakeResponseMap::const_iterator it = fake_responses_.find(url); |
| 225 if (it == fake_responses_.end()) { | 223 if (it == fake_responses_.end()) { |
| 226 if (default_factory_ == NULL) { | 224 if (default_factory_ == NULL) { |
| 227 // If we don't have a baked response for that URL we return NULL. | 225 // If we don't have a baked response for that URL we return NULL. |
| 228 DLOG(ERROR) << "No baked response for URL: " << url.spec(); | 226 DLOG(ERROR) << "No baked response for URL: " << url.spec(); |
| 229 return NULL; | 227 return NULL; |
| 230 } else { | 228 } else { |
| 231 return default_factory_->CreateURLFetcher(id, url, request_type, d); | 229 return default_factory_->CreateURLFetcher(id, url, request_type, d); |
| 232 } | 230 } |
| 233 } | 231 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 247 } | 245 } |
| 248 | 246 |
| 249 URLFetcherFactory::URLFetcherFactory() {} | 247 URLFetcherFactory::URLFetcherFactory() {} |
| 250 | 248 |
| 251 URLFetcherFactory::~URLFetcherFactory() {} | 249 URLFetcherFactory::~URLFetcherFactory() {} |
| 252 | 250 |
| 253 URLFetcher* URLFetcherFactory::CreateURLFetcher( | 251 URLFetcher* URLFetcherFactory::CreateURLFetcher( |
| 254 int id, | 252 int id, |
| 255 const GURL& url, | 253 const GURL& url, |
| 256 URLFetcher::RequestType request_type, | 254 URLFetcher::RequestType request_type, |
| 257 URLFetcher::Delegate* d) { | 255 content::URLFetcherDelegate* d) { |
| 258 return new URLFetcher(url, request_type, d); | 256 return new URLFetcher(url, request_type, d); |
| 259 } | 257 } |
| OLD | NEW |