| Index: base/win/scoped_handle.h
|
| diff --git a/base/win/scoped_handle.h b/base/win/scoped_handle.h
|
| deleted file mode 100644
|
| index 97fd7a5c79a5884b7c9ce6852987bdac959f0ac8..0000000000000000000000000000000000000000
|
| --- a/base/win/scoped_handle.h
|
| +++ /dev/null
|
| @@ -1,177 +0,0 @@
|
| -// 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.
|
| -
|
| -#ifndef BASE_WIN_SCOPED_HANDLE_H_
|
| -#define BASE_WIN_SCOPED_HANDLE_H_
|
| -
|
| -#include <windows.h>
|
| -
|
| -#include "base/base_export.h"
|
| -#include "base/basictypes.h"
|
| -#include "base/location.h"
|
| -#include "base/logging.h"
|
| -#include "base/move.h"
|
| -
|
| -// TODO(rvargas): remove this with the rest of the verifier.
|
| -#if defined(COMPILER_MSVC)
|
| -#include <intrin.h>
|
| -#define BASE_WIN_GET_CALLER _ReturnAddress()
|
| -#elif defined(COMPILER_GCC)
|
| -#define BASE_WIN_GET_CALLER __builtin_extract_return_addr(\\
|
| - __builtin_return_address(0))
|
| -#endif
|
| -
|
| -namespace base {
|
| -namespace win {
|
| -
|
| -// Generic wrapper for raw handles that takes care of closing handles
|
| -// automatically. The class interface follows the style of
|
| -// the ScopedFILE class with one addition:
|
| -// - IsValid() method can tolerate multiple invalid handle values such as NULL
|
| -// and INVALID_HANDLE_VALUE (-1) for Win32 handles.
|
| -template <class Traits, class Verifier>
|
| -class GenericScopedHandle {
|
| - MOVE_ONLY_TYPE_FOR_CPP_03(GenericScopedHandle, RValue)
|
| -
|
| - public:
|
| - typedef typename Traits::Handle Handle;
|
| -
|
| - GenericScopedHandle() : handle_(Traits::NullHandle()) {}
|
| -
|
| - explicit GenericScopedHandle(Handle handle) : handle_(Traits::NullHandle()) {
|
| - Set(handle);
|
| - }
|
| -
|
| - // Move constructor for C++03 move emulation of this type.
|
| - GenericScopedHandle(RValue other) : handle_(Traits::NullHandle()) {
|
| - Set(other.object->Take());
|
| - }
|
| -
|
| - ~GenericScopedHandle() {
|
| - Close();
|
| - }
|
| -
|
| - bool IsValid() const {
|
| - return Traits::IsHandleValid(handle_);
|
| - }
|
| -
|
| - // Move operator= for C++03 move emulation of this type.
|
| - GenericScopedHandle& operator=(RValue other) {
|
| - if (this != other.object) {
|
| - Set(other.object->Take());
|
| - }
|
| - return *this;
|
| - }
|
| -
|
| - void Set(Handle handle) {
|
| - if (handle_ != handle) {
|
| - Close();
|
| -
|
| - if (Traits::IsHandleValid(handle)) {
|
| - handle_ = handle;
|
| - Verifier::StartTracking(handle, this, BASE_WIN_GET_CALLER,
|
| - tracked_objects::GetProgramCounter());
|
| - }
|
| - }
|
| - }
|
| -
|
| - Handle Get() const {
|
| - return handle_;
|
| - }
|
| -
|
| - // Transfers ownership away from this object.
|
| - Handle Take() {
|
| - Handle temp = handle_;
|
| - handle_ = Traits::NullHandle();
|
| - if (Traits::IsHandleValid(temp)) {
|
| - Verifier::StopTracking(temp, this, BASE_WIN_GET_CALLER,
|
| - tracked_objects::GetProgramCounter());
|
| - }
|
| - return temp;
|
| - }
|
| -
|
| - // Explicitly closes the owned handle.
|
| - void Close() {
|
| - if (Traits::IsHandleValid(handle_)) {
|
| - Verifier::StopTracking(handle_, this, BASE_WIN_GET_CALLER,
|
| - tracked_objects::GetProgramCounter());
|
| -
|
| - Traits::CloseHandle(handle_);
|
| - handle_ = Traits::NullHandle();
|
| - }
|
| - }
|
| -
|
| - private:
|
| - Handle handle_;
|
| -};
|
| -
|
| -#undef BASE_WIN_GET_CALLER
|
| -
|
| -// The traits class for Win32 handles that can be closed via CloseHandle() API.
|
| -class HandleTraits {
|
| - public:
|
| - typedef HANDLE Handle;
|
| -
|
| - // Closes the handle.
|
| - static bool BASE_EXPORT CloseHandle(HANDLE handle);
|
| -
|
| - // Returns true if the handle value is valid.
|
| - static bool IsHandleValid(HANDLE handle) {
|
| - return handle != NULL && handle != INVALID_HANDLE_VALUE;
|
| - }
|
| -
|
| - // Returns NULL handle value.
|
| - static HANDLE NullHandle() {
|
| - return NULL;
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(HandleTraits);
|
| -};
|
| -
|
| -// Do-nothing verifier.
|
| -class DummyVerifierTraits {
|
| - public:
|
| - typedef HANDLE Handle;
|
| -
|
| - static void StartTracking(HANDLE handle, const void* owner,
|
| - const void* pc1, const void* pc2) {}
|
| - static void StopTracking(HANDLE handle, const void* owner,
|
| - const void* pc1, const void* pc2) {}
|
| -
|
| - private:
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(DummyVerifierTraits);
|
| -};
|
| -
|
| -// Performs actual run-time tracking.
|
| -class BASE_EXPORT VerifierTraits {
|
| - public:
|
| - typedef HANDLE Handle;
|
| -
|
| - static void StartTracking(HANDLE handle, const void* owner,
|
| - const void* pc1, const void* pc2);
|
| - static void StopTracking(HANDLE handle, const void* owner,
|
| - const void* pc1, const void* pc2);
|
| -
|
| - private:
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(VerifierTraits);
|
| -};
|
| -
|
| -typedef GenericScopedHandle<HandleTraits, VerifierTraits> ScopedHandle;
|
| -
|
| -// This function may be called by the embedder to disable the use of
|
| -// VerifierTraits at runtime. It has no effect if DummyVerifierTraits is used
|
| -// for ScopedHandle.
|
| -void BASE_EXPORT DisableHandleVerifier();
|
| -
|
| -// This should be called whenever the OS is closing a handle, if extended
|
| -// verification of improper handle closing is desired. If |handle| is being
|
| -// tracked by the handle verifier and ScopedHandle is not the one closing it,
|
| -// a CHECK is generated.
|
| -void BASE_EXPORT OnHandleBeingClosed(HANDLE handle);
|
| -
|
| -} // namespace win
|
| -} // namespace base
|
| -
|
| -#endif // BASE_WIN_SCOPED_HANDLE_H_
|
|
|