Commit c956e4c6 authored by James Forshaw's avatar James Forshaw Committed by Commit Bot

[remoting][win] Statically link Vista clipboard APIs.

This CL converts the dynamic linking of Vista-era clipboard APIs into
static linking as we no longer support Windows XP.

Bug: 986625
Change-Id: Ic619f0058fde7f221e7aebc44c9db8bf82a39741
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1730748Reviewed-by: default avatarYuwei Huang <yuweih@chromium.org>
Commit-Queue: James Forshaw <forshaw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683318}
parent 98748ed1
...@@ -97,9 +97,6 @@ class ScopedClipboard { ...@@ -97,9 +97,6 @@ class ScopedClipboard {
bool opened_; bool opened_;
}; };
typedef BOOL (WINAPI AddClipboardFormatListenerFn)(HWND);
typedef BOOL (WINAPI RemoveClipboardFormatListenerFn)(HWND);
} // namespace } // namespace
namespace remoting { namespace remoting {
...@@ -124,51 +121,25 @@ class ClipboardWin : public Clipboard { ...@@ -124,51 +121,25 @@ class ClipboardWin : public Clipboard {
LRESULT* result); LRESULT* result);
std::unique_ptr<protocol::ClipboardStub> client_clipboard_; std::unique_ptr<protocol::ClipboardStub> client_clipboard_;
AddClipboardFormatListenerFn* add_clipboard_format_listener_;
RemoveClipboardFormatListenerFn* remove_clipboard_format_listener_;
// Used to subscribe to WM_CLIPBOARDUPDATE messages. // Used to subscribe to WM_CLIPBOARDUPDATE messages.
std::unique_ptr<base::win::MessageWindow> window_; std::unique_ptr<base::win::MessageWindow> window_;
DISALLOW_COPY_AND_ASSIGN(ClipboardWin); DISALLOW_COPY_AND_ASSIGN(ClipboardWin);
}; };
ClipboardWin::ClipboardWin() ClipboardWin::ClipboardWin() {}
: add_clipboard_format_listener_(nullptr),
remove_clipboard_format_listener_(nullptr) {
}
ClipboardWin::~ClipboardWin() { ClipboardWin::~ClipboardWin() {
if (window_ && remove_clipboard_format_listener_) if (window_)
(*remove_clipboard_format_listener_)(window_->hwnd()); ::RemoveClipboardFormatListener(window_->hwnd());
} }
void ClipboardWin::Start( void ClipboardWin::Start(
std::unique_ptr<protocol::ClipboardStub> client_clipboard) { std::unique_ptr<protocol::ClipboardStub> client_clipboard) {
DCHECK(!add_clipboard_format_listener_);
DCHECK(!remove_clipboard_format_listener_);
DCHECK(!window_); DCHECK(!window_);
client_clipboard_.swap(client_clipboard); client_clipboard_.swap(client_clipboard);
// user32.dll is statically linked.
HMODULE user32 = GetModuleHandle(L"user32.dll");
CHECK(user32);
add_clipboard_format_listener_ =
reinterpret_cast<AddClipboardFormatListenerFn*>(
GetProcAddress(user32, "AddClipboardFormatListener"));
if (add_clipboard_format_listener_) {
remove_clipboard_format_listener_ =
reinterpret_cast<RemoveClipboardFormatListenerFn*>(
GetProcAddress(user32, "RemoveClipboardFormatListener"));
// If AddClipboardFormatListener() present, RemoveClipboardFormatListener()
// should be available too.
CHECK(remove_clipboard_format_listener_);
} else {
LOG(WARNING) << "AddClipboardFormatListener() is not available.";
}
window_.reset(new base::win::MessageWindow()); window_.reset(new base::win::MessageWindow());
if (!window_->Create(base::Bind(&ClipboardWin::HandleMessage, if (!window_->Create(base::Bind(&ClipboardWin::HandleMessage,
base::Unretained(this)))) { base::Unretained(this)))) {
...@@ -177,11 +148,9 @@ void ClipboardWin::Start( ...@@ -177,11 +148,9 @@ void ClipboardWin::Start(
return; return;
} }
if (add_clipboard_format_listener_) { if (!::AddClipboardFormatListener(window_->hwnd())) {
if (!(*add_clipboard_format_listener_)(window_->hwnd())) {
LOG(WARNING) << "AddClipboardFormatListener() failed: " << GetLastError(); LOG(WARNING) << "AddClipboardFormatListener() failed: " << GetLastError();
} }
}
} }
void ClipboardWin::InjectClipboardEvent( void ClipboardWin::InjectClipboardEvent(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment