OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "feedback_common.h" | 5 #include "components/feedback/feedback_common.h" |
6 | 6 |
7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
| 8 #include "components/feedback/anonymizer_tool.h" |
8 #include "components/feedback/proto/common.pb.h" | 9 #include "components/feedback/proto/common.pb.h" |
9 #include "components/feedback/proto/dom.pb.h" | 10 #include "components/feedback/proto/dom.pb.h" |
10 #include "components/feedback/proto/extension.pb.h" | 11 #include "components/feedback/proto/extension.pb.h" |
11 #include "components/feedback/proto/math.pb.h" | 12 #include "components/feedback/proto/math.pb.h" |
12 | 13 |
13 namespace { | 14 namespace { |
14 | 15 |
15 const char kMultilineIndicatorString[] = "<multiline>\n"; | 16 const char kMultilineIndicatorString[] = "<multiline>\n"; |
16 const char kMultilineStartString[] = "---------- START ----------\n"; | 17 const char kMultilineStartString[] = "---------- START ----------\n"; |
17 const char kMultilineEndString[] = "---------- END ----------\n\n"; | 18 const char kMultilineEndString[] = "---------- END ----------\n\n"; |
18 | 19 |
19 const size_t kFeedbackMaxLength = 4 * 1024; | 20 const size_t kFeedbackMaxLength = 4 * 1024; |
20 const size_t kFeedbackMaxLineCount = 40; | 21 const size_t kFeedbackMaxLineCount = 40; |
21 | 22 |
22 const base::FilePath::CharType kLogsFilename[] = | 23 const base::FilePath::CharType kLogsFilename[] = |
23 FILE_PATH_LITERAL("system_logs.txt"); | 24 FILE_PATH_LITERAL("system_logs.txt"); |
24 const char kLogsAttachmentName[] = "system_logs.zip"; | 25 const char kLogsAttachmentName[] = "system_logs.zip"; |
25 | 26 |
26 const char kZipExt[] = ".zip"; | 27 const char kZipExt[] = ".zip"; |
27 | 28 |
28 const char kPngMimeType[] = "image/png"; | 29 const char kPngMimeType[] = "image/png"; |
29 const char kArbitraryMimeType[] = "application/octet-stream"; | 30 const char kArbitraryMimeType[] = "application/octet-stream"; |
30 | 31 |
31 // Converts the system logs into a string that we can compress and send | 32 // Converts the system logs into a string that we can compress and send |
32 // with the report. This method only converts those logs that we want in | 33 // with the report. This method only converts those logs that we want in |
33 // the compressed zip file sent with the report, hence it ignores any logs | 34 // the compressed zip file sent with the report, hence it ignores any logs |
34 // below the size threshold of what we want compressed. | 35 // below the size threshold of what we want compressed. |
| 36 // Logs files are anonymized by the AnonymizerTool. |
35 std::string* LogsToString(const FeedbackCommon::SystemLogsMap& sys_info) { | 37 std::string* LogsToString(const FeedbackCommon::SystemLogsMap& sys_info) { |
36 std::string* syslogs_string = new std::string; | 38 std::string* syslogs_string = new std::string; |
| 39 feedback::AnonymizerTool anonymizer; |
37 for (FeedbackCommon::SystemLogsMap::const_iterator it = sys_info.begin(); | 40 for (FeedbackCommon::SystemLogsMap::const_iterator it = sys_info.begin(); |
38 it != sys_info.end(); | 41 it != sys_info.end(); |
39 ++it) { | 42 ++it) { |
40 std::string key = it->first; | 43 std::string key = it->first; |
41 std::string value = it->second; | 44 std::string value = it->second; |
42 | 45 |
43 if (FeedbackCommon::BelowCompressionThreshold(value)) | 46 if (FeedbackCommon::BelowCompressionThreshold(value)) |
44 continue; | 47 continue; |
45 | 48 |
46 base::TrimString(key, "\n ", &key); | 49 base::TrimString(key, "\n ", &key); |
47 base::TrimString(value, "\n ", &value); | 50 base::TrimString(value, "\n ", &value); |
48 | 51 |
| 52 value = anonymizer.Anonymize(value); |
| 53 |
49 if (value.find("\n") != std::string::npos) { | 54 if (value.find("\n") != std::string::npos) { |
50 syslogs_string->append(key + "=" + kMultilineIndicatorString + | 55 syslogs_string->append(key + "=" + kMultilineIndicatorString + |
51 kMultilineStartString + value + "\n" + | 56 kMultilineStartString + value + "\n" + |
52 kMultilineEndString); | 57 kMultilineEndString); |
53 } else { | 58 } else { |
54 syslogs_string->append(key + "=" + value + "\n"); | 59 syslogs_string->append(key + "=" + value + "\n"); |
55 } | 60 } |
56 } | 61 } |
57 return syslogs_string; | 62 return syslogs_string; |
58 } | 63 } |
59 | 64 |
| 65 // Data is anonymized by the AnonymizerTool. |
60 void AddFeedbackData(userfeedback::ExtensionSubmit* feedback_data, | 66 void AddFeedbackData(userfeedback::ExtensionSubmit* feedback_data, |
61 const std::string& key, | 67 const std::string& key, |
62 const std::string& value) { | 68 const std::string& value) { |
63 // Don't bother with empty keys or values. | 69 // Don't bother with empty keys or values. |
64 if (key.empty() || value.empty()) | 70 if (key.empty() || value.empty()) |
65 return; | 71 return; |
| 72 |
| 73 feedback::AnonymizerTool anonymizer; |
| 74 |
66 // Create log_value object and add it to the web_data object. | 75 // Create log_value object and add it to the web_data object. |
67 userfeedback::ProductSpecificData log_value; | 76 userfeedback::ProductSpecificData log_value; |
68 log_value.set_key(key); | 77 log_value.set_key(key); |
69 log_value.set_value(value); | 78 log_value.set_value(anonymizer.Anonymize(value)); |
70 userfeedback::WebData* web_data = feedback_data->mutable_web_data(); | 79 userfeedback::WebData* web_data = feedback_data->mutable_web_data(); |
71 *(web_data->add_product_specific_data()) = log_value; | 80 *(web_data->add_product_specific_data()) = log_value; |
72 } | 81 } |
73 | 82 |
74 // Adds data as an attachment to feedback_data if the data is non-empty. | 83 // Adds data as an attachment to feedback_data if the data is non-empty. |
75 void AddAttachment(userfeedback::ExtensionSubmit* feedback_data, | 84 void AddAttachment(userfeedback::ExtensionSubmit* feedback_data, |
76 const char* name, | 85 const char* name, |
77 const std::string& data) { | 86 const std::string& data) { |
78 if (data.empty()) | 87 if (data.empty()) |
79 return; | 88 return; |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 | 214 |
206 *(screenshot.mutable_dimensions()) = dimensions; | 215 *(screenshot.mutable_dimensions()) = dimensions; |
207 screenshot.set_binary_content(*image()); | 216 screenshot.set_binary_content(*image()); |
208 | 217 |
209 *(feedback_data->mutable_screenshot()) = screenshot; | 218 *(feedback_data->mutable_screenshot()) = screenshot; |
210 } | 219 } |
211 | 220 |
212 if (category_tag().size()) | 221 if (category_tag().size()) |
213 feedback_data->set_bucket(category_tag()); | 222 feedback_data->set_bucket(category_tag()); |
214 } | 223 } |
OLD | NEW |