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

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

Issue 1280003004: Added policy to disable/enable a system log upload. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/files/file_util.h" 7 #include "base/files/file_util.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/task_runner_util.h" 10 #include "base/task_runner_util.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 const char* const SystemLogUploader::kNameFieldTemplate = "file%d"; 125 const char* const SystemLogUploader::kNameFieldTemplate = "file%d";
126 126
127 SystemLogUploader::SystemLogUploader( 127 SystemLogUploader::SystemLogUploader(
128 scoped_ptr<Delegate> syslog_delegate, 128 scoped_ptr<Delegate> syslog_delegate,
129 const scoped_refptr<base::SequencedTaskRunner>& task_runner) 129 const scoped_refptr<base::SequencedTaskRunner>& task_runner)
130 : retry_count_(0), 130 : retry_count_(0),
131 upload_frequency_( 131 upload_frequency_(
132 base::TimeDelta::FromMilliseconds(kDefaultUploadDelayMs)), 132 base::TimeDelta::FromMilliseconds(kDefaultUploadDelayMs)),
133 task_runner_(task_runner), 133 task_runner_(task_runner),
134 syslog_delegate_(syslog_delegate.Pass()), 134 syslog_delegate_(syslog_delegate.Pass()),
135 upload_enabled_(false),
135 weak_factory_(this) { 136 weak_factory_(this) {
136 if (!syslog_delegate_) 137 if (!syslog_delegate_)
137 syslog_delegate_.reset(new SystemLogDelegate()); 138 syslog_delegate_.reset(new SystemLogDelegate());
138 DCHECK(syslog_delegate_); 139 DCHECK(syslog_delegate_);
140
141 // Watch for policy changes.
142 upload_enabled_observer_ = chromeos::CrosSettings::Get()->AddSettingsObserver(
143 chromeos::kLogUploadEnabled,
144 base::Bind(&SystemLogUploader::RefreshUploadSettings,
145 weak_factory_.GetWeakPtr()));
146
147 // Fetch the current value of the policy.
148 RefreshUploadSettings();
149
139 // Immediately schedule the next system log upload (last_upload_attempt_ is 150 // Immediately schedule the next system log upload (last_upload_attempt_ is
140 // set to the start of the epoch, so this will trigger an update upload in the 151 // set to the start of the epoch, so this will trigger an update upload in the
141 // immediate future). 152 // immediate future).
142 ScheduleNextSystemLogUpload(upload_frequency_); 153 ScheduleNextSystemLogUpload(upload_frequency_);
143 } 154 }
144 155
145 SystemLogUploader::~SystemLogUploader() {} 156 SystemLogUploader::~SystemLogUploader() {}
146 157
147 void SystemLogUploader::OnSuccess() { 158 void SystemLogUploader::OnSuccess() {
148 upload_job_.reset(); 159 upload_job_.reset();
(...skipping 15 matching lines...) Expand all
164 if (retry_count_++ < kMaxNumRetries) { 175 if (retry_count_++ < kMaxNumRetries) {
165 ScheduleNextSystemLogUpload( 176 ScheduleNextSystemLogUpload(
166 base::TimeDelta::FromMilliseconds(kErrorUploadDelayMs)); 177 base::TimeDelta::FromMilliseconds(kErrorUploadDelayMs));
167 } else { 178 } else {
168 // No more retries. 179 // No more retries.
169 retry_count_ = 0; 180 retry_count_ = 0;
170 ScheduleNextSystemLogUpload(upload_frequency_); 181 ScheduleNextSystemLogUpload(upload_frequency_);
171 } 182 }
172 } 183 }
173 184
185 void SystemLogUploader::RefreshUploadSettings() {
186 // Attempt to fetch the current value of the reporting settings.
187 // If trusted values are not available, register this function to be called
188 // back when they are available.
189 chromeos::CrosSettings* settings = chromeos::CrosSettings::Get();
190 if (chromeos::CrosSettingsProvider::TRUSTED !=
191 settings->PrepareTrustedValues(
192 base::Bind(&SystemLogUploader::RefreshUploadSettings,
193 weak_factory_.GetWeakPtr()))) {
194 return;
195 }
196
197 // CrosSettings are trusted - we want to use the last trusted values, by
198 // default do not upload system logs.
199 if (!settings->GetBoolean(chromeos::kLogUploadEnabled, &upload_enabled_))
200 upload_enabled_ = false;
201 }
202
174 void SystemLogUploader::UploadSystemLogs(scoped_ptr<SystemLogs> system_logs) { 203 void SystemLogUploader::UploadSystemLogs(scoped_ptr<SystemLogs> system_logs) {
175 // Must be called on the main thread. 204 // Must be called on the main thread.
176 DCHECK(thread_checker_.CalledOnValidThread()); 205 DCHECK(thread_checker_.CalledOnValidThread());
177 DCHECK(!upload_job_); 206 DCHECK(!upload_job_);
178 207
179 GURL upload_url(kSystemLogUploadUrl); 208 GURL upload_url(kSystemLogUploadUrl);
180 DCHECK(upload_url.is_valid()); 209 DCHECK(upload_url.is_valid());
181 upload_job_ = syslog_delegate_->CreateUploadJob(upload_url, this); 210 upload_job_ = syslog_delegate_->CreateUploadJob(upload_url, this);
182 211
183 // Start a system log upload. 212 // Start a system log upload.
(...skipping 10 matching lines...) Expand all
194 header_fields, data.Pass()); 223 header_fields, data.Pass());
195 ++file_number; 224 ++file_number;
196 } 225 }
197 upload_job_->Start(); 226 upload_job_->Start();
198 } 227 }
199 228
200 void SystemLogUploader::StartLogUpload() { 229 void SystemLogUploader::StartLogUpload() {
201 // Must be called on the main thread. 230 // Must be called on the main thread.
202 DCHECK(thread_checker_.CalledOnValidThread()); 231 DCHECK(thread_checker_.CalledOnValidThread());
203 232
204 syslog_delegate_->LoadSystemLogs(base::Bind( 233 if (upload_enabled_) {
205 &SystemLogUploader::UploadSystemLogs, weak_factory_.GetWeakPtr())); 234 syslog_delegate_->LoadSystemLogs(base::Bind(
235 &SystemLogUploader::UploadSystemLogs, weak_factory_.GetWeakPtr()));
236 } else {
237 // If upload is disabled, schedule the next attempt after 12h.
238 retry_count_ = 0;
239 ScheduleNextSystemLogUpload(upload_frequency_);
240 }
206 } 241 }
207 242
208 void SystemLogUploader::ScheduleNextSystemLogUpload(base::TimeDelta frequency) { 243 void SystemLogUploader::ScheduleNextSystemLogUpload(base::TimeDelta frequency) {
209 // Calculate when to fire off the next update. 244 // Calculate when to fire off the next update.
210 base::TimeDelta delay = std::max( 245 base::TimeDelta delay = std::max(
211 (last_upload_attempt_ + frequency) - base::Time::NowFromSystemTime(), 246 (last_upload_attempt_ + frequency) - base::Time::NowFromSystemTime(),
212 base::TimeDelta()); 247 base::TimeDelta());
213 // Ensure that we never have more than one pending delayed task. 248 // Ensure that we never have more than one pending delayed task.
214 weak_factory_.InvalidateWeakPtrs(); 249 weak_factory_.InvalidateWeakPtrs();
215 task_runner_->PostDelayedTask(FROM_HERE, 250 task_runner_->PostDelayedTask(FROM_HERE,
216 base::Bind(&SystemLogUploader::StartLogUpload, 251 base::Bind(&SystemLogUploader::StartLogUpload,
217 weak_factory_.GetWeakPtr()), 252 weak_factory_.GetWeakPtr()),
218 delay); 253 delay);
219 } 254 }
220 255
221 } // namespace policy 256 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698