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

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: Bug fix. 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 // Create a new print job.
35 std::unique_ptr<CUPSPrintJob> new_job = base::MakeUnique<CUPSPrintJob>(
36 printer_name, next_job_id_++, title, total_page_number);
37 new_job->GetPrinter()->set_display_name(printer_name);
38 print_jobs_.push_back(std::move(new_job));
39
40 // Show the waiting-for-printing notification immediately.
41 base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
42 FROM_HERE,
43 base::Bind(&FakeCUPSPrintJobManager::ChangePrintJobState,
44 weak_ptr_factory_.GetWeakPtr(), print_jobs_.back().get()),
45 base::TimeDelta());
46
47 return true;
48 }
49
50 bool FakeCUPSPrintJobManager::CancelPrintJob(CUPSPrintJob* job) {
51 job->set_state(CUPSPrintJob::STATE_CANCELLED);
52 for (auto observer : observers_)
53 observer->OnPrintJobCancelled(job->job_id());
54
55 // Note: |job| is deleted here.
56 for (auto iter = print_jobs_.begin(); iter != print_jobs_.end(); ++iter) {
57 if (iter->get() == job) {
58 print_jobs_.erase(iter);
59 break;
60 }
61 }
62
63 return true;
64 }
65
66 bool FakeCUPSPrintJobManager::SuspendPrintJob(CUPSPrintJob* job) {
67 job->set_state(CUPSPrintJob::STATE_SUSPENDED);
68 for (auto observer : observers_)
69 observer->OnPrintJobSuspended(job);
70 return true;
71 }
72
73 bool FakeCUPSPrintJobManager::ResumePrintJob(CUPSPrintJob* job) {
74 job->set_state(CUPSPrintJob::STATE_RESUMED);
75 for (auto observer : observers_)
76 observer->OnPrintJobResumed(job);
77
78 base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
79 FROM_HERE, base::Bind(&FakeCUPSPrintJobManager::ChangePrintJobState,
80 weak_ptr_factory_.GetWeakPtr(), job),
81 base::TimeDelta::FromMilliseconds(3000));
82
83 return true;
84 }
85
86 void FakeCUPSPrintJobManager::ChangePrintJobState(CUPSPrintJob* job) {
87 // |job| might have been deleted.
88 bool found = false;
89 for (auto iter = print_jobs_.begin(); iter != print_jobs_.end(); ++iter) {
90 if (iter->get() == job) {
91 found = true;
92 break;
93 }
94 }
95
96 if (!found || job->state() == CUPSPrintJob::STATE_SUSPENDED ||
97 job->state() == CUPSPrintJob::STATE_ERROR) {
98 return;
99 }
100
101 switch (job->state()) {
102 case CUPSPrintJob::STATE_NONE:
103 job->set_state(CUPSPrintJob::STATE_WAITING);
104 for (auto observer : observers_)
105 observer->OnPrintJobCreated(job);
106 break;
107 case CUPSPrintJob::STATE_WAITING:
108 job->set_state(CUPSPrintJob::STATE_STARTED);
109 for (auto observer : observers_)
110 observer->OnPrintJobStarted(job);
111 break;
112 case CUPSPrintJob::STATE_STARTED:
113 job->set_printed_page_number(job->printed_page_number() + 1);
114 job->set_state(CUPSPrintJob::STATE_PAGE_DONE);
115 for (auto observer : observers_)
116 observer->OnPrintJobUpdated(job);
117 break;
118 case CUPSPrintJob::STATE_PAGE_DONE:
119 case CUPSPrintJob::STATE_RESUMED:
120 if (job->printed_page_number() == job->total_page_number()) {
121 job->set_state(CUPSPrintJob::STATE_DOCUMENT_DONE);
122 for (auto observer : observers_)
123 observer->OnPrintJobDone(job);
124 } else {
125 job->set_printed_page_number(job->printed_page_number() + 1);
126 job->set_state(CUPSPrintJob::STATE_PAGE_DONE);
127 for (auto observer : observers_)
128 observer->OnPrintJobUpdated(job);
129 }
130 break;
131 case CUPSPrintJob::STATE_DOCUMENT_DONE:
132 // Only for testing
133 job->set_state(CUPSPrintJob::STATE_ERROR);
134 job->set_error_code(CUPSPrintJob::UNKNOWN_ERROR);
135 for (auto observer : observers_)
136 observer->OnPrintJobError(job);
137 break;
138 default:
139 break;
140 }
141
142 base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
143 FROM_HERE, base::Bind(&FakeCUPSPrintJobManager::ChangePrintJobState,
144 weak_ptr_factory_.GetWeakPtr(), job),
145 base::TimeDelta::FromMilliseconds(3000));
146 }
147
148 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698