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

Unified Diff: sync/internal_api/public/http_bridge.h

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: sync/internal_api/public/http_bridge.h
diff --git a/sync/internal_api/public/http_bridge.h b/sync/internal_api/public/http_bridge.h
deleted file mode 100644
index cd6106c99d82c7aaa82c984a8ebce4b5e4c5d81a..0000000000000000000000000000000000000000
--- a/sync/internal_api/public/http_bridge.h
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2012 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.
-
-#ifndef SYNC_INTERNAL_API_PUBLIC_HTTP_BRIDGE_H_
-#define SYNC_INTERNAL_API_PUBLIC_HTTP_BRIDGE_H_
-
-#include <stdint.h>
-
-#include <memory>
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/synchronization/lock.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/thread_checker.h"
-#include "base/timer/timer.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "sync/base/sync_export.h"
-#include "sync/internal_api/public/base/cancelation_observer.h"
-#include "sync/internal_api/public/http_post_provider_factory.h"
-#include "sync/internal_api/public/http_post_provider_interface.h"
-#include "sync/internal_api/public/network_time_update_callback.h"
-#include "url/gurl.h"
-
-class HttpBridgeTest;
-
-namespace net {
-class HttpResponseHeaders;
-class HttpUserAgentSettings;
-class URLFetcher;
-class URLRequestJobFactory;
-}
-
-namespace syncer {
-
-class CancelationSignal;
-
-// A bridge between the syncer and Chromium HTTP layers.
-// Provides a way for the sync backend to use Chromium directly for HTTP
-// requests rather than depending on a third party provider (e.g libcurl).
-// This is a one-time use bridge. Create one for each request you want to make.
-// It is RefCountedThreadSafe because it can PostTask to the io loop, and thus
-// needs to stick around across context switches, etc.
-class SYNC_EXPORT HttpBridge : public base::RefCountedThreadSafe<HttpBridge>,
- public HttpPostProviderInterface,
- public net::URLFetcherDelegate {
- public:
- HttpBridge(const std::string& user_agent,
- const scoped_refptr<net::URLRequestContextGetter>& context,
- const NetworkTimeUpdateCallback& network_time_update_callback,
- const BindToTrackerCallback& bind_to_tracker_callback);
-
- // HttpPostProvider implementation.
- void SetExtraRequestHeaders(const char* headers) override;
- void SetURL(const char* url, int port) override;
- void SetPostPayload(const char* content_type,
- int content_length,
- const char* content) override;
- bool MakeSynchronousPost(int* error_code, int* response_code) override;
- void Abort() override;
-
- // WARNING: these response content methods are used to extract plain old data
- // and not null terminated strings, so you should make sure you have read
- // GetResponseContentLength() characters when using GetResponseContent. e.g
- // string r(b->GetResponseContent(), b->GetResponseContentLength()).
- int GetResponseContentLength() const override;
- const char* GetResponseContent() const override;
- const std::string GetResponseHeaderValue(
- const std::string& name) const override;
-
- // net::URLFetcherDelegate implementation.
- void OnURLFetchComplete(const net::URLFetcher* source) override;
- void OnURLFetchDownloadProgress(const net::URLFetcher* source,
- int64_t current,
- int64_t total) override;
- void OnURLFetchUploadProgress(const net::URLFetcher* source,
- int64_t current,
- int64_t total) override;
-
- net::URLRequestContextGetter* GetRequestContextGetterForTest() const;
-
- protected:
- ~HttpBridge() override;
-
- // Protected virtual so the unit test can override to shunt network requests.
- virtual void MakeAsynchronousPost();
-
- private:
- friend class base::RefCountedThreadSafe<HttpBridge>;
- friend class SyncHttpBridgeTest;
- friend class ::HttpBridgeTest;
-
- // Called on the IO loop to issue the network request. The extra level
- // of indirection is so that the unit test can override this behavior but we
- // still have a function to statically pass to PostTask.
- void CallMakeAsynchronousPost() { MakeAsynchronousPost(); }
-
- // Used to destroy a fetcher when the bridge is Abort()ed, to ensure that
- // a reference to |this| is held while flushing any pending fetch completion
- // callbacks coming from the IO thread en route to finally destroying the
- // fetcher.
- void DestroyURLFetcherOnIOThread(net::URLFetcher* fetcher,
- base::Timer* fetch_timer);
-
- void UpdateNetworkTime();
-
- // Helper method to abort the request if we timed out.
- void OnURLFetchTimedOut();
-
- // Used to check whether a method runs on the thread that we were created on.
- // This is the thread that will block on MakeSynchronousPost while the IO
- // thread fetches data from the network.
- // This should be the main syncer thread (SyncerThread) which is what blocks
- // on network IO through curl_easy_perform.
- base::ThreadChecker thread_checker_;
-
- // The user agent for all requests.
- const std::string user_agent_;
-
- // The URL to POST to.
- GURL url_for_request_;
-
- // POST payload information.
- std::string content_type_;
- std::string request_content_;
- std::string extra_headers_;
-
- // A waitable event we use to provide blocking semantics to
- // MakeSynchronousPost. We block created_on_loop_ while the IO loop fetches
- // network request.
- base::WaitableEvent http_post_completed_;
-
- struct URLFetchState {
- URLFetchState();
- ~URLFetchState();
- // Our hook into the network layer is a URLFetcher. USED ONLY ON THE IO
- // LOOP, so we can block created_on_loop_ while the fetch is in progress.
- // NOTE: This is not a unique_ptr for a reason. It must be deleted on the
- // same thread that created it, which isn't the same thread |this| gets
- // deleted on. We must manually delete url_poster_ on the IO loop.
- net::URLFetcher* url_poster;
-
- // Start and finish time of request. Set immediately before sending
- // request and after receiving response.
- base::Time start_time;
- base::Time end_time;
-
- // Used to support 'Abort' functionality.
- bool aborted;
-
- // Cached response data.
- bool request_completed;
- bool request_succeeded;
- int http_response_code;
- int error_code;
- std::string response_content;
- scoped_refptr<net::HttpResponseHeaders> response_headers;
-
- // Timer to ensure http requests aren't stalled. Reset every time upload or
- // download progress is made.
- std::unique_ptr<base::Timer> http_request_timeout_timer;
- };
-
- // This lock synchronizes use of state involved in the flow to fetch a URL
- // using URLFetcher, including |fetch_state_| and |request_context_getter_| on
- // any thread, for example, this flow needs to be synchronized to gracefully
- // clean up URLFetcher and return appropriate values in |error_code|.
- mutable base::Lock fetch_state_lock_;
- URLFetchState fetch_state_;
-
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
-
- const scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
-
- // Callback for updating network time.
- NetworkTimeUpdateCallback network_time_update_callback_;
-
- // A callback to tag Sync request to be able to record data use of this
- // service by data_use_measurement component.
- BindToTrackerCallback bind_to_tracker_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(HttpBridge);
-};
-
-class SYNC_EXPORT HttpBridgeFactory : public HttpPostProviderFactory,
- public CancelationObserver {
- public:
- HttpBridgeFactory(
- const scoped_refptr<net::URLRequestContextGetter>&
- baseline_context_getter,
- const NetworkTimeUpdateCallback& network_time_update_callback,
- CancelationSignal* cancelation_signal);
- ~HttpBridgeFactory() override;
-
- // HttpPostProviderFactory:
- void Init(const std::string& user_agent,
- const BindToTrackerCallback& bind_to_tracker_callback) override;
- HttpPostProviderInterface* Create() override;
- void Destroy(HttpPostProviderInterface* http) override;
-
- // CancelationObserver implementation:
- void OnSignalReceived() override;
-
- private:
- // The user agent to use in all requests.
- std::string user_agent_;
-
- // Protects |request_context_getter_| to allow releasing it's reference from
- // the sync thread, even when it's in use on the IO thread.
- base::Lock request_context_getter_lock_;
-
- // The request context getter used for making all requests.
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
-
- NetworkTimeUpdateCallback network_time_update_callback_;
-
- CancelationSignal* const cancelation_signal_;
-
- // A callback to tag Sync request to be able to record data use of this
- // service by data_use_measurement component.
- BindToTrackerCallback bind_to_tracker_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(HttpBridgeFactory);
-};
-
-} // namespace syncer
-
-#endif // SYNC_INTERNAL_API_PUBLIC_HTTP_BRIDGE_H_
« no previous file with comments | « sync/internal_api/public/events/protocol_event.h ('k') | sync/internal_api/public/http_bridge_network_resources.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698