Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / domain_reliability / uploader.cc
index b00b550..6a97163 100644 (file)
@@ -11,6 +11,7 @@
 #include "base/stl_util.h"
 #include "base/supports_user_data.h"
 #include "net/base/load_flags.h"
+#include "net/base/net_errors.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -46,17 +47,17 @@ class DomainReliabilityUploaderImpl
       : url_request_context_getter_(url_request_context_getter),
         discard_uploads_(true) {}
 
-  virtual ~DomainReliabilityUploaderImpl() {
+  ~DomainReliabilityUploaderImpl() override {
     // Delete any in-flight URLFetchers.
     STLDeleteContainerPairFirstPointers(
         upload_callbacks_.begin(), upload_callbacks_.end());
   }
 
   // DomainReliabilityUploader implementation:
-  virtual void UploadReport(
+  void UploadReport(
       const std::string& report_json,
       const GURL& upload_url,
-      const DomainReliabilityUploader::UploadCallback& callback) OVERRIDE {
+      const DomainReliabilityUploader::UploadCallback& callback) override {
     VLOG(1) << "Uploading report to " << upload_url;
     VLOG(2) << "Report JSON: " << report_json;
 
@@ -81,26 +82,48 @@ class DomainReliabilityUploaderImpl
     upload_callbacks_[fetcher] = callback;
   }
 
-  virtual void set_discard_uploads(bool discard_uploads) OVERRIDE {
+  void set_discard_uploads(bool discard_uploads) override {
     discard_uploads_ = discard_uploads;
     VLOG(1) << "Setting discard_uploads to " << discard_uploads;
   }
 
   // net::URLFetcherDelegate implementation:
-  virtual void OnURLFetchComplete(
-      const net::URLFetcher* fetcher) OVERRIDE {
+  void OnURLFetchComplete(const net::URLFetcher* fetcher) override {
     DCHECK(fetcher);
 
     UploadCallbackMap::iterator callback_it = upload_callbacks_.find(fetcher);
     DCHECK(callback_it != upload_callbacks_.end());
 
-    VLOG(1) << "Upload finished with " << fetcher->GetResponseCode();
+    int net_error;
+    {
+      const net::URLRequestStatus& status = fetcher->GetStatus();
+      switch (status.status()) {
+        case net::URLRequestStatus::SUCCESS:
+          net_error = net::OK;
+          break;
+        case net::URLRequestStatus::CANCELED:
+          net_error = net::ERR_ABORTED;
+          break;
+        case net::URLRequestStatus::FAILED:
+          net_error = status.error();
+          break;
+        default:
+          NOTREACHED();
+          net_error = net::ERR_FAILED;
+          break;
+      }
+    }
+    int http_response_code = fetcher->GetResponseCode();
+
+    VLOG(1) << "Upload finished with net error " << net_error <<
+               " and HTTP response code " << http_response_code;
 
     UMA_HISTOGRAM_SPARSE_SLOWLY("DomainReliability.UploadResponseCode",
-                                fetcher->GetResponseCode());
+                                http_response_code);
+    UMA_HISTOGRAM_SPARSE_SLOWLY("DomainReliability.UploadNetError",
+                                -net_error);
 
-    bool success = fetcher->GetResponseCode() == 200;
-    callback_it->second.Run(success);
+    callback_it->second.Run(http_response_code == 200);
 
     delete callback_it->first;
     upload_callbacks_.erase(callback_it);