summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 15:00:57 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 15:00:57 +0000
commitf571a71873b7eb223c8e4405f649cde86c776de5 (patch)
tree44a589fb194402fe5ce2111885db040327c25108
parent747e4e29fbe097e0969a6578d6a6d2bf5e3acc84 (diff)
downloadchromium_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.h29
-rw-r--r--printing/backend/win_helper.h13
-rw-r--r--remoting/host/wts_session_process_launcher_win.h9
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;