Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: content/test/test_url_fetcher_factory.h

Issue 7524033: Add a scoper object for URLFetcher::Factory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/content_tests.gypi ('k') | content/test/test_url_fetcher_factory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef CONTENT_COMMON_TEST_URL_FETCHER_FACTORY_H_ 5 #ifndef CONTENT_TEST_TEST_URL_FETCHER_FACTORY_H_
6 #define CONTENT_COMMON_TEST_URL_FETCHER_FACTORY_H_ 6 #define CONTENT_TEST_TEST_URL_FETCHER_FACTORY_H_
7 #pragma once 7 #pragma once
8 8
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
11 #include <string> 11 #include <string>
12 #include <utility> 12 #include <utility>
13 13
14 #include "base/threading/non_thread_safe.h"
14 #include "content/common/url_fetcher.h" 15 #include "content/common/url_fetcher.h"
16 #include "googleurl/src/gurl.h"
15 #include "net/url_request/url_request_status.h" 17 #include "net/url_request/url_request_status.h"
16 #include "googleurl/src/gurl.h" 18
19 // Changes URLFetcher's Factory for the lifetime of the object.
20 // Note that this scoper cannot be nested (to make it even harder to misuse).
21 class ScopedURLFetcherFactory : public base::NonThreadSafe {
22 public:
23 explicit ScopedURLFetcherFactory(URLFetcher::Factory* factory);
24 virtual ~ScopedURLFetcherFactory();
25
26 private:
27 DISALLOW_COPY_AND_ASSIGN(ScopedURLFetcherFactory);
28 };
17 29
18 // TestURLFetcher and TestURLFetcherFactory are used for testing consumers of 30 // TestURLFetcher and TestURLFetcherFactory are used for testing consumers of
19 // URLFetcher. TestURLFetcherFactory is a URLFetcher::Factory that creates 31 // URLFetcher. TestURLFetcherFactory is a URLFetcher::Factory that creates
20 // TestURLFetchers. TestURLFetcher::Start is overriden to do nothing. It is 32 // TestURLFetchers. TestURLFetcher::Start is overriden to do nothing. It is
21 // expected that you'll grab the delegate from the TestURLFetcher and invoke 33 // expected that you'll grab the delegate from the TestURLFetcher and invoke
22 // the callback method when appropriate. In this way it's easy to mock a 34 // the callback method when appropriate. In this way it's easy to mock a
23 // URLFetcher. 35 // URLFetcher.
24 // Typical usage: 36 // Typical usage:
25 // // TestURLFetcher requires a MessageLoop: 37 // // TestURLFetcher requires a MessageLoop:
26 // MessageLoopForUI message_loop; 38 // MessageLoopForUI message_loop;
27 // // And io_thread to release URLRequestContextGetter in URLFetcher::Core. 39 // // And io_thread to release URLRequestContextGetter in URLFetcher::Core.
28 // BrowserThread io_thread(BrowserThread::IO, &message_loop); 40 // BrowserThread io_thread(BrowserThread::IO, &message_loop);
29 // // Create and register factory. 41 // // Create factory (it automatically sets itself as URLFetcher's factory).
30 // TestURLFetcherFactory factory; 42 // TestURLFetcherFactory factory;
31 // URLFetcher::set_factory(&factory);
32 // // Do something that triggers creation of a URLFetcher. 43 // // Do something that triggers creation of a URLFetcher.
33 // TestURLFetcher* fetcher = factory.GetFetcherByID(expected_id); 44 // TestURLFetcher* fetcher = factory.GetFetcherByID(expected_id);
34 // DCHECK(fetcher); 45 // DCHECK(fetcher);
35 // // Notify delegate with whatever data you want. 46 // // Notify delegate with whatever data you want.
36 // fetcher->delegate()->OnURLFetchComplete(...); 47 // fetcher->delegate()->OnURLFetchComplete(...);
37 // // Make sure consumer of URLFetcher does the right thing. 48 // // Make sure consumer of URLFetcher does the right thing.
38 // ... 49 // ...
39 // // Reset factory.
40 // URLFetcher::set_factory(NULL);
41 // 50 //
42 // Note: if you don't know when your request objects will be created you 51 // Note: if you don't know when your request objects will be created you
43 // might want to use the FakeUrlFetcher and FakeUrlFetcherFactory classes 52 // might want to use the FakeUrlFetcher and FakeUrlFetcherFactory classes
44 // below. 53 // below.
45 54
46 class TestURLFetcher : public URLFetcher { 55 class TestURLFetcher : public URLFetcher {
47 public: 56 public:
48 TestURLFetcher(int id, 57 TestURLFetcher(int id,
49 const GURL& url, 58 const GURL& url,
50 RequestType request_type, 59 RequestType request_type,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 net::URLRequestStatus fake_status_; 120 net::URLRequestStatus fake_status_;
112 int fake_response_code_; 121 int fake_response_code_;
113 std::string fake_response_string_; 122 std::string fake_response_string_;
114 FilePath fake_response_file_path_; 123 FilePath fake_response_file_path_;
115 124
116 DISALLOW_COPY_AND_ASSIGN(TestURLFetcher); 125 DISALLOW_COPY_AND_ASSIGN(TestURLFetcher);
117 }; 126 };
118 127
119 // Simple URLFetcher::Factory method that creates TestURLFetchers. All fetchers 128 // Simple URLFetcher::Factory method that creates TestURLFetchers. All fetchers
120 // are registered in a map by the id passed to the create method. 129 // are registered in a map by the id passed to the create method.
121 class TestURLFetcherFactory : public URLFetcher::Factory { 130 class TestURLFetcherFactory : public URLFetcher::Factory,
131 public ScopedURLFetcherFactory {
122 public: 132 public:
123 TestURLFetcherFactory(); 133 TestURLFetcherFactory();
124 virtual ~TestURLFetcherFactory(); 134 virtual ~TestURLFetcherFactory();
125 135
126 virtual URLFetcher* CreateURLFetcher(int id, 136 virtual URLFetcher* CreateURLFetcher(int id,
127 const GURL& url, 137 const GURL& url,
128 URLFetcher::RequestType request_type, 138 URLFetcher::RequestType request_type,
129 URLFetcher::Delegate* d); 139 URLFetcher::Delegate* d);
130 TestURLFetcher* GetFetcherByID(int id) const; 140 TestURLFetcher* GetFetcherByID(int id) const;
131 void RemoveFetcherFromMap(int id); 141 void RemoveFetcherFromMap(int id);
(...skipping 18 matching lines...) Expand all
150 // 160 //
151 // This class is not thread-safe. You should not call SetFakeResponse or 161 // This class is not thread-safe. You should not call SetFakeResponse or
152 // ClearFakeResponse at the same time you call CreateURLFetcher. However, it is 162 // ClearFakeResponse at the same time you call CreateURLFetcher. However, it is
153 // OK to start URLFetcher objects while setting or clearning fake responses 163 // OK to start URLFetcher objects while setting or clearning fake responses
154 // since already created URLFetcher objects will not be affected by any changes 164 // since already created URLFetcher objects will not be affected by any changes
155 // made to the fake responses (once a URLFetcher object is created you cannot 165 // made to the fake responses (once a URLFetcher object is created you cannot
156 // change its fake response). 166 // change its fake response).
157 // 167 //
158 // Example usage: 168 // Example usage:
159 // FakeURLFetcherFactory factory; 169 // FakeURLFetcherFactory factory;
160 // URLFetcher::set_factory(&factory);
161 // 170 //
162 // // You know that class SomeService will request url http://a.com/ and you 171 // // You know that class SomeService will request url http://a.com/ and you
163 // // want to test the service class by returning an error. 172 // // want to test the service class by returning an error.
164 // factory.SetFakeResponse("http://a.com/", "", false); 173 // factory.SetFakeResponse("http://a.com/", "", false);
165 // // But if the service requests http://b.com/asdf you want to respond with 174 // // But if the service requests http://b.com/asdf you want to respond with
166 // // a simple html page and an HTTP/200 code. 175 // // a simple html page and an HTTP/200 code.
167 // factory.SetFakeResponse("http://b.com/asdf", 176 // factory.SetFakeResponse("http://b.com/asdf",
168 // "<html><body>hello world</body></html>", 177 // "<html><body>hello world</body></html>",
169 // true); 178 // true);
170 // 179 //
171 // SomeService service; 180 // SomeService service;
172 // service.Run(); // Will eventually request these two URLs. 181 // service.Run(); // Will eventually request these two URLs.
173 182
174 class FakeURLFetcherFactory : public URLFetcher::Factory { 183 class FakeURLFetcherFactory : public URLFetcher::Factory,
184 public ScopedURLFetcherFactory {
175 public: 185 public:
176 FakeURLFetcherFactory(); 186 FakeURLFetcherFactory();
177 // FakeURLFetcherFactory that will delegate creating URLFetcher for unknown 187 // FakeURLFetcherFactory that will delegate creating URLFetcher for unknown
178 // url to the given factory. 188 // url to the given factory.
179 explicit FakeURLFetcherFactory(URLFetcher::Factory* default_factory); 189 explicit FakeURLFetcherFactory(URLFetcher::Factory* default_factory);
180 virtual ~FakeURLFetcherFactory(); 190 virtual ~FakeURLFetcherFactory();
181 191
182 // If no fake response is set for the given URL this method will delegate the 192 // If no fake response is set for the given URL this method will delegate the
183 // call to |default_factory_| if it is not NULL, or return NULL if it is 193 // call to |default_factory_| if it is not NULL, or return NULL if it is
184 // NULL. 194 // NULL.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 virtual ~URLFetcherFactory(); 227 virtual ~URLFetcherFactory();
218 228
219 // This method will create a real URLFetcher. 229 // This method will create a real URLFetcher.
220 virtual URLFetcher* CreateURLFetcher(int id, 230 virtual URLFetcher* CreateURLFetcher(int id,
221 const GURL& url, 231 const GURL& url,
222 URLFetcher::RequestType request_type, 232 URLFetcher::RequestType request_type,
223 URLFetcher::Delegate* d); 233 URLFetcher::Delegate* d);
224 234
225 }; 235 };
226 236
227 #endif // CONTENT_COMMON_TEST_URL_FETCHER_FACTORY_H_ 237 #endif // CONTENT_TEST_TEST_URL_FETCHER_FACTORY_H_
OLDNEW
« no previous file with comments | « content/content_tests.gypi ('k') | content/test/test_url_fetcher_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698