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

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

Issue 2604923002: Use TaskScheduler instead of WorkerPool in extension_printer_handler.cc. (Closed)
Patch Set: explicit Created 3 years, 11 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/extension_printer_handler.h" 5 #include "chrome/browser/ui/webui/print_preview/extension_printer_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/files/file.h" 12 #include "base/files/file.h"
13 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
14 #include "base/files/file_util.h" 14 #include "base/files/file_util.h"
15 #include "base/location.h" 15 #include "base/location.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
17 #include "base/memory/ref_counted_memory.h" 17 #include "base/memory/ref_counted_memory.h"
18 #include "base/strings/string_split.h" 18 #include "base/strings/string_split.h"
19 #include "base/task_runner_util.h" 19 #include "base/task_scheduler/post_task.h"
20 #include "chrome/browser/printing/pwg_raster_converter.h" 20 #include "chrome/browser/printing/pwg_raster_converter.h"
21 #include "components/cloud_devices/common/cloud_device_description.h" 21 #include "components/cloud_devices/common/cloud_device_description.h"
22 #include "components/cloud_devices/common/printer_description.h" 22 #include "components/cloud_devices/common/printer_description.h"
23 #include "device/base/device_client.h" 23 #include "device/base/device_client.h"
24 #include "device/usb/usb_device.h" 24 #include "device/usb/usb_device.h"
25 #include "device/usb/usb_service.h" 25 #include "device/usb/usb_service.h"
26 #include "extensions/browser/api/device_permissions_manager.h" 26 #include "extensions/browser/api/device_permissions_manager.h"
27 #include "extensions/browser/api/printer_provider/printer_provider_api.h" 27 #include "extensions/browser/api/printer_provider/printer_provider_api.h"
28 #include "extensions/browser/api/printer_provider/printer_provider_api_factory.h " 28 #include "extensions/browser/api/printer_provider/printer_provider_api_factory.h "
29 #include "extensions/browser/api/printer_provider/printer_provider_print_job.h" 29 #include "extensions/browser/api/printer_provider/printer_provider_print_job.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 UpdateJobFileInfoOnWorkerThread( 62 UpdateJobFileInfoOnWorkerThread(
63 const base::FilePath& raster_path, 63 const base::FilePath& raster_path,
64 std::unique_ptr<extensions::PrinterProviderPrintJob> job) { 64 std::unique_ptr<extensions::PrinterProviderPrintJob> job) {
65 if (base::GetFileInfo(raster_path, &job->file_info)) 65 if (base::GetFileInfo(raster_path, &job->file_info))
66 job->document_path = raster_path; 66 job->document_path = raster_path;
67 return job; 67 return job;
68 } 68 }
69 69
70 // Callback to PWG raster conversion. 70 // Callback to PWG raster conversion.
71 // Posts a task to update print job with info about file containing converted 71 // Posts a task to update print job with info about file containing converted
72 // PWG raster data. The task is posted to |slow_task_runner|. 72 // PWG raster data.
73 void UpdateJobFileInfo( 73 void UpdateJobFileInfo(
74 std::unique_ptr<extensions::PrinterProviderPrintJob> job, 74 std::unique_ptr<extensions::PrinterProviderPrintJob> job,
75 const scoped_refptr<base::TaskRunner>& slow_task_runner,
76 const ExtensionPrinterHandler::PrintJobCallback& callback, 75 const ExtensionPrinterHandler::PrintJobCallback& callback,
77 bool success, 76 bool success,
78 const base::FilePath& pwg_file_path) { 77 const base::FilePath& pwg_file_path) {
79 if (!success) { 78 if (!success) {
80 callback.Run(std::move(job)); 79 callback.Run(std::move(job));
81 return; 80 return;
82 } 81 }
83 82
84 base::PostTaskAndReplyWithResult( 83 base::PostTaskWithTraitsAndReplyWithResult(
85 slow_task_runner.get(), FROM_HERE, 84 FROM_HERE, base::TaskTraits()
85 .WithShutdownBehavior(
86 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)
87 .MayBlock(),
86 base::Bind(&UpdateJobFileInfoOnWorkerThread, pwg_file_path, 88 base::Bind(&UpdateJobFileInfoOnWorkerThread, pwg_file_path,
87 base::Passed(&job)), 89 base::Passed(&job)),
88 callback); 90 callback);
89 } 91 }
90 92
91 bool HasUsbPrinterProviderPermissions(const Extension* extension) { 93 bool HasUsbPrinterProviderPermissions(const Extension* extension) {
92 return extension->permissions_data() && 94 return extension->permissions_data() &&
93 extension->permissions_data()->HasAPIPermission( 95 extension->permissions_data()->HasAPIPermission(
94 extensions::APIPermission::kPrinterProvider) && 96 extensions::APIPermission::kPrinterProvider) &&
95 extension->permissions_data()->HasAPIPermission( 97 extension->permissions_data()->HasAPIPermission(
(...skipping 19 matching lines...) Expand all
115 return false; 117 return false;
116 118
117 *extension_id = components[1]; 119 *extension_id = components[1];
118 *device_guid = components[2]; 120 *device_guid = components[2];
119 return true; 121 return true;
120 } 122 }
121 123
122 } // namespace 124 } // namespace
123 125
124 ExtensionPrinterHandler::ExtensionPrinterHandler( 126 ExtensionPrinterHandler::ExtensionPrinterHandler(
125 content::BrowserContext* browser_context, 127 content::BrowserContext* browser_context)
126 const scoped_refptr<base::TaskRunner>& slow_task_runner) 128 : browser_context_(browser_context), weak_ptr_factory_(this) {}
127 : browser_context_(browser_context),
128 slow_task_runner_(slow_task_runner),
129 weak_ptr_factory_(this) {
130 }
131 129
132 ExtensionPrinterHandler::~ExtensionPrinterHandler() { 130 ExtensionPrinterHandler::~ExtensionPrinterHandler() {
133 } 131 }
134 132
135 void ExtensionPrinterHandler::Reset() { 133 void ExtensionPrinterHandler::Reset() {
136 // TODO(tbarzic): Keep track of pending request ids issued by |this| and 134 // TODO(tbarzic): Keep track of pending request ids issued by |this| and
137 // cancel them from here. 135 // cancel them from here.
138 pending_enumeration_count_ = 0; 136 pending_enumeration_count_ = 0;
139 weak_ptr_factory_.InvalidateWeakPtrs(); 137 weak_ptr_factory_.InvalidateWeakPtrs();
140 } 138 }
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 const gfx::Size& page_size, 265 const gfx::Size& page_size,
268 std::unique_ptr<extensions::PrinterProviderPrintJob> job, 266 std::unique_ptr<extensions::PrinterProviderPrintJob> job,
269 const ExtensionPrinterHandler::PrintJobCallback& callback) { 267 const ExtensionPrinterHandler::PrintJobCallback& callback) {
270 if (!pwg_raster_converter_) { 268 if (!pwg_raster_converter_) {
271 pwg_raster_converter_ = PWGRasterConverter::CreateDefault(); 269 pwg_raster_converter_ = PWGRasterConverter::CreateDefault();
272 } 270 }
273 pwg_raster_converter_->Start( 271 pwg_raster_converter_->Start(
274 data.get(), 272 data.get(),
275 PWGRasterConverter::GetConversionSettings(printer_description, page_size), 273 PWGRasterConverter::GetConversionSettings(printer_description, page_size),
276 PWGRasterConverter::GetBitmapSettings(printer_description, ticket), 274 PWGRasterConverter::GetBitmapSettings(printer_description, ticket),
277 base::Bind(&UpdateJobFileInfo, base::Passed(&job), slow_task_runner_, 275 base::Bind(&UpdateJobFileInfo, base::Passed(&job), callback));
278 callback));
279 } 276 }
280 277
281 void ExtensionPrinterHandler::DispatchPrintJob( 278 void ExtensionPrinterHandler::DispatchPrintJob(
282 const PrinterHandler::PrintCallback& callback, 279 const PrinterHandler::PrintCallback& callback,
283 std::unique_ptr<extensions::PrinterProviderPrintJob> print_job) { 280 std::unique_ptr<extensions::PrinterProviderPrintJob> print_job) {
284 if (print_job->document_path.empty() && !print_job->document_bytes) { 281 if (print_job->document_path.empty() && !print_job->document_bytes) {
285 WrapPrintCallback(callback, false, kInvalidDataPrintError); 282 WrapPrintCallback(callback, false, kInvalidDataPrintError);
286 return; 283 return;
287 } 284 }
288 285
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 .Set("provisional", true) 364 .Set("provisional", true)
368 .Build()); 365 .Build());
369 } 366 }
370 } 367 }
371 } 368 }
372 369
373 DCHECK_GT(pending_enumeration_count_, 0); 370 DCHECK_GT(pending_enumeration_count_, 0);
374 pending_enumeration_count_--; 371 pending_enumeration_count_--;
375 callback.Run(*printer_list.Build().get(), pending_enumeration_count_ == 0); 372 callback.Run(*printer_list.Build().get(), pending_enumeration_count_ == 0);
376 } 373 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698