Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_CRASH_UPLOAD_LIST_H_
      6 #define CHROME_BROWSER_CRASH_UPLOAD_LIST_H_
      7 #pragma once
      8 
      9 #include "base/memory/ref_counted.h"
     10 #include "base/time.h"
     11 
     12 #include <string>
     13 #include <vector>
     14 
     15 class CrashUploadList : public base::RefCountedThreadSafe<CrashUploadList> {
     16  public:
     17   struct CrashInfo {
     18     CrashInfo(const std::string& c, const base::Time& t);
     19     ~CrashInfo();
     20 
     21     std::string crash_id;
     22     base::Time crash_time;
     23   };
     24 
     25   class Delegate {
     26    public:
     27     // Invoked when the crash list has been loaded. Will be called on the
     28     // UI thread.
     29     virtual void OnCrashListAvailable() = 0;
     30 
     31    protected:
     32     virtual ~Delegate() {}
     33   };
     34 
     35   // Static factory method that creates the platform-specific implementation
     36   // of the crash upload list with the given callback delegate.
     37   static CrashUploadList* Create(Delegate* delegate);
     38 
     39   // Creates a new crash upload list with the given callback delegate.
     40   explicit CrashUploadList(Delegate* delegate);
     41 
     42   // Starts loading the crash list. OnCrashListAvailable will be called when
     43   // loading is complete.
     44   void LoadCrashListAsynchronously();
     45 
     46   // Clears the delegate, so that any outstanding asynchronous load will not
     47   // call the delegate on completion.
     48   void ClearDelegate();
     49 
     50   // Populates |crashes| with the |max_count| most recent uploaded crashes,
     51   // in reverse chronological order.
     52   // Must be called only after OnCrashListAvailable has been called.
     53   void GetUploadedCrashes(unsigned int max_count,
     54                           std::vector<CrashInfo>* crashes);
     55 
     56  protected:
     57   virtual ~CrashUploadList();
     58 
     59   // Reads the upload log and stores the entries in crashes_.
     60   virtual void LoadCrashList();
     61 
     62   // Returns a reference to the list of crashes.
     63   std::vector<CrashInfo>& crashes();
     64 
     65  private:
     66   friend class base::RefCountedThreadSafe<CrashUploadList>;
     67 
     68   // Manages the background thread work for LoadCrashListAsynchronously().
     69   void LoadCrashListAndInformDelegateOfCompletion();
     70 
     71   // Calls the delegate's callback method, if there is a delegate.
     72   void InformDelegateOfCompletion();
     73 
     74   // Parses crash log lines, converting them to CrashInfo entries.
     75   void ParseLogEntries(const std::vector<std::string>& log_entries);
     76 
     77   std::vector<CrashInfo> crashes_;
     78   Delegate* delegate_;
     79 
     80   DISALLOW_COPY_AND_ASSIGN(CrashUploadList);
     81 };
     82 
     83 #endif  // CHROME_BROWSER_CRASH_UPLOAD_LIST_H_
     84