| 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_
|
|
|