[email protected] | 1eab4e9 | 2014-05-09 02:17:19 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors. All rights reserved. |
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | 1eab4e9 | 2014-05-09 02:17:19 | [diff] [blame] | 5 | #include "components/feedback/feedback_uploader_delegate.h" |
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 6 | |
dcheng | 84c358e | 2016-04-26 07:05:53 | [diff] [blame^] | 7 | #include <memory> |
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 8 | #include <sstream> |
9 | |||||
10 | #include "base/logging.h" | ||||
11 | #include "net/url_request/url_fetcher.h" | ||||
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 12 | |
13 | namespace feedback { | ||||
14 | namespace { | ||||
15 | |||||
16 | const int kHttpPostSuccessNoContent = 204; | ||||
17 | const int kHttpPostFailNoConnection = -1; | ||||
18 | const int kHttpPostFailClientError = 400; | ||||
19 | const int kHttpPostFailServerError = 500; | ||||
20 | |||||
21 | } // namespace | ||||
22 | |||||
23 | FeedbackUploaderDelegate::FeedbackUploaderDelegate( | ||||
[email protected] | 90cc2a9a | 2014-02-28 22:05:55 | [diff] [blame] | 24 | const std::string& post_body, |
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 25 | const base::Closure& success_callback, |
26 | const ReportDataCallback& error_callback) | ||||
[email protected] | 90cc2a9a | 2014-02-28 22:05:55 | [diff] [blame] | 27 | : post_body_(post_body), |
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 28 | success_callback_(success_callback), |
29 | error_callback_(error_callback) { | ||||
30 | } | ||||
31 | |||||
32 | FeedbackUploaderDelegate::~FeedbackUploaderDelegate() {} | ||||
33 | |||||
34 | void FeedbackUploaderDelegate::OnURLFetchComplete( | ||||
35 | const net::URLFetcher* source) { | ||||
dcheng | 84c358e | 2016-04-26 07:05:53 | [diff] [blame^] | 36 | std::unique_ptr<const net::URLFetcher> source_scoper(source); |
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 37 | |
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] | 90cc2a9a | 2014-02-28 22:05:55 | [diff] [blame] | 55 | error_callback_.Run(post_body_); |
[email protected] | 4837225 | 2013-12-20 12:18:01 | [diff] [blame] | 56 | } |
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 |