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

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

Issue 2613683004: Completely rewrite the PpdProvider/PpdCache to use the SCS backend. Along the way, clean it up a l… (Closed)
Patch Set: Address michealpg@ comments Created 3 years, 10 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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 89
90 VLOG(1) << "Printer setup successful for " << printer->id() 90 VLOG(1) << "Printer setup successful for " << printer->id()
91 << " fetching properties"; 91 << " fetching properties";
92 92
93 // fetch settings on the blocking pool and invoke callback. 93 // fetch settings on the blocking pool and invoke callback.
94 FetchCapabilities(std::move(printer), cb); 94 FetchCapabilities(std::move(printer), cb);
95 } 95 }
96 96
97 void OnPrinterAddResult(std::unique_ptr<chromeos::Printer> printer, 97 void OnPrinterAddResult(std::unique_ptr<chromeos::Printer> printer,
98 const PrinterSetupCallback& cb, 98 const PrinterSetupCallback& cb,
99 bool success) { 99 int32_t result_code) {
100 // It's expected that debug daemon posts callbacks on the UI thread. 100 // It's expected that debug daemon posts callbacks on the UI thread.
101 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 101 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
102 102
103 HandlePrinterSetup(std::move(printer), success ? SUCCESS : FAILURE, cb); 103 HandlePrinterSetup(std::move(printer), (result_code == 0) ? SUCCESS : FAILURE,
104 cb);
104 } 105 }
105 106
106 void OnPrinterAddError(const PrinterSetupCallback& cb) { 107 void OnPrinterAddError(const PrinterSetupCallback& cb) {
107 // It's expected that debug daemon posts callbacks on the UI thread. 108 // It's expected that debug daemon posts callbacks on the UI thread.
108 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 109 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
109 110
110 LOG(WARNING) << "Could not contact debugd"; 111 LOG(WARNING) << "Could not contact debugd";
111 PostCallbackError(cb); 112 PostCallbackError(cb);
112 } 113 }
113 114
114 void AddPrinter(std::unique_ptr<chromeos::Printer> printer, 115 void AddPrinter(std::unique_ptr<chromeos::Printer> printer,
115 const std::string& ppd_path, 116 const std::string& ppd_contents,
116 bool ipp_everywhere,
117 const PrinterSetupCallback& cb) { 117 const PrinterSetupCallback& cb) {
118 // Always push configuration to CUPS. It may need an update. 118 // Always push configuration to CUPS. It may need an update.
119 const std::string printer_name = printer->id(); 119 const std::string printer_name = printer->id();
120 const std::string printer_uri = printer->uri(); 120 const std::string printer_uri = printer->uri();
121 121
122 chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()->CupsAddPrinter( 122 if (!ppd_contents.empty()) {
123 printer_name, printer_uri, ppd_path, ipp_everywhere, 123 chromeos::DBusThreadManager::Get()
124 base::Bind(&OnPrinterAddResult, base::Passed(&printer), cb), 124 ->GetDebugDaemonClient()
125 base::Bind(&OnPrinterAddError, cb)); 125 ->CupsAddManuallyConfiguredPrinter(
126 printer_name, printer_uri, ppd_contents,
127 base::Bind(&OnPrinterAddResult, base::Passed(&printer), cb),
128 base::Bind(&OnPrinterAddError, cb));
129 } else {
130 // If we weren't given a ppd to use, we'd better be auto-configurable.
131 DCHECK(printer->IsIppEverywhere());
132 chromeos::DBusThreadManager::Get()
133 ->GetDebugDaemonClient()
134 ->CupsAddAutoConfiguredPrinter(
135 printer_name, printer_uri,
136 base::Bind(&OnPrinterAddResult, base::Passed(&printer), cb),
137 base::Bind(&OnPrinterAddError, cb));
138 }
126 } 139 }
127 140
128 void PPDResolve(std::unique_ptr<chromeos::Printer> printer, 141 void PPDResolve(std::unique_ptr<chromeos::Printer> printer,
129 const PrinterSetupCallback& cb, 142 const PrinterSetupCallback& cb,
130 chromeos::printing::PpdProvider::CallbackResultCode result, 143 chromeos::printing::PpdProvider::CallbackResultCode result,
131 base::FilePath path) { 144 const std::string& ppd_contents) {
132 switch (result) { 145 switch (result) {
133 case chromeos::printing::PpdProvider::SUCCESS: { 146 case chromeos::printing::PpdProvider::SUCCESS: {
134 DCHECK(!path.empty()); 147 DCHECK(!ppd_contents.empty());
135 AddPrinter(std::move(printer), path.value() /* ppd path */, 148 AddPrinter(std::move(printer), ppd_contents, cb);
136 false /* non-ipp-everywhere */, cb);
137 break; 149 break;
138 } 150 }
139 case chromeos::printing::PpdProvider::NOT_FOUND: 151 case chromeos::printing::PpdProvider::NOT_FOUND:
140 HandlePrinterSetup(std::move(printer), PPD_NOT_FOUND, cb); 152 HandlePrinterSetup(std::move(printer), PPD_NOT_FOUND, cb);
141 break; 153 break;
142 default: 154 default:
143 HandlePrinterSetup(std::move(printer), FAILURE, cb); 155 HandlePrinterSetup(std::move(printer), FAILURE, cb);
144 break; 156 break;
145 } 157 }
146 } 158 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 prefs_->GetPrinter(printer_name); 205 prefs_->GetPrinter(printer_name);
194 if (!printer) { 206 if (!printer) {
195 // If the printer was removed, the lookup will fail. 207 // If the printer was removed, the lookup will fail.
196 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 208 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
197 base::Bind(cb, nullptr)); 209 base::Bind(cb, nullptr));
198 return; 210 return;
199 } 211 }
200 212
201 if (printer->IsIppEverywhere()) { 213 if (printer->IsIppEverywhere()) {
202 // ChromeOS registers printer by GUID rather than display name. 214 // ChromeOS registers printer by GUID rather than display name.
203 AddPrinter(std::move(printer), "" /* empty ppd path */, 215 AddPrinter(std::move(printer), "", cb);
204 true /* ipp everywhere */, cb); 216 } else {
205 return; 217 // Ref taken because printer is moved.
218 const chromeos::Printer::PpdReference& ppd_ref = printer->ppd_reference();
219 ppd_provider_->ResolvePpd(
220 ppd_ref, base::Bind(&PPDResolve, base::Passed(&printer), cb));
206 } 221 }
207
208 // Ref taken because printer is moved.
209 const chromeos::Printer::PpdReference& ppd_ref = printer->ppd_reference();
210 ppd_provider_->Resolve(ppd_ref,
211 base::Bind(&PPDResolve, base::Passed(&printer), cb));
212 }; 222 };
213 223
214 private: 224 private:
215 chromeos::PrinterPrefManager* prefs_; 225 chromeos::PrinterPrefManager* prefs_;
216 std::unique_ptr<chromeos::printing::PpdProvider> ppd_provider_; 226 scoped_refptr<chromeos::printing::PpdProvider> ppd_provider_;
217 227
218 DISALLOW_COPY_AND_ASSIGN(PrinterBackendProxyChromeos); 228 DISALLOW_COPY_AND_ASSIGN(PrinterBackendProxyChromeos);
219 }; 229 };
220 230
221 } // namespace 231 } // namespace
222 232
223 std::unique_ptr<PrinterBackendProxy> PrinterBackendProxy::Create( 233 std::unique_ptr<PrinterBackendProxy> PrinterBackendProxy::Create(
224 Profile* profile) { 234 Profile* profile) {
225 return base::MakeUnique<PrinterBackendProxyChromeos>(profile); 235 return base::MakeUnique<PrinterBackendProxyChromeos>(profile);
226 } 236 }
227 237
228 } // namespace printing 238 } // namespace printing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698