Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: chrome/browser/chromeos/printing/fake_cups_print_job_manager.cc

Issue 2435303003: [CUPS] Implement the Print Job notification. (Closed)
Patch Set: Fix the compile warning. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 #include "chrome/browser/chromeos/printing/fake_cups_print_job_manager.h"
6
7 #include "base/bind.h"
8 #include "base/memory/ptr_util.h"
9 #include "base/threading/sequenced_task_runner_handle.h"
10 #include "chrome/browser/chromeos/printing/cups_print_job.h"
11 #include "chrome/browser/chromeos/printing/cups_print_job_manager_factory.h"
12 #include "chrome/browser/notifications/notification.h"
13 #include "content/public/browser/browser_context.h"
14
15 namespace chromeos {
16
17 // static
18 int FakeCupsPrintJobManager::next_job_id_ = 0;
19
20 // static
21 CupsPrintJobManager* CupsPrintJobManager::Get(
22 content::BrowserContext* browser_context) {
23 return CupsPrintJobManagerFactory::GetForBrowserContext(browser_context);
24 }
25
26 FakeCupsPrintJobManager::FakeCupsPrintJobManager(Profile* profile)
27 : CupsPrintJobManager(profile), weak_ptr_factory_(this) {}
28
29 FakeCupsPrintJobManager::~FakeCupsPrintJobManager() {}
30
31 bool FakeCupsPrintJobManager::CreatePrintJob(const std::string& printer_name,
32 const std::string& title,
33 int total_page_number) {
34 Printer printer(printer_name);
35 printer.set_display_name(printer_name);
36 // Create a new print job.
37 std::unique_ptr<CupsPrintJob> new_job = base::MakeUnique<CupsPrintJob>(
38 printer, next_job_id_++, title, total_page_number);
39 print_jobs_.push_back(std::move(new_job));
40
41 // Show the waiting-for-printing notification immediately.
42 base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
43 FROM_HERE,
44 base::Bind(&FakeCupsPrintJobManager::ChangePrintJobState,
45 weak_ptr_factory_.GetWeakPtr(), print_jobs_.back().get()),
46 base::TimeDelta());
47
48 return true;
49 }
50
51 bool FakeCupsPrintJobManager::CancelPrintJob(CupsPrintJob* job) {
52 job->set_state(CupsPrintJob::State::STATE_CANCELLED);
53 for (auto observer : observers_)
54 observer->OnPrintJobCancelled(job->job_id());
55
56 // Note: |job| is deleted here.
57 for (auto iter = print_jobs_.begin(); iter != print_jobs_.end(); ++iter) {
58 if (iter->get() == job) {
59 print_jobs_.erase(iter);
60 break;
61 }
62 }
63
64 return true;
65 }
66
67 bool FakeCupsPrintJobManager::SuspendPrintJob(CupsPrintJob* job) {
68 job->set_state(CupsPrintJob::State::STATE_SUSPENDED);
69 for (auto observer : observers_)
70 observer->OnPrintJobSuspended(job);
71 return true;
72 }
73
74 bool FakeCupsPrintJobManager::ResumePrintJob(CupsPrintJob* job) {
75 job->set_state(CupsPrintJob::State::STATE_RESUMED);
76 for (auto observer : observers_)
77 observer->OnPrintJobResumed(job);
78
79 base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
80 FROM_HERE, base::Bind(&FakeCupsPrintJobManager::ChangePrintJobState,
81 weak_ptr_factory_.GetWeakPtr(), job),
82 base::TimeDelta::FromMilliseconds(3000));
83
84 return true;
85 }
86
87 void FakeCupsPrintJobManager::ChangePrintJobState(CupsPrintJob* job) {
88 // |job| might have been deleted.
89 bool found = false;
90 for (auto iter = print_jobs_.begin(); iter != print_jobs_.end(); ++iter) {
91 if (iter->get() == job) {
92 found = true;
93 break;
94 }
95 }
96
97 if (!found || job->state() == CupsPrintJob::State::STATE_SUSPENDED ||
98 job->state() == CupsPrintJob::State::STATE_ERROR) {
99 return;
100 }
101
102 switch (job->state()) {
103 case CupsPrintJob::State::STATE_NONE:
104 job->set_state(CupsPrintJob::State::STATE_WAITING);
105 for (auto observer : observers_)
106 observer->OnPrintJobCreated(job);
107 break;
108 case CupsPrintJob::State::STATE_WAITING:
109 job->set_state(CupsPrintJob::State::STATE_STARTED);
110 for (auto observer : observers_)
111 observer->OnPrintJobStarted(job);
112 break;
113 case CupsPrintJob::State::STATE_STARTED:
114 job->set_printed_page_number(job->printed_page_number() + 1);
115 job->set_state(CupsPrintJob::State::STATE_PAGE_DONE);
116 for (auto observer : observers_)
117 observer->OnPrintJobUpdated(job);
118 break;
119 case CupsPrintJob::State::STATE_PAGE_DONE:
120 case CupsPrintJob::State::STATE_RESUMED:
121 if (job->printed_page_number() == job->total_page_number()) {
122 job->set_state(CupsPrintJob::State::STATE_DOCUMENT_DONE);
123 for (auto observer : observers_)
124 observer->OnPrintJobDone(job);
125 } else {
126 job->set_printed_page_number(job->printed_page_number() + 1);
127 job->set_state(CupsPrintJob::State::STATE_PAGE_DONE);
128 for (auto observer : observers_)
129 observer->OnPrintJobUpdated(job);
130 }
131 break;
132 case CupsPrintJob::State::STATE_DOCUMENT_DONE:
133 // Only for testing
134 job->set_state(CupsPrintJob::State::STATE_ERROR);
135 job->set_error_code(CupsPrintJob::ErrorCode::UNKNOWN_ERROR);
136 for (auto observer : observers_)
137 observer->OnPrintJobError(job);
138 break;
139 default:
140 break;
141 }
142
143 base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
144 FROM_HERE, base::Bind(&FakeCupsPrintJobManager::ChangePrintJobState,
145 weak_ptr_factory_.GetWeakPtr(), job),
146 base::TimeDelta::FromMilliseconds(3000));
147 }
148
149 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698