diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-02 15:00:57 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-02 15:00:57 +0000 |
commit | f571a71873b7eb223c8e4405f649cde86c776de5 (patch) | |
tree | 44a589fb194402fe5ce2111885db040327c25108 | |
parent | 747e4e29fbe097e0969a6578d6a6d2bf5e3acc84 (diff) | |
download | chromium_src-f571a71873b7eb223c8e4405f649cde86c776de5.zip chromium_src-f571a71873b7eb223c8e4405f649cde86c776de5.tar.gz chromium_src-f571a71873b7eb223c8e4405f649cde86c776de5.tar.bz2 |
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
-rw-r--r-- | base/win/scoped_handle.h | 29 | ||||
-rw-r--r-- | printing/backend/win_helper.h | 13 | ||||
-rw-r--r-- | 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 Traits> +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<HandleTraits> 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 <xpsprint.h> #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<PrinterHandleTraits> 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; |