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

Unified Diff: chrome/service/cloud_print/print_system_win.cc

Issue 3945003: Move useful printing backend code from chrome/service/cloud_print to printing... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: resolve merge conflict Created 10 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/service/cloud_print/print_system_cups.cc ('k') | chrome/service/cloud_print/printer_job_handler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/service/cloud_print/print_system_win.cc
===================================================================
--- chrome/service/cloud_print/print_system_win.cc (revision 63553)
+++ chrome/service/cloud_print/print_system_win.cc (working copy)
@@ -4,15 +4,11 @@
#include "chrome/service/cloud_print/print_system.h"
-#include <windows.h>
#include <objidl.h>
-#include <ocidl.h>
-#include <olectl.h>
#include <prntvpt.h>
#include <winspool.h>
-#include "base/lock.h"
-#include "base/file_util.h"
+#include "base/file_path.h"
#include "base/object_watcher.h"
#include "base/scoped_ptr.h"
#include "base/utf_string_conversions.h"
@@ -22,11 +18,13 @@
#include "chrome/service/service_process.h"
#include "chrome/service/service_utility_process_host.h"
#include "gfx/rect.h"
+#include "printing/backend/print_backend.h"
+#include "printing/backend/print_backend_consts.h"
+#include "printing/backend/win_helper.h"
#include "printing/native_metafile.h"
#include "printing/page_range.h"
#pragma comment(lib, "prntvpt.lib")
-#pragma comment(lib, "rpcrt4.lib")
using base::win::ScopedBstr;
using base::win::ScopedComPtr;
@@ -55,11 +53,6 @@
DISALLOW_COPY_AND_ASSIGN(DevMode);
};
-bool InitXPSModule() {
- HMODULE prntvpt_module = LoadLibrary(L"prntvpt.dll");
- return (NULL != prntvpt_module);
-}
-
inline HRESULT GetLastErrorHR() {
LONG error = GetLastError();
return HRESULT_FROM_WIN32(error);
@@ -81,19 +74,6 @@
return S_OK;
}
-HRESULT StreamOnHGlobalToString(IStream* stream, std::string* out) {
- DCHECK(stream);
- DCHECK(out);
- HGLOBAL hdata = NULL;
- HRESULT hr = GetHGlobalFromStream(stream, &hdata);
- if (SUCCEEDED(hr)) {
- DCHECK(hdata);
- ScopedHGlobal<char> locked_data(hdata);
- out->assign(locked_data.release(), locked_data.Size());
- }
- return hr;
-}
-
HRESULT PrintTicketToDevMode(const std::string& printer_name,
const std::string& print_ticket,
DevMode* dev_mode) {
@@ -209,7 +189,7 @@
watcher_.StartWatching(printer_change_, this);
}
- bool GetCurrentPrinterInfo(PrinterBasicInfo* printer_info) {
+ bool GetCurrentPrinterInfo(printing::PrinterBasicInfo* printer_info) {
DCHECK(printer_info);
if (!printer_)
return false;
@@ -256,10 +236,10 @@
class PrintSystemWin : public PrintSystem {
public:
- virtual void EnumeratePrinters(PrinterList* printer_list);
+ PrintSystemWin();
- virtual bool GetPrinterCapsAndDefaults(const std::string& printer_name,
- PrinterCapsAndDefaults* printer_info);
+ // PrintSystem implementation.
+ virtual printing::PrintBackend* GetPrintBackend();
virtual bool ValidatePrintTicket(const std::string& printer_name,
const std::string& print_ticket_data);
@@ -268,8 +248,6 @@
PlatformJobId job_id,
PrintJobDetails *job_details);
- virtual bool IsValidPrinter(const std::string& printer_name);
-
class PrintServerWatcherWin
: public PrintSystem::PrintServerWatcher,
public PrintSystemWatcherWinDelegate {
@@ -323,7 +301,8 @@
delegate_ = NULL;
return ret;
}
- virtual bool GetCurrentPrinterInfo(PrinterBasicInfo* printer_info) {
+ virtual bool GetCurrentPrinterInfo(
+ printing::PrinterBasicInfo* printer_info) {
return watcher_.GetCurrentPrinterInfo(printer_info);
}
@@ -390,7 +369,7 @@
return false;
}
- if (!InitXPSModule()) {
+ if (!printing::InitXPSModule()) {
// TODO(sanjeevr): Handle legacy proxy case (with no prntvpt.dll)
return false;
}
@@ -527,115 +506,29 @@
virtual PrintSystem::PrinterWatcher* CreatePrinterWatcher(
const std::string& printer_name);
virtual PrintSystem::JobSpooler* CreateJobSpooler();
+
+ private:
+ void Init();
+
+ scoped_refptr<printing::PrintBackend> print_backend_;
};
-void PrintSystemWin::EnumeratePrinters(PrinterList* printer_list) {
- DCHECK(printer_list);
- DWORD bytes_needed = 0;
- DWORD count_returned = 0;
- BOOL ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 2,
- NULL, 0, &bytes_needed, &count_returned);
- if (0 != bytes_needed) {
- scoped_ptr<BYTE> printer_info_buffer(new BYTE[bytes_needed]);
- ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 2,
- printer_info_buffer.get(), bytes_needed, &bytes_needed,
- &count_returned);
- DCHECK(ret);
- PRINTER_INFO_2* printer_info =
- reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get());
- for (DWORD index = 0; index < count_returned; index++) {
- PrinterBasicInfo info;
- info.printer_name = WideToUTF8(printer_info[index].pPrinterName);
- if (printer_info[index].pComment)
- info.printer_description = WideToUTF8(printer_info[index].pComment);
- info.printer_status = printer_info[index].Status;
- if (printer_info[index].pLocation)
- info.options[kLocationTagName] =
- WideToUTF8(printer_info[index].pLocation);
- if (printer_info[index].pDriverName)
- info.options[kDriverNameTagName] =
- WideToUTF8(printer_info[index].pDriverName);
- printer_list->push_back(info);
- }
- }
+PrintSystemWin::PrintSystemWin() {
+ Init();
}
-bool PrintSystemWin::GetPrinterCapsAndDefaults(
- const std::string& printer_name,
- PrinterCapsAndDefaults* printer_info) {
- if (!InitXPSModule()) {
- // TODO(sanjeevr): Handle legacy proxy case (with no prntvpt.dll)
- return false;
- }
- if (!IsValidPrinter(printer_name)) {
- return false;
- }
- DCHECK(printer_info);
- HPTPROVIDER provider = NULL;
- std::wstring printer_name_wide = UTF8ToWide(printer_name);
- HRESULT hr = PTOpenProvider(printer_name_wide.c_str(), 1, &provider);
- DCHECK(SUCCEEDED(hr));
- if (provider) {
- ScopedComPtr<IStream> print_capabilities_stream;
- hr = CreateStreamOnHGlobal(NULL, TRUE,
- print_capabilities_stream.Receive());
- DCHECK(SUCCEEDED(hr));
- if (print_capabilities_stream) {
- ScopedBstr error;
- hr = PTGetPrintCapabilities(provider, NULL, print_capabilities_stream,
- error.Receive());
- DCHECK(SUCCEEDED(hr));
- if (FAILED(hr)) {
- return false;
- }
- hr = StreamOnHGlobalToString(print_capabilities_stream.get(),
- &printer_info->printer_capabilities);
- DCHECK(SUCCEEDED(hr));
- printer_info->caps_mime_type = "text/xml";
- }
- // TODO(sanjeevr): Add ScopedPrinterHandle
- HANDLE printer_handle = NULL;
- OpenPrinter(const_cast<LPTSTR>(printer_name_wide.c_str()), &printer_handle,
- NULL);
- DCHECK(printer_handle);
- if (printer_handle) {
- DWORD devmode_size = DocumentProperties(
- NULL, printer_handle, const_cast<LPTSTR>(printer_name_wide.c_str()),
- NULL, NULL, 0);
- DCHECK(0 != devmode_size);
- scoped_ptr<BYTE> devmode_out_buffer(new BYTE[devmode_size]);
- DEVMODE* devmode_out =
- reinterpret_cast<DEVMODE*>(devmode_out_buffer.get());
- DocumentProperties(
- NULL, printer_handle, const_cast<LPTSTR>(printer_name_wide.c_str()),
- devmode_out, NULL, DM_OUT_BUFFER);
- ScopedComPtr<IStream> printer_defaults_stream;
- hr = CreateStreamOnHGlobal(NULL, TRUE,
- printer_defaults_stream.Receive());
- DCHECK(SUCCEEDED(hr));
- if (printer_defaults_stream) {
- hr = PTConvertDevModeToPrintTicket(provider, devmode_size,
- devmode_out, kPTJobScope,
- printer_defaults_stream);
- DCHECK(SUCCEEDED(hr));
- if (SUCCEEDED(hr)) {
- hr = StreamOnHGlobalToString(printer_defaults_stream.get(),
- &printer_info->printer_defaults);
- DCHECK(SUCCEEDED(hr));
- printer_info->defaults_mime_type = "text/xml";
- }
- }
- ClosePrinter(printer_handle);
- }
- PTCloseProvider(provider);
- }
- return true;
+void PrintSystemWin::Init() {
+ print_backend_ = printing::PrintBackend::CreateInstance(NULL);
}
+printing::PrintBackend* PrintSystemWin::GetPrintBackend() {
+ return print_backend_;
+}
+
bool PrintSystemWin::ValidatePrintTicket(
const std::string& printer_name,
const std::string& print_ticket_data) {
- if (!InitXPSModule()) {
+ if (!printing::InitXPSModule()) {
// TODO(sanjeevr): Handle legacy proxy case (with no prntvpt.dll)
return false;
}
@@ -712,19 +605,6 @@
return ret;
}
-bool PrintSystemWin::IsValidPrinter(const std::string& printer_name) {
- std::wstring printer_name_wide = UTF8ToWide(printer_name);
- HANDLE printer_handle = NULL;
- OpenPrinter(const_cast<LPTSTR>(printer_name_wide.c_str()), &printer_handle,
- NULL);
- bool ret = false;
- if (printer_handle) {
- ret = true;
- ClosePrinter(printer_handle);
- }
- return ret;
-}
-
PrintSystem::PrintServerWatcher*
PrintSystemWin::CreatePrintServerWatcher() {
return new PrintServerWatcherWin();
@@ -760,4 +640,3 @@
}
} // namespace cloud_print
-
« no previous file with comments | « chrome/service/cloud_print/print_system_cups.cc ('k') | chrome/service/cloud_print/printer_job_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698