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