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

Side by Side Diff: chrome/browser/sync/glue/http_bridge.h

Issue 10392192: Remove content::URLFetcherDelegate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More cleanup Created 8 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_HTTP_BRIDGE_H_ 5 #ifndef CHROME_BROWSER_SYNC_GLUE_HTTP_BRIDGE_H_
6 #define CHROME_BROWSER_SYNC_GLUE_HTTP_BRIDGE_H_ 6 #define CHROME_BROWSER_SYNC_GLUE_HTTP_BRIDGE_H_
7 #pragma once 7 #pragma once
8 8
9 #include <string> 9 #include <string>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/gtest_prod_util.h" 13 #include "base/gtest_prod_util.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/synchronization/lock.h" 15 #include "base/synchronization/lock.h"
16 #include "base/synchronization/waitable_event.h" 16 #include "base/synchronization/waitable_event.h"
17 #include "content/public/common/url_fetcher_delegate.h"
18 #include "googleurl/src/gurl.h" 17 #include "googleurl/src/gurl.h"
18 #include "net/url_request/url_fetcher_delegate.h"
19 #include "net/url_request/url_request_context.h" 19 #include "net/url_request/url_request_context.h"
20 #include "net/url_request/url_request_context_getter.h" 20 #include "net/url_request/url_request_context_getter.h"
21 #include "sync/internal_api/http_post_provider_factory.h" 21 #include "sync/internal_api/http_post_provider_factory.h"
22 #include "sync/internal_api/http_post_provider_interface.h" 22 #include "sync/internal_api/http_post_provider_interface.h"
23 23
24 class MessageLoop; 24 class MessageLoop;
25 class HttpBridgeTest; 25 class HttpBridgeTest;
26 26
27 namespace net { 27 namespace net {
28 class HttpResponseHeaders; 28 class HttpResponseHeaders;
29 class URLFetcher;
29 } 30 }
30 31
31 namespace browser_sync { 32 namespace browser_sync {
32 33
33 // A bridge between the syncer and Chromium HTTP layers. 34 // A bridge between the syncer and Chromium HTTP layers.
34 // Provides a way for the sync backend to use Chromium directly for HTTP 35 // Provides a way for the sync backend to use Chromium directly for HTTP
35 // requests rather than depending on a third party provider (e.g libcurl). 36 // requests rather than depending on a third party provider (e.g libcurl).
36 // This is a one-time use bridge. Create one for each request you want to make. 37 // This is a one-time use bridge. Create one for each request you want to make.
37 // It is RefCountedThreadSafe because it can PostTask to the io loop, and thus 38 // It is RefCountedThreadSafe because it can PostTask to the io loop, and thus
38 // needs to stick around across context switches, etc. 39 // needs to stick around across context switches, etc.
39 class HttpBridge : public base::RefCountedThreadSafe<HttpBridge>, 40 class HttpBridge : public base::RefCountedThreadSafe<HttpBridge>,
40 public sync_api::HttpPostProviderInterface, 41 public sync_api::HttpPostProviderInterface,
41 public content::URLFetcherDelegate { 42 public net::URLFetcherDelegate {
42 public: 43 public:
43 // A request context used for HTTP requests bridged from the sync backend. 44 // A request context used for HTTP requests bridged from the sync backend.
44 // A bridged RequestContext has a dedicated in-memory cookie store and does 45 // A bridged RequestContext has a dedicated in-memory cookie store and does
45 // not use a cache. Thus the same type can be used for incognito mode. 46 // not use a cache. Thus the same type can be used for incognito mode.
46 class RequestContext : public net::URLRequestContext { 47 class RequestContext : public net::URLRequestContext {
47 public: 48 public:
48 // |baseline_context| is used to obtain the accept-language, 49 // |baseline_context| is used to obtain the accept-language,
49 // accept-charsets, and proxy service information for bridged requests. 50 // accept-charsets, and proxy service information for bridged requests.
50 // Typically |baseline_context| should be the net::URLRequestContext of the 51 // Typically |baseline_context| should be the net::URLRequestContext of the
51 // currently active profile. 52 // currently active profile.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 116
116 // WARNING: these response content methods are used to extract plain old data 117 // WARNING: these response content methods are used to extract plain old data
117 // and not null terminated strings, so you should make sure you have read 118 // and not null terminated strings, so you should make sure you have read
118 // GetResponseContentLength() characters when using GetResponseContent. e.g 119 // GetResponseContentLength() characters when using GetResponseContent. e.g
119 // string r(b->GetResponseContent(), b->GetResponseContentLength()). 120 // string r(b->GetResponseContent(), b->GetResponseContentLength()).
120 virtual int GetResponseContentLength() const OVERRIDE; 121 virtual int GetResponseContentLength() const OVERRIDE;
121 virtual const char* GetResponseContent() const OVERRIDE; 122 virtual const char* GetResponseContent() const OVERRIDE;
122 virtual const std::string GetResponseHeaderValue( 123 virtual const std::string GetResponseHeaderValue(
123 const std::string& name) const OVERRIDE; 124 const std::string& name) const OVERRIDE;
124 125
125 // content::URLFetcherDelegate implementation. 126 // net::URLFetcherDelegate implementation.
126 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 127 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
127 128
128 #if defined(UNIT_TEST) 129 #if defined(UNIT_TEST)
129 net::URLRequestContextGetter* GetRequestContextGetter() const { 130 net::URLRequestContextGetter* GetRequestContextGetter() const {
130 return context_getter_for_request_; 131 return context_getter_for_request_;
131 } 132 }
132 #endif 133 #endif
133 134
134 protected: 135 protected:
135 friend class base::RefCountedThreadSafe<HttpBridge>; 136 friend class base::RefCountedThreadSafe<HttpBridge>;
136 137
137 virtual ~HttpBridge(); 138 virtual ~HttpBridge();
138 139
139 // Protected virtual so the unit test can override to shunt network requests. 140 // Protected virtual so the unit test can override to shunt network requests.
140 virtual void MakeAsynchronousPost(); 141 virtual void MakeAsynchronousPost();
141 142
142 private: 143 private:
143 friend class ::HttpBridgeTest; 144 friend class ::HttpBridgeTest;
144 145
145 // Called on the IO loop to issue the network request. The extra level 146 // Called on the IO loop to issue the network request. The extra level
146 // of indirection is so that the unit test can override this behavior but we 147 // of indirection is so that the unit test can override this behavior but we
147 // still have a function to statically pass to PostTask. 148 // still have a function to statically pass to PostTask.
148 void CallMakeAsynchronousPost() { MakeAsynchronousPost(); } 149 void CallMakeAsynchronousPost() { MakeAsynchronousPost(); }
149 150
150 // Used to destroy a fetcher when the bridge is Abort()ed, to ensure that 151 // Used to destroy a fetcher when the bridge is Abort()ed, to ensure that
151 // a reference to |this| is held while flushing any pending fetch completion 152 // a reference to |this| is held while flushing any pending fetch completion
152 // callbacks coming from the IO thread en route to finally destroying the 153 // callbacks coming from the IO thread en route to finally destroying the
153 // fetcher. 154 // fetcher.
154 void DestroyURLFetcherOnIOThread(content::URLFetcher* fetcher); 155 void DestroyURLFetcherOnIOThread(net::URLFetcher* fetcher);
155 156
156 // Gets a customized net::URLRequestContext for bridged requests. See 157 // Gets a customized net::URLRequestContext for bridged requests. See
157 // RequestContext definition for details. 158 // RequestContext definition for details.
158 scoped_refptr<RequestContextGetter> context_getter_for_request_; 159 scoped_refptr<RequestContextGetter> context_getter_for_request_;
159 160
160 // The message loop of the thread we were created on. This is the thread that 161 // The message loop of the thread we were created on. This is the thread that
161 // will block on MakeSynchronousPost while the IO thread fetches data from 162 // will block on MakeSynchronousPost while the IO thread fetches data from
162 // the network. 163 // the network.
163 // This should be the main syncer thread (SyncerThread) which is what blocks 164 // This should be the main syncer thread (SyncerThread) which is what blocks
164 // on network IO through curl_easy_perform. 165 // on network IO through curl_easy_perform.
(...skipping 13 matching lines...) Expand all
178 base::WaitableEvent http_post_completed_; 179 base::WaitableEvent http_post_completed_;
179 180
180 struct URLFetchState { 181 struct URLFetchState {
181 URLFetchState(); 182 URLFetchState();
182 ~URLFetchState(); 183 ~URLFetchState();
183 // Our hook into the network layer is a URLFetcher. USED ONLY ON THE IO 184 // Our hook into the network layer is a URLFetcher. USED ONLY ON THE IO
184 // LOOP, so we can block created_on_loop_ while the fetch is in progress. 185 // LOOP, so we can block created_on_loop_ while the fetch is in progress.
185 // NOTE: This is not a scoped_ptr for a reason. It must be deleted on the 186 // NOTE: This is not a scoped_ptr for a reason. It must be deleted on the
186 // same thread that created it, which isn't the same thread |this| gets 187 // same thread that created it, which isn't the same thread |this| gets
187 // deleted on. We must manually delete url_poster_ on the IO loop. 188 // deleted on. We must manually delete url_poster_ on the IO loop.
188 content::URLFetcher* url_poster; 189 net::URLFetcher* url_poster;
189 190
190 // Used to support 'Abort' functionality. 191 // Used to support 'Abort' functionality.
191 bool aborted; 192 bool aborted;
192 193
193 // Cached response data. 194 // Cached response data.
194 bool request_completed; 195 bool request_completed;
195 bool request_succeeded; 196 bool request_succeeded;
196 int http_response_code; 197 int http_response_code;
197 int error_code; 198 int error_code;
198 std::string response_content; 199 std::string response_content;
(...skipping 26 matching lines...) Expand all
225 HttpBridge::RequestContextGetter* GetRequestContextGetter(); 226 HttpBridge::RequestContextGetter* GetRequestContextGetter();
226 227
227 scoped_refptr<HttpBridge::RequestContextGetter> request_context_getter_; 228 scoped_refptr<HttpBridge::RequestContextGetter> request_context_getter_;
228 229
229 DISALLOW_COPY_AND_ASSIGN(HttpBridgeFactory); 230 DISALLOW_COPY_AND_ASSIGN(HttpBridgeFactory);
230 }; 231 };
231 232
232 } // namespace browser_sync 233 } // namespace browser_sync
233 234
234 #endif // CHROME_BROWSER_SYNC_GLUE_HTTP_BRIDGE_H_ 235 #endif // CHROME_BROWSER_SYNC_GLUE_HTTP_BRIDGE_H_
OLDNEW
« no previous file with comments | « chrome/browser/spellchecker/spelling_service_client_unittest.cc ('k') | chrome/browser/sync/glue/http_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698