Home | History | Annotate | Download | only in cloud_print
      1 // Copyright (c) 2013 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_SERVICE_CLOUD_PRINT_PRINTER_JOB_QUEUE_HANDLER_H_
      6 #define CHROME_SERVICE_CLOUD_PRINT_PRINTER_JOB_QUEUE_HANDLER_H_
      7 
      8 #include <map>
      9 #include <string>
     10 #include <utility>
     11 #include <vector>
     12 
     13 #include "base/files/file_path.h"
     14 #include "base/memory/ref_counted.h"
     15 #include "base/memory/scoped_ptr.h"
     16 #include "base/memory/weak_ptr.h"
     17 #include "base/time/time.h"
     18 #include "chrome/common/cloud_print/cloud_print_constants.h"
     19 
     20 namespace base {
     21   class DictionaryValue;
     22 }
     23 
     24 namespace cloud_print {
     25 
     26 struct JobDetails {
     27   JobDetails();
     28   ~JobDetails();
     29   void Clear();
     30   static bool ordering(const JobDetails& first, const JobDetails& second);
     31 
     32   std::string job_id_;
     33   std::string job_title_;
     34 
     35   std::string print_ticket_url_;
     36   std::string print_data_url_;
     37 
     38   std::string print_ticket_;
     39   base::FilePath print_data_file_path_;
     40   std::string print_data_mime_type_;
     41 
     42   std::vector<std::string> tags_;
     43 
     44   base::TimeDelta time_remaining_;
     45 };
     46 
     47 // class containing logic for print job backoff
     48 
     49 class PrinterJobQueueHandler {
     50  public:
     51   class TimeProvider {
     52    public:
     53     virtual base::Time GetNow() = 0;
     54     virtual ~TimeProvider() {}
     55   };
     56 
     57   // PrinterJobQueueHandler takes ownership of |time_provider| and is
     58   // responsible for deleting it.
     59   explicit PrinterJobQueueHandler(TimeProvider* time_provider);
     60   PrinterJobQueueHandler();
     61   ~PrinterJobQueueHandler();
     62 
     63   // jobs will be filled with details of all jobs in the queue, sorted by time
     64   // until they are ready to print, lowest to highest. Jobs that are ready to
     65   // print will have a time_remaining_ of 0.
     66   void GetJobsFromQueue(const base::DictionaryValue* json_data,
     67                         std::vector<JobDetails>* jobs);
     68 
     69   // Marks a job fetch as failed. Returns "true" if the job will be retried.
     70   bool JobFetchFailed(const std::string& job_id);
     71 
     72   void JobDone(const std::string& job_id);
     73 
     74  private:
     75   scoped_ptr<TimeProvider> time_provider_;
     76 
     77   struct FailedJobMetadata {
     78     int retries_;
     79     base::Time last_retry_;
     80   };
     81 
     82   typedef std::map<std::string, FailedJobMetadata> FailedJobMap;
     83   typedef std::pair<std::string, FailedJobMetadata> FailedJobPair;
     84 
     85   FailedJobMap failed_job_map_;
     86 
     87   void ConstructJobDetailsFromJson(const base::DictionaryValue* json_data,
     88                                    JobDetails* details_obj);
     89   base::TimeDelta ComputeBackoffTime(const std::string& job_id);
     90 
     91   DISALLOW_COPY_AND_ASSIGN(PrinterJobQueueHandler);
     92 };
     93 
     94 }  // namespace cloud_print
     95 
     96 #endif  // CHROME_SERVICE_CLOUD_PRINT_PRINTER_JOB_QUEUE_HANDLER_H_
     97 
     98 
     99