// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CRASH_UPLOAD_LIST_H_ #define CHROME_BROWSER_CRASH_UPLOAD_LIST_H_ #pragma once #include "base/memory/ref_counted.h" #include "base/time.h" #include #include class CrashUploadList : public base::RefCountedThreadSafe { public: struct CrashInfo { CrashInfo(const std::string& c, const base::Time& t); ~CrashInfo(); std::string crash_id; base::Time crash_time; }; class Delegate { public: // Invoked when the crash list has been loaded. Will be called on the // UI thread. virtual void OnCrashListAvailable() = 0; protected: virtual ~Delegate() {} }; // Static factory method that creates the platform-specific implementation // of the crash upload list with the given callback delegate. static CrashUploadList* Create(Delegate* delegate); // Creates a new crash upload list with the given callback delegate. explicit CrashUploadList(Delegate* delegate); // Starts loading the crash list. OnCrashListAvailable will be called when // loading is complete. void LoadCrashListAsynchronously(); // Clears the delegate, so that any outstanding asynchronous load will not // call the delegate on completion. void ClearDelegate(); // Populates |crashes| with the |max_count| most recent uploaded crashes, // in reverse chronological order. // Must be called only after OnCrashListAvailable has been called. void GetUploadedCrashes(unsigned int max_count, std::vector* crashes); protected: virtual ~CrashUploadList(); // Reads the upload log and stores the entries in crashes_. virtual void LoadCrashList(); // Returns a reference to the list of crashes. std::vector& crashes(); private: friend class base::RefCountedThreadSafe; // Manages the background thread work for LoadCrashListAsynchronously(). void LoadCrashListAndInformDelegateOfCompletion(); // Calls the delegate's callback method, if there is a delegate. void InformDelegateOfCompletion(); // Parses crash log lines, converting them to CrashInfo entries. void ParseLogEntries(const std::vector& log_entries); std::vector crashes_; Delegate* delegate_; DISALLOW_COPY_AND_ASSIGN(CrashUploadList); }; #endif // CHROME_BROWSER_CRASH_UPLOAD_LIST_H_