146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef COMPONENTS_METRICS_NET_NET_METRICS_LOG_UPLOADER_H_ 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define COMPONENTS_METRICS_NET_NET_METRICS_LOG_UPLOADER_H_ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <string> 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/metrics/metrics_log_uploader.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace net { 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class URLFetcher; 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class URLRequestContextGetter; 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace metrics { 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Implementation of MetricsLogUploader using the Chrome network stack. 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class NetMetricsLogUploader : public MetricsLogUploader, 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public net::URLFetcherDelegate { 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Constructs a NetMetricsLogUploader with the specified request context and 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // other params (see comments on MetricsLogUploader for details). The caller 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // must ensure that |request_context_getter| remains valid for the lifetime 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // of this class. 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetMetricsLogUploader(net::URLRequestContextGetter* request_context_getter, 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& server_url, 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& mime_type, 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::Callback<void(int)>& on_upload_complete); 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~NetMetricsLogUploader(); 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // MetricsLogUploader: 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual bool UploadLog(const std::string& compressed_log_data, 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& log_hash) OVERRIDE; 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // net::URLFetcherDelegate: 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The request context for fetches done using the network stack. 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::URLRequestContextGetter* const request_context_getter_; 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The outstanding transmission appears as a URL Fetch operation. 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<net::URLFetcher> current_fetch_; 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetMetricsLogUploader); 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace metrics 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // COMPONENTS_METRICS_NET_NET_METRICS_LOG_UPLOADER_H_ 55