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

Side by Side Diff: components/domain_reliability/uploader.cc

Issue 491753003: Domain Reliability: Don't upload when metrics reporting is off. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix a last couple of nits Created 6 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "components/domain_reliability/uploader.h" 5 #include "components/domain_reliability/uploader.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "base/metrics/sparse_histogram.h" 10 #include "base/metrics/sparse_histogram.h"
(...skipping 25 matching lines...) Expand all
36 }; 36 };
37 37
38 const void* UploadUserData::kUserDataKey = 38 const void* UploadUserData::kUserDataKey =
39 static_cast<const void*>(&UploadUserData::kUserDataKey); 39 static_cast<const void*>(&UploadUserData::kUserDataKey);
40 40
41 class DomainReliabilityUploaderImpl 41 class DomainReliabilityUploaderImpl
42 : public DomainReliabilityUploader, net::URLFetcherDelegate { 42 : public DomainReliabilityUploader, net::URLFetcherDelegate {
43 public: 43 public:
44 DomainReliabilityUploaderImpl(const scoped_refptr< 44 DomainReliabilityUploaderImpl(const scoped_refptr<
45 net::URLRequestContextGetter>& url_request_context_getter) 45 net::URLRequestContextGetter>& url_request_context_getter)
46 : url_request_context_getter_(url_request_context_getter) {} 46 : url_request_context_getter_(url_request_context_getter),
47 discard_uploads_(true) {}
47 48
48 virtual ~DomainReliabilityUploaderImpl() { 49 virtual ~DomainReliabilityUploaderImpl() {
49 // Delete any in-flight URLFetchers. 50 // Delete any in-flight URLFetchers.
50 STLDeleteContainerPairFirstPointers( 51 STLDeleteContainerPairFirstPointers(
51 upload_callbacks_.begin(), upload_callbacks_.end()); 52 upload_callbacks_.begin(), upload_callbacks_.end());
52 } 53 }
53 54
54 // DomainReliabilityUploader implementation: 55 // DomainReliabilityUploader implementation:
55 virtual void UploadReport( 56 virtual void UploadReport(
56 const std::string& report_json, 57 const std::string& report_json,
57 const GURL& upload_url, 58 const GURL& upload_url,
58 const DomainReliabilityUploader::UploadCallback& callback) OVERRIDE { 59 const DomainReliabilityUploader::UploadCallback& callback) OVERRIDE {
59 VLOG(1) << "Uploading report to " << upload_url; 60 VLOG(1) << "Uploading report to " << upload_url;
60 VLOG(2) << "Report JSON: " << report_json; 61 VLOG(2) << "Report JSON: " << report_json;
61 62
63 if (discard_uploads_) {
64 VLOG(1) << "Discarding report instead of uploading.";
65 callback.Run(true);
66 return;
67 }
68
62 net::URLFetcher* fetcher = 69 net::URLFetcher* fetcher =
63 net::URLFetcher::Create(0, upload_url, net::URLFetcher::POST, this); 70 net::URLFetcher::Create(0, upload_url, net::URLFetcher::POST, this);
64 fetcher->SetRequestContext(url_request_context_getter_); 71 fetcher->SetRequestContext(url_request_context_getter_);
65 fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | 72 fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
66 net::LOAD_DO_NOT_SAVE_COOKIES); 73 net::LOAD_DO_NOT_SAVE_COOKIES);
67 fetcher->SetUploadData(kJsonMimeType, report_json); 74 fetcher->SetUploadData(kJsonMimeType, report_json);
68 fetcher->SetAutomaticallyRetryOn5xx(false); 75 fetcher->SetAutomaticallyRetryOn5xx(false);
69 fetcher->SetURLRequestUserData( 76 fetcher->SetURLRequestUserData(
70 UploadUserData::kUserDataKey, 77 UploadUserData::kUserDataKey,
71 UploadUserData::CreateCreateDataCallback()); 78 UploadUserData::CreateCreateDataCallback());
72 fetcher->Start(); 79 fetcher->Start();
73 80
74 upload_callbacks_[fetcher] = callback; 81 upload_callbacks_[fetcher] = callback;
75 } 82 }
76 83
84 virtual void set_discard_uploads(bool discard_uploads) OVERRIDE {
85 discard_uploads_ = discard_uploads;
86 VLOG(1) << "Setting discard_uploads to " << discard_uploads;
87 }
88
77 // net::URLFetcherDelegate implementation: 89 // net::URLFetcherDelegate implementation:
78 virtual void OnURLFetchComplete( 90 virtual void OnURLFetchComplete(
79 const net::URLFetcher* fetcher) OVERRIDE { 91 const net::URLFetcher* fetcher) OVERRIDE {
80 DCHECK(fetcher); 92 DCHECK(fetcher);
81 93
82 UploadCallbackMap::iterator callback_it = upload_callbacks_.find(fetcher); 94 UploadCallbackMap::iterator callback_it = upload_callbacks_.find(fetcher);
83 DCHECK(callback_it != upload_callbacks_.end()); 95 DCHECK(callback_it != upload_callbacks_.end());
84 96
85 VLOG(1) << "Upload finished with " << fetcher->GetResponseCode(); 97 VLOG(1) << "Upload finished with " << fetcher->GetResponseCode();
86 98
87 UMA_HISTOGRAM_SPARSE_SLOWLY("DomainReliability.UploadResponseCode", 99 UMA_HISTOGRAM_SPARSE_SLOWLY("DomainReliability.UploadResponseCode",
88 fetcher->GetResponseCode()); 100 fetcher->GetResponseCode());
89 101
90 bool success = fetcher->GetResponseCode() == 200; 102 bool success = fetcher->GetResponseCode() == 200;
91 callback_it->second.Run(success); 103 callback_it->second.Run(success);
92 104
93 delete callback_it->first; 105 delete callback_it->first;
94 upload_callbacks_.erase(callback_it); 106 upload_callbacks_.erase(callback_it);
95 } 107 }
96 108
97 private: 109 private:
98 using DomainReliabilityUploader::UploadCallback; 110 using DomainReliabilityUploader::UploadCallback;
99 typedef std::map<const net::URLFetcher*, UploadCallback> UploadCallbackMap; 111 typedef std::map<const net::URLFetcher*, UploadCallback> UploadCallbackMap;
100 112
101 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 113 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
102 UploadCallbackMap upload_callbacks_; 114 UploadCallbackMap upload_callbacks_;
115 bool discard_uploads_;
103 }; 116 };
104 117
105 } // namespace 118 } // namespace
106 119
107 DomainReliabilityUploader::DomainReliabilityUploader() {} 120 DomainReliabilityUploader::DomainReliabilityUploader() {}
108 DomainReliabilityUploader::~DomainReliabilityUploader() {} 121 DomainReliabilityUploader::~DomainReliabilityUploader() {}
109 122
110 // static 123 // static
111 scoped_ptr<DomainReliabilityUploader> DomainReliabilityUploader::Create( 124 scoped_ptr<DomainReliabilityUploader> DomainReliabilityUploader::Create(
112 const scoped_refptr<net::URLRequestContextGetter>& 125 const scoped_refptr<net::URLRequestContextGetter>&
113 url_request_context_getter) { 126 url_request_context_getter) {
114 return scoped_ptr<DomainReliabilityUploader>( 127 return scoped_ptr<DomainReliabilityUploader>(
115 new DomainReliabilityUploaderImpl(url_request_context_getter)); 128 new DomainReliabilityUploaderImpl(url_request_context_getter));
116 } 129 }
117 130
118 // static 131 // static
119 bool DomainReliabilityUploader::URLRequestIsUpload( 132 bool DomainReliabilityUploader::URLRequestIsUpload(
120 const net::URLRequest& request) { 133 const net::URLRequest& request) {
121 return request.GetUserData(UploadUserData::kUserDataKey) != NULL; 134 return request.GetUserData(UploadUserData::kUserDataKey) != NULL;
122 } 135 }
123 136
124 } // namespace domain_reliability 137 } // namespace domain_reliability
OLDNEW
« no previous file with comments | « components/domain_reliability/uploader.h ('k') | components/domain_reliability/uploader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698