blob: fd7e475aa00ae08108f8f7535d0d0e89da749dca (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// 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 <memory>
#include <sstream>
#include "base/logging.h"
#include "components/feedback/feedback_report.h"
#include "net/url_request/url_fetcher.h"
namespace feedback {
namespace {
constexpr int kHttpPostSuccessNoContent = 204;
constexpr int kHttpPostFailNoConnection = -1;
constexpr int kHttpPostFailClientError = 400;
constexpr int kHttpPostFailServerError = 500;
} // namespace
FeedbackUploaderDelegate::FeedbackUploaderDelegate(
const base::Closure& success_callback,
const ReportFailureCallback& error_callback)
: success_callback_(success_callback), error_callback_(error_callback) {}
FeedbackUploaderDelegate::~FeedbackUploaderDelegate() {}
void FeedbackUploaderDelegate::OnURLFetchComplete(
const net::URLFetcher* source) {
std::unique_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 {
bool should_retry = true;
// Process the error for debug output
if (response_code == kHttpPostFailNoConnection) {
error_stream << "No connection to server.";
} else if ((response_code >= kHttpPostFailClientError) &&
(response_code < kHttpPostFailServerError)) {
// Client errors mean that the server failed to parse the proto that was
// sent, or that some requirements weren't met by the server side
// validation, and hence we should NOT retry sending this corrupt report
// and give up.
should_retry = false;
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(should_retry);
}
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
|