| // Copyright 2014 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. | 
 |  | 
 | #include "components/feedback/feedback_uploader_delegate.h" | 
 |  | 
 | #include <sstream> | 
 |  | 
 | #include "base/logging.h" | 
 | #include "net/url_request/url_fetcher.h" | 
 |  | 
 | namespace feedback { | 
 | namespace { | 
 |  | 
 | const int kHttpPostSuccessNoContent = 204; | 
 | const int kHttpPostFailNoConnection = -1; | 
 | const int kHttpPostFailClientError = 400; | 
 | const int kHttpPostFailServerError = 500; | 
 |  | 
 | }  // namespace | 
 |  | 
 | FeedbackUploaderDelegate::FeedbackUploaderDelegate( | 
 |     const std::string& post_body, | 
 |     const base::Closure& success_callback, | 
 |     const ReportDataCallback& error_callback) | 
 |         : post_body_(post_body), | 
 |           success_callback_(success_callback), | 
 |           error_callback_(error_callback) { | 
 | } | 
 |  | 
 | FeedbackUploaderDelegate::~FeedbackUploaderDelegate() {} | 
 |  | 
 | void FeedbackUploaderDelegate::OnURLFetchComplete( | 
 |     const net::URLFetcher* source) { | 
 |   scoped_ptr<const net::URLFetcher> source_scoper(source); | 
 |  | 
 |   std::stringstream error_stream; | 
 |   int response_code = source->GetResponseCode(); | 
 |   if (response_code == kHttpPostSuccessNoContent) { | 
 |     error_stream << "Success"; | 
 |     success_callback_.Run(); | 
 |   } else { | 
 |     // Process the error for debug output | 
 |     if (response_code == kHttpPostFailNoConnection) { | 
 |       error_stream << "No connection to server."; | 
 |     } else if ((response_code > kHttpPostFailClientError) && | 
 |                (response_code < kHttpPostFailServerError)) { | 
 |       error_stream << "Client error: HTTP response code " << response_code; | 
 |     } else if (response_code > kHttpPostFailServerError) { | 
 |       error_stream << "Server error: HTTP response code " << response_code; | 
 |     } else { | 
 |       error_stream << "Unknown error: HTTP response code " << response_code; | 
 |     } | 
 |     error_callback_.Run(post_body_); | 
 |   } | 
 |  | 
 |   LOG(WARNING) << "FEEDBACK: Submission to feedback server (" | 
 |                << source->GetURL() << ") status: " << error_stream.str(); | 
 |  | 
 |   // This instance won't be used for anything else, delete us. | 
 |   delete this; | 
 | } | 
 |  | 
 | }  // namespace feedback |