| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/system/syslogs_provider.h" | 5 #include "chrome/browser/chromeos/system/syslogs_provider.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 } | 175 } |
| 176 | 176 |
| 177 return logs; | 177 return logs; |
| 178 } | 178 } |
| 179 | 179 |
| 180 } // namespace | 180 } // namespace |
| 181 | 181 |
| 182 class SyslogsProviderImpl : public SyslogsProvider { | 182 class SyslogsProviderImpl : public SyslogsProvider { |
| 183 public: | 183 public: |
| 184 // SyslogsProvider implementation: | 184 // SyslogsProvider implementation: |
| 185 virtual CancelableTaskTracker::TaskId RequestSyslogs( | 185 virtual base::CancelableTaskTracker::TaskId RequestSyslogs( |
| 186 bool compress_logs, | 186 bool compress_logs, |
| 187 SyslogsContext context, | 187 SyslogsContext context, |
| 188 const ReadCompleteCallback& callback, | 188 const ReadCompleteCallback& callback, |
| 189 CancelableTaskTracker* tracker) OVERRIDE; | 189 base::CancelableTaskTracker* tracker) OVERRIDE; |
| 190 | 190 |
| 191 static SyslogsProviderImpl* GetInstance(); | 191 static SyslogsProviderImpl* GetInstance(); |
| 192 | 192 |
| 193 private: | 193 private: |
| 194 friend struct DefaultSingletonTraits<SyslogsProviderImpl>; | 194 friend struct DefaultSingletonTraits<SyslogsProviderImpl>; |
| 195 | 195 |
| 196 // Reads system logs, compresses content if requested. | 196 // Reads system logs, compresses content if requested. |
| 197 // Called from blocking pool thread. | 197 // Called from blocking pool thread. |
| 198 void ReadSyslogs( | 198 void ReadSyslogs( |
| 199 const CancelableTaskTracker::IsCanceledCallback& is_canceled, | 199 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, |
| 200 bool compress_logs, | 200 bool compress_logs, |
| 201 SyslogsContext context, | 201 SyslogsContext context, |
| 202 const ReadCompleteCallback& callback); | 202 const ReadCompleteCallback& callback); |
| 203 | 203 |
| 204 // Loads compressed logs and writes into |zip_content|. | 204 // Loads compressed logs and writes into |zip_content|. |
| 205 void LoadCompressedLogs(const base::FilePath& zip_file, | 205 void LoadCompressedLogs(const base::FilePath& zip_file, |
| 206 std::string* zip_content); | 206 std::string* zip_content); |
| 207 | 207 |
| 208 SyslogsProviderImpl(); | 208 SyslogsProviderImpl(); |
| 209 | 209 |
| 210 // Gets syslogs context string from the enum value. | 210 // Gets syslogs context string from the enum value. |
| 211 const char* GetSyslogsContextString(SyslogsContext context); | 211 const char* GetSyslogsContextString(SyslogsContext context); |
| 212 | 212 |
| 213 // If not canceled, run callback on originating thread (the thread on which | 213 // If not canceled, run callback on originating thread (the thread on which |
| 214 // ReadSyslogs was run). | 214 // ReadSyslogs was run). |
| 215 static void RunCallbackIfNotCanceled( | 215 static void RunCallbackIfNotCanceled( |
| 216 const CancelableTaskTracker::IsCanceledCallback& is_canceled, | 216 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, |
| 217 base::TaskRunner* origin_runner, | 217 base::TaskRunner* origin_runner, |
| 218 const ReadCompleteCallback& callback, | 218 const ReadCompleteCallback& callback, |
| 219 LogDictionaryType* logs, | 219 LogDictionaryType* logs, |
| 220 std::string* zip_content); | 220 std::string* zip_content); |
| 221 | 221 |
| 222 DISALLOW_COPY_AND_ASSIGN(SyslogsProviderImpl); | 222 DISALLOW_COPY_AND_ASSIGN(SyslogsProviderImpl); |
| 223 }; | 223 }; |
| 224 | 224 |
| 225 SyslogsProviderImpl::SyslogsProviderImpl() { | 225 SyslogsProviderImpl::SyslogsProviderImpl() { |
| 226 } | 226 } |
| 227 | 227 |
| 228 CancelableTaskTracker::TaskId SyslogsProviderImpl::RequestSyslogs( | 228 base::CancelableTaskTracker::TaskId SyslogsProviderImpl::RequestSyslogs( |
| 229 bool compress_logs, | 229 bool compress_logs, |
| 230 SyslogsContext context, | 230 SyslogsContext context, |
| 231 const ReadCompleteCallback& callback, | 231 const ReadCompleteCallback& callback, |
| 232 CancelableTaskTracker* tracker) { | 232 base::CancelableTaskTracker* tracker) { |
| 233 CancelableTaskTracker::IsCanceledCallback is_canceled; | 233 base::CancelableTaskTracker::IsCanceledCallback is_canceled; |
| 234 CancelableTaskTracker::TaskId id = tracker->NewTrackedTaskId(&is_canceled); | 234 base::CancelableTaskTracker::TaskId id = |
| 235 tracker->NewTrackedTaskId(&is_canceled); |
| 235 | 236 |
| 236 ReadCompleteCallback callback_runner = | 237 ReadCompleteCallback callback_runner = |
| 237 base::Bind(&SyslogsProviderImpl::RunCallbackIfNotCanceled, | 238 base::Bind(&SyslogsProviderImpl::RunCallbackIfNotCanceled, |
| 238 is_canceled, base::MessageLoopProxy::current(), callback); | 239 is_canceled, base::MessageLoopProxy::current(), callback); |
| 239 | 240 |
| 240 // Schedule a task which will run the callback later when complete. | 241 // Schedule a task which will run the callback later when complete. |
| 241 BrowserThread::PostBlockingPoolTask( | 242 BrowserThread::PostBlockingPoolTask( |
| 242 FROM_HERE, | 243 FROM_HERE, |
| 243 base::Bind(&SyslogsProviderImpl::ReadSyslogs, base::Unretained(this), | 244 base::Bind(&SyslogsProviderImpl::ReadSyslogs, base::Unretained(this), |
| 244 is_canceled, compress_logs, context, callback_runner)); | 245 is_canceled, compress_logs, context, callback_runner)); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 | 289 |
| 289 void SyslogsMemoryHandler::OnDetailsAvailable() { | 290 void SyslogsMemoryHandler::OnDetailsAvailable() { |
| 290 (*logs_)["mem_usage"] = ToLogString(); | 291 (*logs_)["mem_usage"] = ToLogString(); |
| 291 callback_.Run(logs_, zip_content_); | 292 callback_.Run(logs_, zip_content_); |
| 292 } | 293 } |
| 293 | 294 |
| 294 SyslogsMemoryHandler::~SyslogsMemoryHandler() {} | 295 SyslogsMemoryHandler::~SyslogsMemoryHandler() {} |
| 295 | 296 |
| 296 // Called from blocking pool thread. | 297 // Called from blocking pool thread. |
| 297 void SyslogsProviderImpl::ReadSyslogs( | 298 void SyslogsProviderImpl::ReadSyslogs( |
| 298 const CancelableTaskTracker::IsCanceledCallback& is_canceled, | 299 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, |
| 299 bool compress_logs, | 300 bool compress_logs, |
| 300 SyslogsContext context, | 301 SyslogsContext context, |
| 301 const ReadCompleteCallback& callback) { | 302 const ReadCompleteCallback& callback) { |
| 302 DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); | 303 DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); |
| 303 | 304 |
| 304 if (is_canceled.Run()) | 305 if (is_canceled.Run()) |
| 305 return; | 306 return; |
| 306 | 307 |
| 307 // Create temp file. | 308 // Create temp file. |
| 308 base::FilePath zip_file; | 309 base::FilePath zip_file; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 case(SYSLOGS_DEFAULT): | 367 case(SYSLOGS_DEFAULT): |
| 367 return kContextSysInfo; | 368 return kContextSysInfo; |
| 368 default: | 369 default: |
| 369 NOTREACHED(); | 370 NOTREACHED(); |
| 370 return ""; | 371 return ""; |
| 371 } | 372 } |
| 372 } | 373 } |
| 373 | 374 |
| 374 // static | 375 // static |
| 375 void SyslogsProviderImpl::RunCallbackIfNotCanceled( | 376 void SyslogsProviderImpl::RunCallbackIfNotCanceled( |
| 376 const CancelableTaskTracker::IsCanceledCallback& is_canceled, | 377 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, |
| 377 base::TaskRunner* origin_runner, | 378 base::TaskRunner* origin_runner, |
| 378 const ReadCompleteCallback& callback, | 379 const ReadCompleteCallback& callback, |
| 379 LogDictionaryType* logs, | 380 LogDictionaryType* logs, |
| 380 std::string* zip_content) { | 381 std::string* zip_content) { |
| 381 DCHECK(!is_canceled.is_null() && !callback.is_null()); | 382 DCHECK(!is_canceled.is_null() && !callback.is_null()); |
| 382 | 383 |
| 383 if (is_canceled.Run()) { | 384 if (is_canceled.Run()) { |
| 384 delete logs; | 385 delete logs; |
| 385 delete zip_content; | 386 delete zip_content; |
| 386 return; | 387 return; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 398 return Singleton<SyslogsProviderImpl, | 399 return Singleton<SyslogsProviderImpl, |
| 399 DefaultSingletonTraits<SyslogsProviderImpl> >::get(); | 400 DefaultSingletonTraits<SyslogsProviderImpl> >::get(); |
| 400 } | 401 } |
| 401 | 402 |
| 402 SyslogsProvider* SyslogsProvider::GetInstance() { | 403 SyslogsProvider* SyslogsProvider::GetInstance() { |
| 403 return SyslogsProviderImpl::GetInstance(); | 404 return SyslogsProviderImpl::GetInstance(); |
| 404 } | 405 } |
| 405 | 406 |
| 406 } // namespace system | 407 } // namespace system |
| 407 } // namespace chromeos | 408 } // namespace chromeos |
| OLD | NEW |