Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: chrome/browser/chromeos/policy/system_log_uploader.cc

Issue 1870793002: Convert //chrome/browser/chromeos from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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 "system_log_uploader.h"
6
7 #include <utility> 5 #include <utility>
8 6
9 #include "base/bind.h" 7 #include "base/bind.h"
10 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
11 #include "base/command_line.h" 9 #include "base/command_line.h"
12 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
11 #include "base/memory/ptr_util.h"
13 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
15 #include "base/task_runner_util.h" 14 #include "base/task_runner_util.h"
16 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/chromeos/policy/upload_job_impl.h" 16 #include "chrome/browser/chromeos/policy/upload_job_impl.h"
18 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" 17 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h"
19 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h " 18 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h "
20 #include "chrome/common/chrome_switches.h" 19 #include "chrome/common/chrome_switches.h"
21 #include "components/feedback/anonymizer_tool.h" 20 #include "components/feedback/anonymizer_tool.h"
22 #include "components/policy/core/browser/browser_policy_connector.h" 21 #include "components/policy/core/browser/browser_policy_connector.h"
23 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
24 #include "net/http/http_request_headers.h" 23 #include "net/http/http_request_headers.h"
24 #include "system_log_uploader.h"
25 25
26 namespace { 26 namespace {
27 // The maximum number of successive retries. 27 // The maximum number of successive retries.
28 const int kMaxNumRetries = 1; 28 const int kMaxNumRetries = 1;
29 29
30 // String constant defining the url tail we upload system logs to. 30 // String constant defining the url tail we upload system logs to.
31 const char* kSystemLogUploadUrlTail = "/upload"; 31 const char* kSystemLogUploadUrlTail = "/upload";
32 32
33 // The file names of the system logs to upload. 33 // The file names of the system logs to upload.
34 // Note: do not add anything to this list without checking for PII in the file. 34 // Note: do not add anything to this list without checking for PII in the file.
35 const char* const kSystemLogFileNames[] = { 35 const char* const kSystemLogFileNames[] = {
36 "/var/log/bios_info.txt", "/var/log/chrome/chrome", 36 "/var/log/bios_info.txt", "/var/log/chrome/chrome",
37 "/var/log/eventlog.txt", "/var/log/platform_info.txt", 37 "/var/log/eventlog.txt", "/var/log/platform_info.txt",
38 "/var/log/messages", "/var/log/messages.1", 38 "/var/log/messages", "/var/log/messages.1",
39 "/var/log/net.log", "/var/log/net.1.log", 39 "/var/log/net.log", "/var/log/net.1.log",
40 "/var/log/ui/ui.LATEST", "/var/log/update_engine.log"}; 40 "/var/log/ui/ui.LATEST", "/var/log/update_engine.log"};
41 41
42 // Reads the system log files as binary files, anonymizes data, stores the files 42 // Reads the system log files as binary files, anonymizes data, stores the files
43 // as pairs (file name, data) and returns. Called on blocking thread. 43 // as pairs (file name, data) and returns. Called on blocking thread.
44 scoped_ptr<policy::SystemLogUploader::SystemLogs> ReadFiles() { 44 std::unique_ptr<policy::SystemLogUploader::SystemLogs> ReadFiles() {
45 scoped_ptr<policy::SystemLogUploader::SystemLogs> system_logs( 45 std::unique_ptr<policy::SystemLogUploader::SystemLogs> system_logs(
46 new policy::SystemLogUploader::SystemLogs()); 46 new policy::SystemLogUploader::SystemLogs());
47 feedback::AnonymizerTool anonymizer; 47 feedback::AnonymizerTool anonymizer;
48 for (auto const file_path : kSystemLogFileNames) { 48 for (auto const file_path : kSystemLogFileNames) {
49 if (!base::PathExists(base::FilePath(file_path))) 49 if (!base::PathExists(base::FilePath(file_path)))
50 continue; 50 continue;
51 std::string data = std::string(); 51 std::string data = std::string();
52 if (!base::ReadFileToString(base::FilePath(file_path), &data)) { 52 if (!base::ReadFileToString(base::FilePath(file_path), &data)) {
53 LOG(ERROR) << "Failed to read the system log file from the disk " 53 LOG(ERROR) << "Failed to read the system log file from the disk "
54 << file_path << std::endl; 54 << file_path << std::endl;
55 } 55 }
56 system_logs->push_back(std::make_pair( 56 system_logs->push_back(std::make_pair(
57 file_path, 57 file_path,
58 policy::SystemLogUploader::RemoveSensitiveData(&anonymizer, data))); 58 policy::SystemLogUploader::RemoveSensitiveData(&anonymizer, data)));
59 } 59 }
60 return system_logs; 60 return system_logs;
61 } 61 }
62 62
63 // An implementation of the |SystemLogUploader::Delegate|, that is used to 63 // An implementation of the |SystemLogUploader::Delegate|, that is used to
64 // create an upload job and load system logs from the disk. 64 // create an upload job and load system logs from the disk.
65 class SystemLogDelegate : public policy::SystemLogUploader::Delegate { 65 class SystemLogDelegate : public policy::SystemLogUploader::Delegate {
66 public: 66 public:
67 SystemLogDelegate(); 67 SystemLogDelegate();
68 ~SystemLogDelegate() override; 68 ~SystemLogDelegate() override;
69 69
70 // SystemLogUploader::Delegate: 70 // SystemLogUploader::Delegate:
71 void LoadSystemLogs(const LogUploadCallback& upload_callback) override; 71 void LoadSystemLogs(const LogUploadCallback& upload_callback) override;
72 72
73 scoped_ptr<policy::UploadJob> CreateUploadJob( 73 std::unique_ptr<policy::UploadJob> CreateUploadJob(
74 const GURL& upload_url, 74 const GURL& upload_url,
75 policy::UploadJob::Delegate* delegate) override; 75 policy::UploadJob::Delegate* delegate) override;
76 76
77 private: 77 private:
78 DISALLOW_COPY_AND_ASSIGN(SystemLogDelegate); 78 DISALLOW_COPY_AND_ASSIGN(SystemLogDelegate);
79 }; 79 };
80 80
81 SystemLogDelegate::SystemLogDelegate() {} 81 SystemLogDelegate::SystemLogDelegate() {}
82 82
83 SystemLogDelegate::~SystemLogDelegate() {} 83 SystemLogDelegate::~SystemLogDelegate() {}
84 84
85 void SystemLogDelegate::LoadSystemLogs( 85 void SystemLogDelegate::LoadSystemLogs(
86 const LogUploadCallback& upload_callback) { 86 const LogUploadCallback& upload_callback) {
87 // Run ReadFiles() in the thread that interacts with the file system and 87 // Run ReadFiles() in the thread that interacts with the file system and
88 // return system logs to |upload_callback| on the current thread. 88 // return system logs to |upload_callback| on the current thread.
89 base::PostTaskAndReplyWithResult(content::BrowserThread::GetBlockingPool(), 89 base::PostTaskAndReplyWithResult(content::BrowserThread::GetBlockingPool(),
90 FROM_HERE, base::Bind(&ReadFiles), 90 FROM_HERE, base::Bind(&ReadFiles),
91 upload_callback); 91 upload_callback);
92 } 92 }
93 93
94 scoped_ptr<policy::UploadJob> SystemLogDelegate::CreateUploadJob( 94 std::unique_ptr<policy::UploadJob> SystemLogDelegate::CreateUploadJob(
95 const GURL& upload_url, 95 const GURL& upload_url,
96 policy::UploadJob::Delegate* delegate) { 96 policy::UploadJob::Delegate* delegate) {
97 chromeos::DeviceOAuth2TokenService* device_oauth2_token_service = 97 chromeos::DeviceOAuth2TokenService* device_oauth2_token_service =
98 chromeos::DeviceOAuth2TokenServiceFactory::Get(); 98 chromeos::DeviceOAuth2TokenServiceFactory::Get();
99 99
100 scoped_refptr<net::URLRequestContextGetter> system_request_context = 100 scoped_refptr<net::URLRequestContextGetter> system_request_context =
101 g_browser_process->system_request_context(); 101 g_browser_process->system_request_context();
102 std::string robot_account_id = 102 std::string robot_account_id =
103 device_oauth2_token_service->GetRobotAccountId(); 103 device_oauth2_token_service->GetRobotAccountId();
104 return scoped_ptr<policy::UploadJob>(new policy::UploadJobImpl( 104 return std::unique_ptr<policy::UploadJob>(new policy::UploadJobImpl(
105 upload_url, robot_account_id, device_oauth2_token_service, 105 upload_url, robot_account_id, device_oauth2_token_service,
106 system_request_context, delegate, 106 system_request_context, delegate,
107 make_scoped_ptr(new policy::UploadJobImpl::RandomMimeBoundaryGenerator))); 107 base::WrapUnique(
108 new policy::UploadJobImpl::RandomMimeBoundaryGenerator)));
108 } 109 }
109 110
110 // Returns the system log upload frequency. 111 // Returns the system log upload frequency.
111 base::TimeDelta GetUploadFrequency() { 112 base::TimeDelta GetUploadFrequency() {
112 base::TimeDelta upload_frequency(base::TimeDelta::FromMilliseconds( 113 base::TimeDelta upload_frequency(base::TimeDelta::FromMilliseconds(
113 policy::SystemLogUploader::kDefaultUploadDelayMs)); 114 policy::SystemLogUploader::kDefaultUploadDelayMs));
114 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 115 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
115 switches::kSystemLogUploadFrequency)) { 116 switches::kSystemLogUploadFrequency)) {
116 std::string string_value = 117 std::string string_value =
117 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 118 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
(...skipping 30 matching lines...) Expand all
148 // String constant signalling that the data segment contains log files. 149 // String constant signalling that the data segment contains log files.
149 const char* const SystemLogUploader::kFileTypeLogFile = "log_file"; 150 const char* const SystemLogUploader::kFileTypeLogFile = "log_file";
150 151
151 // String constant signalling that the segment contains a plain text. 152 // String constant signalling that the segment contains a plain text.
152 const char* const SystemLogUploader::kContentTypePlainText = "text/plain"; 153 const char* const SystemLogUploader::kContentTypePlainText = "text/plain";
153 154
154 // Template string constant for populating the name field. 155 // Template string constant for populating the name field.
155 const char* const SystemLogUploader::kNameFieldTemplate = "file%d"; 156 const char* const SystemLogUploader::kNameFieldTemplate = "file%d";
156 157
157 SystemLogUploader::SystemLogUploader( 158 SystemLogUploader::SystemLogUploader(
158 scoped_ptr<Delegate> syslog_delegate, 159 std::unique_ptr<Delegate> syslog_delegate,
159 const scoped_refptr<base::SequencedTaskRunner>& task_runner) 160 const scoped_refptr<base::SequencedTaskRunner>& task_runner)
160 : retry_count_(0), 161 : retry_count_(0),
161 upload_frequency_(GetUploadFrequency()), 162 upload_frequency_(GetUploadFrequency()),
162 task_runner_(task_runner), 163 task_runner_(task_runner),
163 syslog_delegate_(std::move(syslog_delegate)), 164 syslog_delegate_(std::move(syslog_delegate)),
164 upload_enabled_(false), 165 upload_enabled_(false),
165 weak_factory_(this) { 166 weak_factory_(this) {
166 if (!syslog_delegate_) 167 if (!syslog_delegate_)
167 syslog_delegate_.reset(new SystemLogDelegate()); 168 syslog_delegate_.reset(new SystemLogDelegate());
168 DCHECK(syslog_delegate_); 169 DCHECK(syslog_delegate_);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 return; 230 return;
230 } 231 }
231 232
232 // CrosSettings are trusted - we want to use the last trusted values, by 233 // CrosSettings are trusted - we want to use the last trusted values, by
233 // default do not upload system logs. 234 // default do not upload system logs.
234 if (!settings->GetBoolean(chromeos::kSystemLogUploadEnabled, 235 if (!settings->GetBoolean(chromeos::kSystemLogUploadEnabled,
235 &upload_enabled_)) 236 &upload_enabled_))
236 upload_enabled_ = false; 237 upload_enabled_ = false;
237 } 238 }
238 239
239 void SystemLogUploader::UploadSystemLogs(scoped_ptr<SystemLogs> system_logs) { 240 void SystemLogUploader::UploadSystemLogs(
241 std::unique_ptr<SystemLogs> system_logs) {
240 // Must be called on the main thread. 242 // Must be called on the main thread.
241 DCHECK(thread_checker_.CalledOnValidThread()); 243 DCHECK(thread_checker_.CalledOnValidThread());
242 DCHECK(!upload_job_); 244 DCHECK(!upload_job_);
243 245
244 GURL upload_url(GetUploadUrl()); 246 GURL upload_url(GetUploadUrl());
245 DCHECK(upload_url.is_valid()); 247 DCHECK(upload_url.is_valid());
246 upload_job_ = syslog_delegate_->CreateUploadJob(upload_url, this); 248 upload_job_ = syslog_delegate_->CreateUploadJob(upload_url, this);
247 249
248 // Start a system log upload. 250 // Start a system log upload.
249 int file_number = 1; 251 int file_number = 1;
250 for (const auto& syslog_entry : *system_logs) { 252 for (const auto& syslog_entry : *system_logs) {
251 std::map<std::string, std::string> header_fields; 253 std::map<std::string, std::string> header_fields;
252 scoped_ptr<std::string> data = 254 std::unique_ptr<std::string> data =
253 make_scoped_ptr(new std::string(syslog_entry.second)); 255 base::WrapUnique(new std::string(syslog_entry.second));
254 header_fields.insert(std::make_pair(kFileTypeHeaderName, kFileTypeLogFile)); 256 header_fields.insert(std::make_pair(kFileTypeHeaderName, kFileTypeLogFile));
255 header_fields.insert(std::make_pair(net::HttpRequestHeaders::kContentType, 257 header_fields.insert(std::make_pair(net::HttpRequestHeaders::kContentType,
256 kContentTypePlainText)); 258 kContentTypePlainText));
257 upload_job_->AddDataSegment( 259 upload_job_->AddDataSegment(
258 base::StringPrintf(kNameFieldTemplate, file_number), syslog_entry.first, 260 base::StringPrintf(kNameFieldTemplate, file_number), syslog_entry.first,
259 header_fields, std::move(data)); 261 header_fields, std::move(data));
260 ++file_number; 262 ++file_number;
261 } 263 }
262 upload_job_->Start(); 264 upload_job_->Start();
263 } 265 }
(...skipping 20 matching lines...) Expand all
284 base::TimeDelta()); 286 base::TimeDelta());
285 // Ensure that we never have more than one pending delayed task. 287 // Ensure that we never have more than one pending delayed task.
286 weak_factory_.InvalidateWeakPtrs(); 288 weak_factory_.InvalidateWeakPtrs();
287 task_runner_->PostDelayedTask(FROM_HERE, 289 task_runner_->PostDelayedTask(FROM_HERE,
288 base::Bind(&SystemLogUploader::StartLogUpload, 290 base::Bind(&SystemLogUploader::StartLogUpload,
289 weak_factory_.GetWeakPtr()), 291 weak_factory_.GetWeakPtr()),
290 delay); 292 delay);
291 } 293 }
292 294
293 } // namespace policy 295 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/policy/system_log_uploader.h ('k') | chrome/browser/chromeos/policy/system_log_uploader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698