1 // Copyright 2014 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/utility/printing_handler.h"
6 
7 #include "build/build_config.h"
8 #include "chrome/common/chrome_utility_printing_messages.h"
9 #include "components/crash/core/common/crash_keys.h"
10 #include "content/public/utility/utility_thread.h"
11 #include "ipc/ipc_message.h"
12 #include "printing/backend/print_backend.h"
13 #include "printing/buildflags/buildflags.h"
14 
15 namespace printing {
16 
17 namespace {
18 
Send(IPC::Message * message)19 bool Send(IPC::Message* message) {
20   return content::UtilityThread::Get()->Send(message);
21 }
22 
ReleaseProcess()23 void ReleaseProcess() {
24   content::UtilityThread::Get()->ReleaseProcess();
25 }
26 
27 }  // namespace
28 
29 PrintingHandler::PrintingHandler() = default;
30 
31 PrintingHandler::~PrintingHandler() = default;
32 
OnMessageReceived(const IPC::Message & message)33 bool PrintingHandler::OnMessageReceived(const IPC::Message& message) {
34   bool handled = true;
35   IPC_BEGIN_MESSAGE_MAP(PrintingHandler, message)
36     IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetPrinterCapsAndDefaults,
37                         OnGetPrinterCapsAndDefaults)
38     IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetPrinterSemanticCapsAndDefaults,
39                         OnGetPrinterSemanticCapsAndDefaults)
40     IPC_MESSAGE_UNHANDLED(handled = false)
41   IPC_END_MESSAGE_MAP()
42   return handled;
43 }
44 
OnGetPrinterCapsAndDefaults(const std::string & printer_name)45 void PrintingHandler::OnGetPrinterCapsAndDefaults(
46     const std::string& printer_name) {
47   scoped_refptr<PrintBackend> print_backend =
48       PrintBackend::CreateInstance(/*locale=*/std::string());
49   PrinterCapsAndDefaults printer_info;
50 
51   crash_keys::ScopedPrinterInfo crash_key(
52       print_backend->GetPrinterDriverInfo(printer_name));
53 
54   if (print_backend->GetPrinterCapsAndDefaults(printer_name, &printer_info)) {
55     Send(new ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Succeeded(
56         printer_name, printer_info));
57   } else  {
58     Send(new ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Failed(
59         printer_name));
60   }
61   ReleaseProcess();
62 }
63 
OnGetPrinterSemanticCapsAndDefaults(const std::string & printer_name)64 void PrintingHandler::OnGetPrinterSemanticCapsAndDefaults(
65     const std::string& printer_name) {
66   scoped_refptr<PrintBackend> print_backend =
67       PrintBackend::CreateInstance(/*locale=*/std::string());
68   PrinterSemanticCapsAndDefaults printer_info;
69 
70   crash_keys::ScopedPrinterInfo crash_key(
71       print_backend->GetPrinterDriverInfo(printer_name));
72 
73   if (print_backend->GetPrinterSemanticCapsAndDefaults(printer_name,
74                                                        &printer_info)) {
75     Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Succeeded(
76         printer_name, printer_info));
77   } else {
78     Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Failed(
79         printer_name));
80   }
81   ReleaseProcess();
82 }
83 
84 }  // namespace printing
85