From f571a71873b7eb223c8e4405f649cde86c776de5 Mon Sep 17 00:00:00 2001 From: "vitalybuka@chromium.org" Date: Fri, 2 Mar 2012 15:00:57 +0000 Subject: Added ScopedPrinterHandle TEST=it compiles BUG=none Review URL: http://codereview.chromium.org/9480026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124640 0039d316-1c4b-4281-b951-d872f2087c98 --- base/win/scoped_handle.h | 29 ++++++++++++++++++------ printing/backend/win_helper.h | 13 ++++++++++- remoting/host/wts_session_process_launcher_win.h | 9 +------- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/base/win/scoped_handle.h b/base/win/scoped_handle.h index 3bb0279..44e723f 100644 --- a/base/win/scoped_handle.h +++ b/base/win/scoped_handle.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -30,16 +30,17 @@ namespace win { // // To explicitly close the handle: // hfile.Close(); -class ScopedHandle { +template +class GenericScopedHandle { public: - ScopedHandle() : handle_(NULL) { + GenericScopedHandle() : handle_(NULL) { } - explicit ScopedHandle(HANDLE h) : handle_(NULL) { + explicit GenericScopedHandle(HANDLE h) : handle_(NULL) { Set(h); } - ~ScopedHandle() { + ~GenericScopedHandle() { Close(); } @@ -63,6 +64,11 @@ class ScopedHandle { operator HANDLE() { return handle_; } + HANDLE* Receive() { + DCHECK(!handle_) << "Handle must be NULL"; + return &handle_; + } + HANDLE Take() { // transfers ownership away from this object HANDLE h = handle_; @@ -72,7 +78,7 @@ class ScopedHandle { void Close() { if (handle_) { - if (!::CloseHandle(handle_)) { + if (!Traits::CloseHandle(handle_)) { NOTREACHED(); } handle_ = NULL; @@ -81,9 +87,18 @@ class ScopedHandle { private: HANDLE handle_; - DISALLOW_COPY_AND_ASSIGN(ScopedHandle); + DISALLOW_COPY_AND_ASSIGN(GenericScopedHandle); }; +class HandleTraits { + public: + static bool CloseHandle(HANDLE handle) { + return ::CloseHandle(handle) != FALSE; + } +}; + +typedef GenericScopedHandle ScopedHandle; + } // namespace win } // namespace base diff --git a/printing/backend/win_helper.h b/printing/backend/win_helper.h index a08e69a..11b34ee 100644 --- a/printing/backend/win_helper.h +++ b/printing/backend/win_helper.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -12,11 +12,22 @@ #include #include "base/string16.h" +#include "base/win/scoped_handle.h" #include "printing/printing_export.h" // These are helper functions for dealing with Windows Printing. namespace printing { +class PrinterHandleTraits { + public: + static bool CloseHandle(HANDLE handle) { + return ::ClosePrinter(handle) != FALSE; + } +}; + +typedef base::win::GenericScopedHandle ScopedPrinterHandle; + + // Wrapper class to wrap the XPS APIs (PTxxx APIs). This is needed because these // APIs are not available by default on XP. We could delayload prntvpt.dll but // this would mean having to add that to every binary that links with diff --git a/remoting/host/wts_session_process_launcher_win.h b/remoting/host/wts_session_process_launcher_win.h index e220210..eaf9c67 100644 --- a/remoting/host/wts_session_process_launcher_win.h +++ b/remoting/host/wts_session_process_launcher_win.h @@ -13,18 +13,11 @@ #include "base/process.h" #include "base/time.h" #include "base/timer.h" +#include "base/win/scoped_handle.h" #include "base/win/object_watcher.h" #include "remoting/host/wts_console_observer_win.h" -namespace base { -namespace win { - -class ScopedHandle; - -} // namespace win -} // namespace base - namespace remoting { class WtsConsoleMonitor; -- cgit v1.1