Index: remoting/host/win/rdp_client_window.cc |
diff --git a/remoting/host/win/rdp_client_window.cc b/remoting/host/win/rdp_client_window.cc |
index 6ccee3d2e22b064f3aac803a98a23aaa909041cf..8516195e2d80bf5d172bcda7f077e4f7010d4aa6 100644 |
--- a/remoting/host/win/rdp_client_window.cc |
+++ b/remoting/host/win/rdp_client_window.cc |
@@ -247,10 +247,8 @@ LRESULT RdpClientWindow::OnCreate(CREATESTRUCT* create_struct) { |
RECT rect = { 0, 0, screen_size_.width(), screen_size_.height() }; |
activex_window.Create(m_hWnd, rect, nullptr, |
WS_CHILD | WS_VISIBLE | WS_BORDER); |
- if (activex_window.m_hWnd == nullptr) { |
- result = HRESULT_FROM_WIN32(GetLastError()); |
- goto done; |
- } |
+ if (activex_window.m_hWnd == nullptr) |
+ return LogOnCreateError(HRESULT_FROM_WIN32(GetLastError())); |
// Instantiate the RDP ActiveX control. |
result = activex_window.CreateControlEx( |
@@ -261,71 +259,71 @@ LRESULT RdpClientWindow::OnCreate(CREATESTRUCT* create_struct) { |
__uuidof(mstsc::IMsTscAxEvents), |
reinterpret_cast<IUnknown*>(static_cast<RdpEventsSink*>(this))); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
result = control.QueryInterface(client_.Receive()); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Use 32-bit color. |
result = client_->put_ColorDepth(32); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Set dimensions of the remote desktop. |
result = client_->put_DesktopWidth(screen_size_.width()); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
result = client_->put_DesktopHeight(screen_size_.height()); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Set the server name to connect to. |
result = client_->put_Server(server_name); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Fetch IMsRdpClientAdvancedSettings interface for the client. |
result = client_->get_AdvancedSettings2(client_settings_.Receive()); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Disable background input mode. |
result = client_settings_->put_allowBackgroundInput(0); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Do not use bitmap cache. |
result = client_settings_->put_BitmapPersistence(0); |
if (SUCCEEDED(result)) |
result = client_settings_->put_CachePersistenceActive(0); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Do not use compression. |
result = client_settings_->put_Compress(0); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Enable the Ctrl+Alt+Del screen. |
result = client_settings_->put_DisableCtrlAltDel(0); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Disable printer and clipboard redirection. |
result = client_settings_->put_DisableRdpdr(FALSE); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Do not display the connection bar. |
result = client_settings_->put_DisplayConnectionBar(VARIANT_FALSE); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Do not grab focus on connect. |
result = client_settings_->put_GrabFocusOnConnect(VARIANT_FALSE); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Enable enhanced graphics, font smoothing and desktop composition. |
const LONG kDesiredFlags = WTS_PERF_ENABLE_ENHANCED_GRAPHICS | |
@@ -333,12 +331,12 @@ LRESULT RdpClientWindow::OnCreate(CREATESTRUCT* create_struct) { |
WTS_PERF_ENABLE_DESKTOP_COMPOSITION; |
result = client_settings_->put_PerformanceFlags(kDesiredFlags); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Set the port to connect to. |
result = client_settings_->put_RDPPort(server_endpoint_.port()); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Disable audio in the session. |
// TODO(alexeypa): re-enable audio redirection when http://crbug.com/242312 is |
@@ -347,12 +345,12 @@ LRESULT RdpClientWindow::OnCreate(CREATESTRUCT* create_struct) { |
if (SUCCEEDED(result)) { |
result = secured_settings2->put_AudioRedirectionMode(kRdpAudioModeNone); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
} |
result = client_->get_SecuredSettings(secured_settings.Receive()); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
// Set the terminal ID as the working directory for the initial program. It is |
// observed that |WorkDir| is used only if an initial program is also |
@@ -363,21 +361,11 @@ LRESULT RdpClientWindow::OnCreate(CREATESTRUCT* create_struct) { |
// This code should be in sync with WtsTerminalMonitor::LookupTerminalId(). |
result = secured_settings->put_WorkDir(terminal_id); |
if (FAILED(result)) |
- goto done; |
+ return LogOnCreateError(result); |
result = client_->Connect(); |
if (FAILED(result)) |
- goto done; |
- |
-done: |
- if (FAILED(result)) { |
- LOG(ERROR) << "RDP: failed to initiate a connection to " |
- << server_endpoint_.ToString() << ": error=" |
- << std::hex << result << std::dec; |
- client_.Release(); |
- client_settings_.Release(); |
- return -1; |
- } |
+ return LogOnCreateError(result); |
return 0; |
} |
@@ -462,6 +450,15 @@ HRESULT RdpClientWindow::OnConfirmClose(VARIANT_BOOL* allow_close) { |
return S_OK; |
} |
+int RdpClientWindow::LogOnCreateError(HRESULT error) { |
+ LOG(ERROR) << "RDP: failed to initiate a connection to " |
+ << server_endpoint_.ToString() << ": error=" |
+ << std::hex << error << std::dec; |
+ client_.Release(); |
+ client_settings_.Release(); |
+ return -1; |
+} |
+ |
void RdpClientWindow::NotifyConnected() { |
if (event_handler_) |
event_handler_->OnConnected(); |