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

Side by Side Diff: chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc

Issue 2858353004: Track printer installations for each configuration. (Closed)
Patch Set: rebase Created 3 years, 7 months 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 #include "chrome/browser/ui/webui/print_preview/printer_backend_proxy.h" 5 #include "chrome/browser/ui/webui/print_preview/printer_backend_proxy.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 const PrinterSetupCallback& cb) { 63 const PrinterSetupCallback& cb) {
64 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 64 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
65 65
66 PrinterBasicInfo basic_info = ToBasicInfo(*printer); 66 PrinterBasicInfo basic_info = ToBasicInfo(*printer);
67 67
68 base::PostTaskWithTraitsAndReplyWithResult( 68 base::PostTaskWithTraitsAndReplyWithResult(
69 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, 69 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
70 base::Bind(&GetSettingsOnBlockingPool, printer->id(), basic_info), cb); 70 base::Bind(&GetSettingsOnBlockingPool, printer->id(), basic_info), cb);
71 } 71 }
72 72
73 void HandlePrinterSetup(std::unique_ptr<chromeos::Printer> printer,
74 const PrinterSetupCallback& cb,
75 chromeos::PrinterSetupResult result) {
76 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
77
78 switch (result) {
79 case chromeos::PrinterSetupResult::SUCCESS:
80 VLOG(1) << "Printer setup successful for " << printer->id()
81 << " fetching properties";
82
83 // fetch settings on the blocking pool and invoke callback.
84 FetchCapabilities(std::move(printer), cb);
85 return;
86 case chromeos::PrinterSetupResult::PPD_NOT_FOUND:
87 LOG(WARNING) << "Could not find PPD. Check printer configuration.";
88 // Prompt user to update configuration.
89 // TODO(skau): Fill me in
90 break;
91 case chromeos::PrinterSetupResult::PPD_UNRETRIEVABLE:
92 LOG(WARNING) << "Could not download PPD. Check Internet connection.";
93 // Could not download PPD. Connect to Internet.
94 // TODO(skau): Fill me in
95 break;
96 case chromeos::PrinterSetupResult::PRINTER_UNREACHABLE:
97 case chromeos::PrinterSetupResult::DBUS_ERROR:
98 case chromeos::PrinterSetupResult::PPD_TOO_LARGE:
99 case chromeos::PrinterSetupResult::INVALID_PPD:
100 case chromeos::PrinterSetupResult::FATAL_ERROR:
101 LOG(ERROR) << "Unexpected error in printer setup." << result;
102 break;
103 }
104
105 // TODO(skau): Open printer settings if this is resolvable.
106 cb.Run(nullptr);
107 }
108
109 class PrinterBackendProxyChromeos : public PrinterBackendProxy { 73 class PrinterBackendProxyChromeos : public PrinterBackendProxy {
110 public: 74 public:
111 explicit PrinterBackendProxyChromeos(Profile* profile) 75 explicit PrinterBackendProxyChromeos(Profile* profile)
112 : prefs_(chromeos::PrintersManagerFactory::GetForBrowserContext(profile)), 76 : prefs_(chromeos::PrintersManagerFactory::GetForBrowserContext(profile)),
113 printer_configurer_(chromeos::PrinterConfigurer::Create(profile)) { 77 printer_configurer_(chromeos::PrinterConfigurer::Create(profile)),
78 weak_factory_(this) {
114 // Construct the CupsPrintJobManager to listen for printing events. 79 // Construct the CupsPrintJobManager to listen for printing events.
115 chromeos::CupsPrintJobManagerFactory::GetForBrowserContext(profile); 80 chromeos::CupsPrintJobManagerFactory::GetForBrowserContext(profile);
116 } 81 }
117 82
118 ~PrinterBackendProxyChromeos() override { 83 ~PrinterBackendProxyChromeos() override {
119 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 84 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
120 } 85 }
121 86
122 void GetDefaultPrinter(const DefaultPrinterCallback& cb) override { 87 void GetDefaultPrinter(const DefaultPrinterCallback& cb) override {
123 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 88 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
(...skipping 27 matching lines...) Expand all
151 116
152 std::unique_ptr<chromeos::Printer> printer = 117 std::unique_ptr<chromeos::Printer> printer =
153 prefs_->GetPrinter(printer_name); 118 prefs_->GetPrinter(printer_name);
154 if (!printer) { 119 if (!printer) {
155 // If the printer was removed, the lookup will fail. 120 // If the printer was removed, the lookup will fail.
156 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 121 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
157 base::Bind(cb, nullptr)); 122 base::Bind(cb, nullptr));
158 return; 123 return;
159 } 124 }
160 125
126 if (prefs_->IsConfigurationCurrent(*printer)) {
127 // Skip setup if the printer is already installed.
128 HandlePrinterSetup(std::move(printer), cb, chromeos::SUCCESS);
129 return;
130 }
131
161 const chromeos::Printer& printer_ref = *printer; 132 const chromeos::Printer& printer_ref = *printer;
162 printer_configurer_->SetUpPrinter( 133 printer_configurer_->SetUpPrinter(
163 printer_ref, 134 printer_ref,
164 base::Bind(&HandlePrinterSetup, base::Passed(&printer), cb)); 135 base::Bind(&PrinterBackendProxyChromeos::HandlePrinterSetup,
136 weak_factory_.GetWeakPtr(), base::Passed(&printer), cb));
165 }; 137 };
166 138
167 private: 139 private:
140 void HandlePrinterSetup(std::unique_ptr<chromeos::Printer> printer,
141 const PrinterSetupCallback& cb,
142 chromeos::PrinterSetupResult result) {
143 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
144
145 switch (result) {
146 case chromeos::PrinterSetupResult::SUCCESS:
147 VLOG(1) << "Printer setup successful for " << printer->id()
148 << " fetching properties";
149 prefs_->PrinterInstalled(*printer);
150
151 // fetch settings on the blocking pool and invoke callback.
152 FetchCapabilities(std::move(printer), cb);
153 return;
154 case chromeos::PrinterSetupResult::PPD_NOT_FOUND:
155 LOG(WARNING) << "Could not find PPD. Check printer configuration.";
156 // Prompt user to update configuration.
157 // TODO(skau): Fill me in
158 break;
159 case chromeos::PrinterSetupResult::PPD_UNRETRIEVABLE:
160 LOG(WARNING) << "Could not download PPD. Check Internet connection.";
161 // Could not download PPD. Connect to Internet.
162 // TODO(skau): Fill me in
163 break;
164 case chromeos::PrinterSetupResult::PRINTER_UNREACHABLE:
165 case chromeos::PrinterSetupResult::DBUS_ERROR:
166 case chromeos::PrinterSetupResult::PPD_TOO_LARGE:
167 case chromeos::PrinterSetupResult::INVALID_PPD:
168 case chromeos::PrinterSetupResult::FATAL_ERROR:
169 LOG(ERROR) << "Unexpected error in printer setup." << result;
170 break;
171 }
172
173 // TODO(skau): Open printer settings if this is resolvable.
174 cb.Run(nullptr);
175 }
176
168 chromeos::PrintersManager* prefs_; 177 chromeos::PrintersManager* prefs_;
169 scoped_refptr<chromeos::printing::PpdProvider> ppd_provider_; 178 scoped_refptr<chromeos::printing::PpdProvider> ppd_provider_;
170 std::unique_ptr<chromeos::PrinterConfigurer> printer_configurer_; 179 std::unique_ptr<chromeos::PrinterConfigurer> printer_configurer_;
180 base::WeakPtrFactory<PrinterBackendProxyChromeos> weak_factory_;
171 181
172 DISALLOW_COPY_AND_ASSIGN(PrinterBackendProxyChromeos); 182 DISALLOW_COPY_AND_ASSIGN(PrinterBackendProxyChromeos);
173 }; 183 };
174 184
175 } // namespace 185 } // namespace
176 186
177 std::unique_ptr<PrinterBackendProxy> PrinterBackendProxy::Create( 187 std::unique_ptr<PrinterBackendProxy> PrinterBackendProxy::Create(
178 Profile* profile) { 188 Profile* profile) {
179 return base::MakeUnique<PrinterBackendProxyChromeos>(profile); 189 return base::MakeUnique<PrinterBackendProxyChromeos>(profile);
180 } 190 }
181 191
182 } // namespace printing 192 } // namespace printing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698