| OLD | NEW | 
|   1 // Copyright 2013 The Chromium Authors. All rights reserved. |   1 // Copyright 2013 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 #ifndef CHROME_BROWSER_FEEDBACK_FEEDBACK_UPLOADER_H_ |   5 #ifndef CHROME_BROWSER_FEEDBACK_FEEDBACK_UPLOADER_H_ | 
|   6 #define CHROME_BROWSER_FEEDBACK_FEEDBACK_UPLOADER_H_ |   6 #define CHROME_BROWSER_FEEDBACK_FEEDBACK_UPLOADER_H_ | 
|   7  |   7  | 
|   8 #include <queue> |   8 #include <queue> | 
|   9 #include <string> |   9 #include <string> | 
|  10  |  10  | 
|  11 #include "base/basictypes.h" |  11 #include "base/basictypes.h" | 
|  12 #include "base/memory/scoped_ptr.h" |  12 #include "base/memory/scoped_ptr.h" | 
|  13 #include "base/memory/weak_ptr.h" |  13 #include "base/memory/weak_ptr.h" | 
|  14 #include "base/time/time.h" |  14 #include "base/time/time.h" | 
|  15 #include "base/timer/timer.h" |  15 #include "base/timer/timer.h" | 
|  16 #include "chrome/browser/feedback/feedback_uploader_delegate.h" |  16 #include "chrome/browser/feedback/feedback_uploader_delegate.h" | 
|  17 #include "components/browser_context_keyed_service/browser_context_keyed_service
    .h" |  17 #include "components/browser_context_keyed_service/browser_context_keyed_service
    .h" | 
|  18  |  18  | 
|  19 namespace content { |  19 namespace content { | 
|  20 class BrowserContext; |  20 class BrowserContext; | 
|  21 } |  21 } | 
|  22  |  22  | 
|  23 namespace feedback { |  23 namespace feedback { | 
|  24  |  24  | 
|  25 struct FeedbackReport; |  25 class FeedbackReport; | 
|  26  |  26  | 
|  27 // FeedbackUploader is used to add a feedback report to the queue of reports |  27 // FeedbackUploader is used to add a feedback report to the queue of reports | 
|  28 // being uploaded. In case uploading a report fails, it is written to disk and |  28 // being uploaded. In case uploading a report fails, it is written to disk and | 
|  29 // tried again when it's turn comes up next in the queue. |  29 // tried again when it's turn comes up next in the queue. | 
|  30 class FeedbackUploader : public BrowserContextKeyedService, |  30 class FeedbackUploader : public BrowserContextKeyedService, | 
|  31                          public base::SupportsWeakPtr<FeedbackUploader> { |  31                          public base::SupportsWeakPtr<FeedbackUploader> { | 
|  32  public: |  32  public: | 
|  33   explicit FeedbackUploader(content::BrowserContext* context); |  33   explicit FeedbackUploader(content::BrowserContext* context); | 
|  34   virtual ~FeedbackUploader(); |  34   virtual ~FeedbackUploader(); | 
|  35  |  35  | 
|  36   void QueueReport(scoped_ptr<std::string> data); |  36   // Queues a report for uploading. | 
 |  37   void QueueReport(const std::string& data); | 
|  37  |  38  | 
|  38  private: |  39  private: | 
|  39   friend class FeedbackUploaderTest; |  40   friend class FeedbackUploaderTest; | 
|  40   struct ReportsUploadTimeComparator { |  41   struct ReportsUploadTimeComparator { | 
|  41     bool operator()(const FeedbackReport& a, const FeedbackReport& b) const; |  42     bool operator()(FeedbackReport* a, FeedbackReport* b) const; | 
|  42   }; |  43   }; | 
|  43  |  44  | 
|  44   // Dispatches the report to be uploaded. |  45   // Dispatches the report to be uploaded. | 
|  45   void DispatchReport(scoped_ptr<std::string> data); |  46   void DispatchReport(const std::string& data); | 
 |  47  | 
 |  48   // Loads any unsent reports from disk and queues them to be uploaded in | 
 |  49   // the given browser context. | 
 |  50   void QueueUnsentReports(content::BrowserContext* context); | 
|  46  |  51  | 
|  47   // Update our timer for uploading the next report. |  52   // Update our timer for uploading the next report. | 
|  48   void UpdateUploadTimer(); |  53   void UpdateUploadTimer(); | 
|  49  |  54  | 
|  50   // Requeue this report with a delay. |  55   // Requeue this report with a delay. | 
|  51   void RetryReport(scoped_ptr<std::string> data); |  56   void RetryReport(const std::string& data); | 
|  52  |  57  | 
|  53   void setup_for_test(const ReportDataCallback& dispatch_callback, |  58   void setup_for_test(const ReportDataCallback& dispatch_callback, | 
|  54                       const base::TimeDelta& retry_delay); |  59                       const base::TimeDelta& retry_delay); | 
|  55  |  60  | 
|  56   // Browser context this uploader was created for. |  61   // Browser context this uploader was created for. | 
|  57   content::BrowserContext* context_; |  62   content::BrowserContext* context_; | 
|  58   // Timer to upload the next report at. |  63   // Timer to upload the next report at. | 
|  59   base::OneShotTimer<FeedbackUploader> upload_timer_; |  64   base::OneShotTimer<FeedbackUploader> upload_timer_; | 
|  60   // Priority queue of reports prioritized by the time the report is supposed |  65   // Priority queue of reports prioritized by the time the report is supposed | 
|  61   // to be uploaded at. |  66   // to be uploaded at. | 
|  62   std::priority_queue<FeedbackReport, |  67   std::priority_queue<scoped_refptr<FeedbackReport>, | 
|  63                       std::vector<FeedbackReport>, |  68                       std::vector<scoped_refptr<FeedbackReport> >, | 
|  64                       ReportsUploadTimeComparator> reports_queue_; |  69                       ReportsUploadTimeComparator> reports_queue_; | 
|  65  |  70  | 
|  66   std::vector<FeedbackReport> loaded_reports_; |  | 
|  67  |  | 
|  68   ReportDataCallback dispatch_callback_; |  71   ReportDataCallback dispatch_callback_; | 
|  69   base::TimeDelta retry_delay_; |  72   base::TimeDelta retry_delay_; | 
|  70  |  73  | 
|  71   DISALLOW_COPY_AND_ASSIGN(FeedbackUploader); |  74   DISALLOW_COPY_AND_ASSIGN(FeedbackUploader); | 
|  72 }; |  75 }; | 
|  73  |  76  | 
|  74 }  // namespace feedback |  77 }  // namespace feedback | 
|  75  |  78  | 
|  76 #endif  // CHROME_BROWSER_FEEDBACK_FEEDBACK_UPLOADER_H_ |  79 #endif  // CHROME_BROWSER_FEEDBACK_FEEDBACK_UPLOADER_H_ | 
| OLD | NEW |