15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CLOUD_PRINT_VIRTUAL_DRIVER_WIN_PORT_MONITOR_PORT_MONITOR_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CLOUD_PRINT_VIRTUAL_DRIVER_WIN_PORT_MONITOR_PORT_MONITOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
11bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/process/process.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace cloud_print {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns path to be used for launching Chrome.
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetChromeExePath();
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns path to user profile to be used for launching Chrome.
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetChromeProfilePath();
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implementations for the function pointers in the MONITOR2 structure
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returned by InitializePrintMonitor2.  The prototypes and behaviors
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are as described in the MONITOR2 documentation from Microsoft.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2EnumPorts(HANDLE,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              wchar_t*,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              DWORD level,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              BYTE*  ports,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              DWORD   ports_size,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              DWORD* needed_bytes,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              DWORD* returned);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2OpenPort(HANDLE monitor_data, wchar_t*, HANDLE* handle);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2StartDocPort(HANDLE port_handle,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 wchar_t* printer_name,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 DWORD job_id,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 DWORD,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 BYTE*);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2WritePort(HANDLE port,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              BYTE*  buffer,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              DWORD   buffer_size,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              DWORD* bytes_written);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2ReadPort(HANDLE, BYTE*, DWORD, DWORD* bytes_read);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2EndDocPort(HANDLE port_handle);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2ClosePort(HANDLE port_handle);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)VOID WINAPI Monitor2Shutdown(HANDLE monitor_handle);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2XcvOpenPort(HANDLE monitor,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const wchar_t*,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                ACCESS_MASK granted_access,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                HANDLE* handle);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DWORD WINAPI Monitor2XcvDataPort(HANDLE xcv_handle,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const wchar_t* data_name,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 BYTE*,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 DWORD,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 BYTE* output_data,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 DWORD output_data_bytes,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 DWORD* output_data_bytes_needed);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI Monitor2XcvClosePort(HANDLE handle);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implementations for the function pointers in the MONITORUI structure
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returned by InitializePrintMonitorUI.  The prototypes and behaviors
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are as described in the MONITORUI documentation from Microsoft.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI MonitorUiAddPortUi(const wchar_t*,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               HWND hwnd,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const wchar_t* monitor_name,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               wchar_t**);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BOOL WINAPI MonitorUiConfigureOrDeletePortUI(const wchar_t*,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             HWND hwnd,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             const wchar_t* port_name);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const wchar_t kChromeExePath[];
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const wchar_t kChromeExePathRegValue[];
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const wchar_t kChromeProfilePathRegValue[];
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const bool kIsUnittest;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}   // namespace cloud_print
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CLOUD_PRINT_VIRTUAL_DRIVER_WIN_PORT_MONITOR_PORT_MONITOR_H_
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
92