Remove some more of base/win Change-Id: I62154119766de036b63a91af0bdd42765c2a58d8 Reviewed-on: https://gn-review.googlesource.com/1701 Reviewed-by: Brett Wilson <brettw@chromium.org> Commit-Queue: Scott Graham <scottmg@chromium.org>
diff --git a/base/win/current_module.h b/base/win/current_module.h deleted file mode 100644 index ee141db..0000000 --- a/base/win/current_module.h +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2016 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_CURRENT_MODULE_H_ -#define BASE_WIN_CURRENT_MODULE_H_ - -#include <windows.h> - -// http://blogs.msdn.com/oldnewthing/archive/2004/10/25/247180.aspx -extern "C" IMAGE_DOS_HEADER __ImageBase; - -// Returns the HMODULE of the dll the macro was expanded in. -// Only use in cc files, not in h files. -#define CURRENT_MODULE() reinterpret_cast<HMODULE>(&__ImageBase) - -#endif // BASE_WIN_CURRENT_MODULE_H_
diff --git a/base/win/event_trace_consumer.h b/base/win/event_trace_consumer.h deleted file mode 100644 index 93e8a24..0000000 --- a/base/win/event_trace_consumer.h +++ /dev/null
@@ -1,145 +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. -// -// Declaration of a Windows event trace consumer base class. -#ifndef BASE_WIN_EVENT_TRACE_CONSUMER_H_ -#define BASE_WIN_EVENT_TRACE_CONSUMER_H_ - -#include <evntrace.h> -#include <stddef.h> -#include <windows.h> -#include <wmistr.h> -#include <vector> - -#include "base/macros.h" - -namespace base { -namespace win { - -// This class is a base class that makes it easier to consume events -// from realtime or file sessions. Concrete consumers need to subclass -// a specialization of this class and override the ProcessEvent and/or -// the ProcessBuffer methods to implement the event consumption logic. -// Usage might look like: -// class MyConsumer: public EtwTraceConsumerBase<MyConsumer, 1> { -// protected: -// static VOID WINAPI ProcessEvent(PEVENT_TRACE event); -// }; -// -// MyConsumer consumer; -// consumer.OpenFileSession(file_path); -// consumer.Consume(); -template <class ImplClass> -class EtwTraceConsumerBase { - public: - // Constructs a closed consumer. - EtwTraceConsumerBase() {} - - ~EtwTraceConsumerBase() { Close(); } - - // Opens the named realtime session, which must be existent. - // Note: You can use OpenRealtimeSession or OpenFileSession - // to open as many as MAXIMUM_WAIT_OBJECTS (63) sessions at - // any one time, though only one of them may be a realtime - // session. - HRESULT OpenRealtimeSession(const wchar_t* session_name); - - // Opens the event trace log in "file_name", which must be a full or - // relative path to an existing event trace log file. - // Note: You can use OpenRealtimeSession or OpenFileSession - // to open as many as kNumSessions at any one time. - HRESULT OpenFileSession(const wchar_t* file_name); - - // Consume all open sessions from beginning to end. - HRESULT Consume(); - - // Close all open sessions. - HRESULT Close(); - - protected: - // Override in subclasses to handle events. - static void ProcessEvent(EVENT_TRACE* event) {} - // Override in subclasses to handle buffers. - static bool ProcessBuffer(EVENT_TRACE_LOGFILE* buffer) { - return true; // keep going - } - - protected: - // Currently open sessions. - std::vector<TRACEHANDLE> trace_handles_; - - private: - // These delegate to ImplClass callbacks with saner signatures. - static void WINAPI ProcessEventCallback(EVENT_TRACE* event) { - ImplClass::ProcessEvent(event); - } - static ULONG WINAPI ProcessBufferCallback(PEVENT_TRACE_LOGFILE buffer) { - return ImplClass::ProcessBuffer(buffer); - } - - DISALLOW_COPY_AND_ASSIGN(EtwTraceConsumerBase); -}; - -template <class ImplClass> -inline HRESULT EtwTraceConsumerBase<ImplClass>::OpenRealtimeSession( - const wchar_t* session_name) { - EVENT_TRACE_LOGFILE logfile = {}; - logfile.LoggerName = const_cast<wchar_t*>(session_name); - logfile.LogFileMode = EVENT_TRACE_REAL_TIME_MODE; - logfile.BufferCallback = &ProcessBufferCallback; - logfile.EventCallback = &ProcessEventCallback; - logfile.Context = this; - TRACEHANDLE trace_handle = ::OpenTrace(&logfile); - if (reinterpret_cast<TRACEHANDLE>(INVALID_HANDLE_VALUE) == trace_handle) - return HRESULT_FROM_WIN32(::GetLastError()); - - trace_handles_.push_back(trace_handle); - return S_OK; -} - -template <class ImplClass> -inline HRESULT EtwTraceConsumerBase<ImplClass>::OpenFileSession( - const wchar_t* file_name) { - EVENT_TRACE_LOGFILE logfile = {}; - logfile.LogFileName = const_cast<wchar_t*>(file_name); - logfile.BufferCallback = &ProcessBufferCallback; - logfile.EventCallback = &ProcessEventCallback; - logfile.Context = this; - TRACEHANDLE trace_handle = ::OpenTrace(&logfile); - if (reinterpret_cast<TRACEHANDLE>(INVALID_HANDLE_VALUE) == trace_handle) - return HRESULT_FROM_WIN32(::GetLastError()); - - trace_handles_.push_back(trace_handle); - return S_OK; -} - -template <class ImplClass> -inline HRESULT EtwTraceConsumerBase<ImplClass>::Consume() { - ULONG err = - ::ProcessTrace(&trace_handles_[0], - static_cast<ULONG>(trace_handles_.size()), NULL, NULL); - return HRESULT_FROM_WIN32(err); -} - -template <class ImplClass> -inline HRESULT EtwTraceConsumerBase<ImplClass>::Close() { - HRESULT hr = S_OK; - for (size_t i = 0; i < trace_handles_.size(); ++i) { - if (NULL != trace_handles_[i]) { - ULONG ret = ::CloseTrace(trace_handles_[i]); - trace_handles_[i] = NULL; - - if (FAILED(HRESULT_FROM_WIN32(ret))) - hr = HRESULT_FROM_WIN32(ret); - } - } - trace_handles_.clear(); - - return hr; -} - -} // namespace win -} // namespace base - -#endif // BASE_WIN_EVENT_TRACE_CONSUMER_H_
diff --git a/base/win/patch_util.cc b/base/win/patch_util.cc deleted file mode 100644 index c53a8e4..0000000 --- a/base/win/patch_util.cc +++ /dev/null
@@ -1,52 +0,0 @@ -// Copyright 2017 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. - -#include "base/win/patch_util.h" - -#include "base/logging.h" - -namespace base { -namespace win { -namespace internal { - -DWORD ModifyCode(void* destination, const void* source, int length) { - if ((NULL == destination) || (NULL == source) || (0 == length)) { - NOTREACHED(); - return ERROR_INVALID_PARAMETER; - } - - // Change the page protection so that we can write. - MEMORY_BASIC_INFORMATION memory_info; - DWORD error = NO_ERROR; - DWORD old_page_protection = 0; - - if (!VirtualQuery(destination, &memory_info, sizeof(memory_info))) { - error = GetLastError(); - return error; - } - - DWORD is_executable = (PAGE_EXECUTE | PAGE_EXECUTE_READ | - PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY) & - memory_info.Protect; - - if (VirtualProtect(destination, length, - is_executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE, - &old_page_protection)) { - // Write the data. - CopyMemory(destination, source, length); - - // Restore the old page protection. - error = ERROR_SUCCESS; - VirtualProtect(destination, length, old_page_protection, - &old_page_protection); - } else { - error = GetLastError(); - } - - return error; -} - -} // namespace internal -} // namespace win -} // namespace base
diff --git a/base/win/patch_util.h b/base/win/patch_util.h deleted file mode 100644 index 6668273..0000000 --- a/base/win/patch_util.h +++ /dev/null
@@ -1,23 +0,0 @@ -// Copyright 2017 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_PATCH_UTIL_H_ -#define BASE_WIN_PATCH_UTIL_H_ - -#include <windows.h> - -namespace base { -namespace win { -namespace internal { - -// Copies |length| bytes from |source| to |destination|, temporarily setting -// |destination| to writable. Returns a Windows error code or NO_ERROR if -// successful. -DWORD ModifyCode(void* destination, const void* source, int length); - -} // namespace internal -} // namespace win -} // namespace base - -#endif // BASE_WIN_PATCH_UTIL_H_
diff --git a/base/win/scoped_co_mem.h b/base/win/scoped_co_mem.h deleted file mode 100644 index 3c31f3f..0000000 --- a/base/win/scoped_co_mem.h +++ /dev/null
@@ -1,62 +0,0 @@ -// Copyright (c) 2011 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_CO_MEM_H_ -#define BASE_WIN_SCOPED_CO_MEM_H_ - -#include <objbase.h> - -#include "base/logging.h" -#include "base/macros.h" - -namespace base { -namespace win { - -// Simple scoped memory releaser class for COM allocated memory. -// Example: -// base::win::ScopedCoMem<ITEMIDLIST> file_item; -// SHGetSomeInfo(&file_item, ...); -// ... -// return; <-- memory released -template <typename T> -class ScopedCoMem { - public: - ScopedCoMem() : mem_ptr_(NULL) {} - ~ScopedCoMem() { Reset(NULL); } - - T** operator&() { // NOLINT - DCHECK(mem_ptr_ == NULL); // To catch memory leaks. - return &mem_ptr_; - } - - operator T*() { return mem_ptr_; } - - T* operator->() { - DCHECK(mem_ptr_ != NULL); - return mem_ptr_; - } - - const T* operator->() const { - DCHECK(mem_ptr_ != NULL); - return mem_ptr_; - } - - void Reset(T* ptr) { - if (mem_ptr_) - CoTaskMemFree(mem_ptr_); - mem_ptr_ = ptr; - } - - T* get() const { return mem_ptr_; } - - private: - T* mem_ptr_; - - DISALLOW_COPY_AND_ASSIGN(ScopedCoMem); -}; - -} // namespace win -} // namespace base - -#endif // BASE_WIN_SCOPED_CO_MEM_H_
diff --git a/base/win/scoped_gdi_object.h b/base/win/scoped_gdi_object.h deleted file mode 100644 index 9d8465b..0000000 --- a/base/win/scoped_gdi_object.h +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright (c) 2010 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_GDI_OBJECT_H_ -#define BASE_WIN_SCOPED_GDI_OBJECT_H_ - -#include <windows.h> - -#include "base/scoped_generic.h" - -namespace base { -namespace win { - -namespace internal { - -template <class T> -struct ScopedGDIObjectTraits { - static T InvalidValue() { return nullptr; } - static void Free(T object) { DeleteObject(object); } -}; - -// An explicit specialization for HICON because we have to call DestroyIcon() -// instead of DeleteObject() for HICON. -template <> -void inline ScopedGDIObjectTraits<HICON>::Free(HICON icon) { - DestroyIcon(icon); -} - -} // namespace internal - -// Like ScopedHandle but for GDI objects. -template <class T> -using ScopedGDIObject = ScopedGeneric<T, internal::ScopedGDIObjectTraits<T>>; - -// Typedefs for some common use cases. -typedef ScopedGDIObject<HBITMAP> ScopedBitmap; -typedef ScopedGDIObject<HRGN> ScopedRegion; -typedef ScopedGDIObject<HFONT> ScopedHFONT; -typedef ScopedGDIObject<HICON> ScopedHICON; - -} // namespace win -} // namespace base - -#endif // BASE_WIN_SCOPED_GDI_OBJECT_H_
diff --git a/base/win/scoped_handle_test_dll.cc b/base/win/scoped_handle_test_dll.cc deleted file mode 100644 index 9603d68..0000000 --- a/base/win/scoped_handle_test_dll.cc +++ /dev/null
@@ -1,120 +0,0 @@ -// Copyright 2016 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. - -#include <windows.h> - -#include <vector> - -#include "base/win/base_win_buildflags.h" -#include "base/win/current_module.h" -#include "base/win/scoped_handle.h" -#include "base/win/scoped_handle_verifier.h" - -namespace base { -namespace win { -namespace testing { - -extern "C" bool __declspec(dllexport) RunTest(); - -namespace { - -struct ThreadParams { - HANDLE ready_event; - HANDLE start_event; -}; - -// Note, this must use all native functions to avoid instantiating the -// ActiveVerifier. e.g. can't use base::Thread or even base::PlatformThread. -DWORD __stdcall ThreadFunc(void* params) { - ThreadParams* thread_params = reinterpret_cast<ThreadParams*>(params); - HANDLE handle = ::CreateMutex(nullptr, false, nullptr); - - ::SetEvent(thread_params->ready_event); - ::WaitForSingleObject(thread_params->start_event, INFINITE); - ScopedHandle handle_holder(handle); - return 0; -} - -bool InternalRunThreadTest() { - std::vector<HANDLE> threads_; - // From manual testing, the bug fixed by crrev.com/678736a starts reliably - // causing handle verifier asserts to trigger at around 100 threads, so make - // it 200 to be sure to detect any future regressions. - const size_t kNumThreads = 200; - - // bManualReset is set to true to allow signalling multiple threads. - HANDLE start_event = ::CreateEvent(nullptr, true, false, nullptr); - if (!start_event) - return false; - - HANDLE ready_event = CreateEvent(nullptr, false, false, nullptr); - if (!ready_event) - return false; - - ThreadParams thread_params = {ready_event, start_event}; - - for (size_t i = 0; i < kNumThreads; i++) { - HANDLE thread_handle = - ::CreateThread(nullptr, 0, ThreadFunc, - reinterpret_cast<void*>(&thread_params), 0, nullptr); - if (!thread_handle) - break; - ::WaitForSingleObject(ready_event, INFINITE); - threads_.push_back(thread_handle); - } - - ::CloseHandle(ready_event); - - if (threads_.size() != kNumThreads) { - for (auto* thread : threads_) - ::CloseHandle(thread); - ::CloseHandle(start_event); - return false; - } - - ::SetEvent(start_event); - ::CloseHandle(start_event); - for (auto* thread : threads_) { - ::WaitForSingleObject(thread, INFINITE); - ::CloseHandle(thread); - } - - return true; -} - -bool InternalRunLocationTest() { - // Create a new handle and then set LastError again. - HANDLE handle = ::CreateMutex(nullptr, false, nullptr); - if (!handle) - return false; - ScopedHandle handle_holder(handle); - - HMODULE verifier_module = - base::win::internal::GetHandleVerifierModuleForTesting(); - if (!verifier_module) - return false; - - // Get my module - HMODULE my_module = CURRENT_MODULE(); - if (!my_module) - return false; - - HMODULE main_module = ::GetModuleHandle(NULL); - - // In a non-component build, ActiveVerifier should always be created in the - // version of base linked with the main executable. - if (verifier_module == my_module || verifier_module != main_module) - return false; - return true; -} - -} // namespace - -bool RunTest() { - return InternalRunThreadTest() && InternalRunLocationTest(); -} - -} // namespace testing -} // namespace win -} // namespace base
diff --git a/base/win/scoped_hdc.h b/base/win/scoped_hdc.h deleted file mode 100644 index 226b0b9..0000000 --- a/base/win/scoped_hdc.h +++ /dev/null
@@ -1,69 +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_HDC_H_ -#define BASE_WIN_SCOPED_HDC_H_ - -#include <windows.h> - -#include "base/logging.h" -#include "base/macros.h" -#include "base/win/scoped_handle.h" - -namespace base { -namespace win { - -// Like ScopedHandle but for HDC. Only use this on HDCs returned from -// GetDC. -class ScopedGetDC { - public: - explicit ScopedGetDC(HWND hwnd) : hwnd_(hwnd), hdc_(GetDC(hwnd)) { - if (hwnd_) { - DCHECK(IsWindow(hwnd_)); - DCHECK(hdc_); - } else { - // If GetDC(NULL) returns NULL, something really bad has happened, like - // GDI handle exhaustion. In this case Chrome is going to behave badly no - // matter what, so we may as well just force a crash now. - if (!hdc_) - base::debug::CollectGDIUsageAndDie(); - } - } - - ~ScopedGetDC() { - if (hdc_) - ReleaseDC(hwnd_, hdc_); - } - - operator HDC() { return hdc_; } - - private: - HWND hwnd_; - HDC hdc_; - - DISALLOW_COPY_AND_ASSIGN(ScopedGetDC); -}; - -// Like ScopedHandle but for HDC. Only use this on HDCs returned from -// CreateCompatibleDC, CreateDC and CreateIC. -class CreateDCTraits { - public: - typedef HDC Handle; - - static bool CloseHandle(HDC handle) { return ::DeleteDC(handle) != FALSE; } - - static bool IsHandleValid(HDC handle) { return handle != NULL; } - - static HDC NullHandle() { return NULL; } - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(CreateDCTraits); -}; - -typedef GenericScopedHandle<CreateDCTraits, DummyVerifierTraits> ScopedCreateDC; - -} // namespace win -} // namespace base - -#endif // BASE_WIN_SCOPED_HDC_H_
diff --git a/base/win/scoped_hglobal.h b/base/win/scoped_hglobal.h deleted file mode 100644 index 2fa8aaa..0000000 --- a/base/win/scoped_hglobal.h +++ /dev/null
@@ -1,51 +0,0 @@ -// Copyright (c) 2010 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_HGLOBAL_H_ -#define BASE_WIN_SCOPED_HGLOBAL_H_ - -#include <stddef.h> -#include <windows.h> - -#include "base/macros.h" - -namespace base { -namespace win { - -// Like ScopedHandle except for HGLOBAL. -template <class T> -class ScopedHGlobal { - public: - explicit ScopedHGlobal(HGLOBAL glob) : glob_(glob) { - data_ = static_cast<T>(GlobalLock(glob_)); - } - ~ScopedHGlobal() { GlobalUnlock(glob_); } - - T get() { return data_; } - - size_t Size() const { return GlobalSize(glob_); } - - T operator->() const { - assert(data_ != 0); - return data_; - } - - T release() { - T data = data_; - data_ = NULL; - return data; - } - - private: - HGLOBAL glob_; - - T data_; - - DISALLOW_COPY_AND_ASSIGN(ScopedHGlobal); -}; - -} // namespace win -} // namespace base - -#endif // BASE_WIN_SCOPED_HGLOBAL_H_
diff --git a/base/win/scoped_hstring.cc b/base/win/scoped_hstring.cc deleted file mode 100644 index 89d1f49..0000000 --- a/base/win/scoped_hstring.cc +++ /dev/null
@@ -1,131 +0,0 @@ -// Copyright 2017 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. - -#include "base/win/scoped_hstring.h" - -#include <winstring.h> - -#include "base/strings/string_piece.h" -#include "base/strings/utf_string_conversions.h" - -namespace base { - -namespace { - -static bool g_load_succeeded = false; - -FARPROC LoadComBaseFunction(const char* function_name) { - static HMODULE const handle = ::LoadLibrary(L"combase.dll"); - return handle ? ::GetProcAddress(handle, function_name) : nullptr; -} - -decltype(&::WindowsCreateString) GetWindowsCreateString() { - static decltype(&::WindowsCreateString) const function = - reinterpret_cast<decltype(&::WindowsCreateString)>( - LoadComBaseFunction("WindowsCreateString")); - return function; -} - -decltype(&::WindowsDeleteString) GetWindowsDeleteString() { - static decltype(&::WindowsDeleteString) const function = - reinterpret_cast<decltype(&::WindowsDeleteString)>( - LoadComBaseFunction("WindowsDeleteString")); - return function; -} - -decltype(&::WindowsGetStringRawBuffer) GetWindowsGetStringRawBuffer() { - static decltype(&::WindowsGetStringRawBuffer) const function = - reinterpret_cast<decltype(&::WindowsGetStringRawBuffer)>( - LoadComBaseFunction("WindowsGetStringRawBuffer")); - return function; -} - -HRESULT WindowsCreateString(const base::char16* src, - uint32_t len, - HSTRING* out_hstr) { - decltype(&::WindowsCreateString) create_string_func = - GetWindowsCreateString(); - if (!create_string_func) - return E_FAIL; - return create_string_func(src, len, out_hstr); -} - -HRESULT WindowsDeleteString(HSTRING hstr) { - decltype(&::WindowsDeleteString) delete_string_func = - GetWindowsDeleteString(); - if (!delete_string_func) - return E_FAIL; - return delete_string_func(hstr); -} - -const base::char16* WindowsGetStringRawBuffer(HSTRING hstr, uint32_t* out_len) { - decltype(&::WindowsGetStringRawBuffer) get_string_raw_buffer_func = - GetWindowsGetStringRawBuffer(); - if (!get_string_raw_buffer_func) { - *out_len = 0; - return nullptr; - } - return get_string_raw_buffer_func(hstr, out_len); -} - -} // namespace - -namespace internal { - -// static -void ScopedHStringTraits::Free(HSTRING hstr) { - base::WindowsDeleteString(hstr); -} - -} // namespace internal - -namespace win { - -// static -ScopedHString ScopedHString::Create(StringPiece16 str) { - DCHECK(g_load_succeeded); - HSTRING hstr; - HRESULT hr = base::WindowsCreateString(str.data(), str.length(), &hstr); - if (SUCCEEDED(hr)) - return ScopedHString(hstr); - DLOG(ERROR) << "Failed to create HSTRING" << std::hex << hr; - return ScopedHString(nullptr); -} - -ScopedHString ScopedHString::Create(StringPiece str) { - return Create(UTF8ToWide(str)); -} - -ScopedHString::ScopedHString(HSTRING hstr) : ScopedGeneric(hstr) { - DCHECK(g_load_succeeded); -} - -// static -bool ScopedHString::ResolveCoreWinRTStringDelayload() { - // TODO(finnur): Add AssertIOAllowed once crbug.com/770193 is fixed. - - static const bool load_succeeded = []() { - bool success = GetWindowsCreateString() && GetWindowsDeleteString() && - GetWindowsGetStringRawBuffer(); - g_load_succeeded = success; - return success; - }(); - return load_succeeded; -} - -StringPiece16 ScopedHString::Get() const { - UINT32 length = 0; - const wchar_t* buffer = base::WindowsGetStringRawBuffer(get(), &length); - return StringPiece16(buffer, length); -} - -std::string ScopedHString::GetAsUTF8() const { - std::string result; - const StringPiece16 wide_string = Get(); - WideToUTF8(wide_string.data(), wide_string.length(), &result); - return result; -} - -} // namespace win -} // namespace base
diff --git a/base/win/scoped_hstring.h b/base/win/scoped_hstring.h deleted file mode 100644 index 7c169b9..0000000 --- a/base/win/scoped_hstring.h +++ /dev/null
@@ -1,73 +0,0 @@ -// Copyright 2017 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_HSTRING_H_ -#define BASE_WIN_SCOPED_HSTRING_H_ - -#include <hstring.h> - -#include "base/scoped_generic.h" -#include "base/strings/string_piece_forward.h" - -namespace base { - -namespace internal { - -// Scoped HSTRING class to maintain lifetime of HSTRINGs allocated with -// WindowsCreateString(). -struct ScopedHStringTraits { - static HSTRING InvalidValue() { return nullptr; } - static void Free(HSTRING hstr); -}; - -} // namespace internal - -namespace win { - -// ScopedHString is a wrapper around an HSTRING. Note that it requires certain -// functions that are only available on Windows 8 and later, and that these -// functions need to be delayloaded to avoid breaking Chrome on Windows 7. -// -// Callers MUST check the return value of ResolveCoreWinRTStringDelayLoad() -// *before* using ScopedHString. -// -// One-time Initialization for ScopedHString: -// -// bool success = ScopedHString::ResolveCoreWinRTStringDelayload(); -// if (!success) { -// // ScopeHString can be used. -// } else { -// // Handle error. -// } -// -// Example use: -// -// ScopedHString string = ScopedHString::Create(L"abc"); -// -// Also: -// -// HSTRING win_string; -// HRESULT hr = WindowsCreateString(..., &win_string); -// ScopedHString string(win_string); -// -class ScopedHString - : public ScopedGeneric<HSTRING, base::internal::ScopedHStringTraits> { - public: - // Constructs a ScopedHString from an HSTRING, and takes ownership of |hstr|. - explicit ScopedHString(HSTRING hstr); - - static ScopedHString Create(StringPiece16 str); - static ScopedHString Create(StringPiece str); - - // Loads all required HSTRING functions, available from Win8 and onwards. - static bool ResolveCoreWinRTStringDelayload(); - - StringPiece16 Get() const; - std::string GetAsUTF8() const; -}; - -} // namespace win -} // namespace base - -#endif // BASE_WIN_SCOPED_HSTRING_H_
diff --git a/base/win/startup_information.cc b/base/win/startup_information.cc deleted file mode 100644 index fbfb093..0000000 --- a/base/win/startup_information.cc +++ /dev/null
@@ -1,99 +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. - -#include "base/win/startup_information.h" - -#include "base/logging.h" - -namespace { - -typedef BOOL(WINAPI* InitializeProcThreadAttributeListFunction)( - LPPROC_THREAD_ATTRIBUTE_LIST attribute_list, - DWORD attribute_count, - DWORD flags, - PSIZE_T size); -static InitializeProcThreadAttributeListFunction - initialize_proc_thread_attribute_list; - -typedef BOOL(WINAPI* UpdateProcThreadAttributeFunction)( - LPPROC_THREAD_ATTRIBUTE_LIST attribute_list, - DWORD flags, - DWORD_PTR attribute, - PVOID value, - SIZE_T size, - PVOID previous_value, - PSIZE_T return_size); -static UpdateProcThreadAttributeFunction update_proc_thread_attribute_list; - -typedef VOID(WINAPI* DeleteProcThreadAttributeListFunction)( - LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList); -static DeleteProcThreadAttributeListFunction delete_proc_thread_attribute_list; - -} // namespace - -namespace base { -namespace win { - -StartupInformation::StartupInformation() { - memset(&startup_info_, 0, sizeof(startup_info_)); - startup_info_.StartupInfo.cb = sizeof(startup_info_); - - // Load the attribute API functions. - if (!initialize_proc_thread_attribute_list || - !update_proc_thread_attribute_list || - !delete_proc_thread_attribute_list) { - HMODULE module = ::GetModuleHandleW(L"kernel32.dll"); - initialize_proc_thread_attribute_list = - reinterpret_cast<InitializeProcThreadAttributeListFunction>( - ::GetProcAddress(module, "InitializeProcThreadAttributeList")); - update_proc_thread_attribute_list = - reinterpret_cast<UpdateProcThreadAttributeFunction>( - ::GetProcAddress(module, "UpdateProcThreadAttribute")); - delete_proc_thread_attribute_list = - reinterpret_cast<DeleteProcThreadAttributeListFunction>( - ::GetProcAddress(module, "DeleteProcThreadAttributeList")); - } -} - -StartupInformation::~StartupInformation() { - if (startup_info_.lpAttributeList) { - delete_proc_thread_attribute_list(startup_info_.lpAttributeList); - delete[] reinterpret_cast<BYTE*>(startup_info_.lpAttributeList); - } -} - -bool StartupInformation::InitializeProcThreadAttributeList( - DWORD attribute_count) { - if (startup_info_.StartupInfo.cb != sizeof(startup_info_) || - startup_info_.lpAttributeList) - return false; - - SIZE_T size = 0; - initialize_proc_thread_attribute_list(NULL, attribute_count, 0, &size); - if (size == 0) - return false; - - startup_info_.lpAttributeList = - reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(new BYTE[size]); - if (!initialize_proc_thread_attribute_list(startup_info_.lpAttributeList, - attribute_count, 0, &size)) { - delete[] reinterpret_cast<BYTE*>(startup_info_.lpAttributeList); - startup_info_.lpAttributeList = NULL; - return false; - } - - return true; -} - -bool StartupInformation::UpdateProcThreadAttribute(DWORD_PTR attribute, - void* value, - size_t size) { - if (!startup_info_.lpAttributeList) - return false; - return !!update_proc_thread_attribute_list( - startup_info_.lpAttributeList, 0, attribute, value, size, NULL, NULL); -} - -} // namespace win -} // namespace base
diff --git a/base/win/startup_information.h b/base/win/startup_information.h deleted file mode 100644 index d95f39b..0000000 --- a/base/win/startup_information.h +++ /dev/null
@@ -1,48 +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_STARTUP_INFORMATION_H_ -#define BASE_WIN_STARTUP_INFORMATION_H_ - -#include <stddef.h> -#include <windows.h> - -#include "base/macros.h" - -namespace base { -namespace win { - -// Manages the lifetime of additional attributes in STARTUPINFOEX. -class StartupInformation { - public: - StartupInformation(); - - ~StartupInformation(); - - // Initialize the attribute list for the specified number of entries. - bool InitializeProcThreadAttributeList(DWORD attribute_count); - - // Sets one entry in the initialized attribute list. - // |value| needs to live at least as long as the StartupInformation object - // this is called on. - bool UpdateProcThreadAttribute(DWORD_PTR attribute, void* value, size_t size); - - LPSTARTUPINFOW startup_info() { return &startup_info_.StartupInfo; } - LPSTARTUPINFOW startup_info() const { - return const_cast<const LPSTARTUPINFOW>(&startup_info_.StartupInfo); - } - - bool has_extended_startup_info() const { - return !!startup_info_.lpAttributeList; - } - - private: - STARTUPINFOEXW startup_info_; - DISALLOW_COPY_AND_ASSIGN(StartupInformation); -}; - -} // namespace win -} // namespace base - -#endif // BASE_WIN_STARTUP_INFORMATION_H_
diff --git a/base/win/windows_full.h b/base/win/windows_full.h deleted file mode 100644 index 8b9e43a..0000000 --- a/base/win/windows_full.h +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright (c) 2014 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. - -// This header is needed so that mojo typemap files can specify their dependence -// on Windows.h. This can be removed once https://crbug.com/798763 is resolved. - -#ifndef BASE_WIN_WINDOWS_FULL_H -#define BASE_WIN_WINDOWS_FULL_H - -#include <windows.h> - -#endif // BASE_WIN_WINDOWS_FULL_H
diff --git a/base/win/winrt_storage_util.cc b/base/win/winrt_storage_util.cc deleted file mode 100644 index 262d817..0000000 --- a/base/win/winrt_storage_util.cc +++ /dev/null
@@ -1,72 +0,0 @@ -// Copyright 2017 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. - -#include "base/win/winrt_storage_util.h" - -#include <robuffer.h> -#include <string.h> -#include <wrl/client.h> - -#include "base/strings/string_util.h" -#include "base/win/core_winrt_util.h" -#include "base/win/scoped_hstring.h" - -namespace base { -namespace win { - -using IBuffer = ABI::Windows::Storage::Streams::IBuffer; - -HRESULT GetPointerToBufferData(IBuffer* buffer, uint8_t** out, UINT32* length) { - *out = nullptr; - - Microsoft::WRL::ComPtr<Windows::Storage::Streams::IBufferByteAccess> - buffer_byte_access; - HRESULT hr = buffer->QueryInterface(IID_PPV_ARGS(&buffer_byte_access)); - if (FAILED(hr)) - return hr; - - hr = buffer->get_Length(length); - if (FAILED(hr)) - return hr; - - // Lifetime of the pointing buffer is controlled by the buffer object. - return buffer_byte_access->Buffer(out); -} - -HRESULT CreateIBufferFromData(const uint8_t* data, - UINT32 length, - Microsoft::WRL::ComPtr<IBuffer>* buffer) { - *buffer = nullptr; - - Microsoft::WRL::ComPtr<ABI::Windows::Storage::Streams::IBufferFactory> - buffer_factory; - HRESULT hr = base::win::GetActivationFactory< - ABI::Windows::Storage::Streams::IBufferFactory, - RuntimeClass_Windows_Storage_Streams_Buffer>(&buffer_factory); - if (FAILED(hr)) - return hr; - - Microsoft::WRL::ComPtr<IBuffer> internal_buffer; - hr = buffer_factory->Create(length, internal_buffer.GetAddressOf()); - if (FAILED(hr)) - return hr; - - hr = internal_buffer->put_Length(length); - if (FAILED(hr)) - return hr; - - uint8_t* p_buffer_data; - hr = GetPointerToBufferData(internal_buffer.Get(), &p_buffer_data, &length); - if (FAILED(hr)) - return hr; - - memcpy(p_buffer_data, data, length); - - *buffer = std::move(internal_buffer); - - return S_OK; -} - -} // namespace win -} // namespace base
diff --git a/base/win/winrt_storage_util.h b/base/win/winrt_storage_util.h deleted file mode 100644 index 8cf57d4..0000000 --- a/base/win/winrt_storage_util.h +++ /dev/null
@@ -1,32 +0,0 @@ -// Copyright 2017 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_WINRT_STORAGE_UTIL_H_ -#define BASE_WIN_WINRT_STORAGE_UTIL_H_ - -#include <stdint.h> -#include <windows.storage.streams.h> -#include <wrl/client.h> - -namespace base { -namespace win { - -// Gets an array of bytes in the |buffer|, |out| represents a array of -// bytes used by byte stream read and write. -HRESULT -GetPointerToBufferData(ABI::Windows::Storage::Streams::IBuffer* buffer, - uint8_t** out, - UINT32* length); - -// Creates stream |buffer| from |data| that represents a array of bytes -// and the |length| of bytes. -HRESULT CreateIBufferFromData( - const uint8_t* data, - UINT32 length, - Microsoft::WRL::ComPtr<ABI::Windows::Storage::Streams::IBuffer>* buffer); - -} // namespace win -} // namespace base - -#endif // BASE_WIN_WINRT_STORAGE_UTIL_H_
diff --git a/build/gen.py b/build/gen.py index 4bf84d9..22e6bc9 100755 --- a/build/gen.py +++ b/build/gen.py
@@ -528,7 +528,6 @@ 'base/win/registry.cc', 'base/win/scoped_handle.cc', 'base/win/scoped_process_information.cc', - 'base/win/startup_information.cc', ]) libs.extend([