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