blob: 0519a816407208e7c84aed8133da62a7d9fd187c [file] [log] [blame]
[email protected]1eab4e92014-05-09 02:17:191// Copyright 2014 The Chromium Authors. All rights reserved.
[email protected]48372252013-12-20 12:18:012// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]1eab4e92014-05-09 02:17:195#include "components/feedback/feedback_uploader_delegate.h"
[email protected]48372252013-12-20 12:18:016
dcheng84c358e2016-04-26 07:05:537#include <memory>
[email protected]48372252013-12-20 12:18:018#include <sstream>
9
10#include "base/logging.h"
11#include "net/url_request/url_fetcher.h"
[email protected]48372252013-12-20 12:18:0112
13namespace feedback {
14namespace {
15
16const int kHttpPostSuccessNoContent = 204;
17const int kHttpPostFailNoConnection = -1;
18const int kHttpPostFailClientError = 400;
19const int kHttpPostFailServerError = 500;
20
21} // namespace
22
23FeedbackUploaderDelegate::FeedbackUploaderDelegate(
[email protected]90cc2a9a2014-02-28 22:05:5524 const std::string& post_body,
[email protected]48372252013-12-20 12:18:0125 const base::Closure& success_callback,
26 const ReportDataCallback& error_callback)
[email protected]90cc2a9a2014-02-28 22:05:5527 : post_body_(post_body),
[email protected]48372252013-12-20 12:18:0128 success_callback_(success_callback),
29 error_callback_(error_callback) {
30}
31
32FeedbackUploaderDelegate::~FeedbackUploaderDelegate() {}
33
34void FeedbackUploaderDelegate::OnURLFetchComplete(
35 const net::URLFetcher* source) {
dcheng84c358e2016-04-26 07:05:5336 std::unique_ptr<const net::URLFetcher> source_scoper(source);
[email protected]48372252013-12-20 12:18:0137
38 std::stringstream error_stream;
39 int response_code = source->GetResponseCode();
40 if (response_code == kHttpPostSuccessNoContent) {
41 error_stream << "Success";
42 success_callback_.Run();
43 } else {
44 // Process the error for debug output
45 if (response_code == kHttpPostFailNoConnection) {
46 error_stream << "No connection to server.";
47 } else if ((response_code > kHttpPostFailClientError) &&
48 (response_code < kHttpPostFailServerError)) {
49 error_stream << "Client error: HTTP response code " << response_code;
50 } else if (response_code > kHttpPostFailServerError) {
51 error_stream << "Server error: HTTP response code " << response_code;
52 } else {
53 error_stream << "Unknown error: HTTP response code " << response_code;
54 }
[email protected]90cc2a9a2014-02-28 22:05:5555 error_callback_.Run(post_body_);
[email protected]48372252013-12-20 12:18:0156 }
57
58 LOG(WARNING) << "FEEDBACK: Submission to feedback server ("
59 << source->GetURL() << ") status: " << error_stream.str();
60
61 // This instance won't be used for anything else, delete us.
62 delete this;
63}
64
65} // namespace feedback