1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "remoting/host/desktop_environment_options.h" 6 7 #include <string> 8 #include <utility> 9 10 #include "base/optional.h" 11 #include "build/build_config.h" 12 13 #if defined(OS_WIN) 14 #include "remoting/host/win/evaluate_d3d.h" 15 #endif 16 17 namespace remoting { 18 19 using DesktopCaptureOptions = webrtc::DesktopCaptureOptions; 20 21 // static CreateDefault()22DesktopEnvironmentOptions DesktopEnvironmentOptions::CreateDefault() { 23 DesktopEnvironmentOptions options; 24 options.desktop_capture_options_ = DesktopCaptureOptions::CreateDefault(); 25 options.Initialize(); 26 return options; 27 } 28 DesktopEnvironmentOptions()29DesktopEnvironmentOptions::DesktopEnvironmentOptions() { 30 Initialize(); 31 } 32 33 DesktopEnvironmentOptions::DesktopEnvironmentOptions( 34 DesktopEnvironmentOptions&& other) = default; 35 DesktopEnvironmentOptions::DesktopEnvironmentOptions( 36 const DesktopEnvironmentOptions& other) = default; 37 DesktopEnvironmentOptions::~DesktopEnvironmentOptions() = default; 38 DesktopEnvironmentOptions& 39 DesktopEnvironmentOptions::operator=( 40 DesktopEnvironmentOptions&& other) = default; 41 DesktopEnvironmentOptions& 42 DesktopEnvironmentOptions::operator=( 43 const DesktopEnvironmentOptions& other) = default; 44 Initialize()45void DesktopEnvironmentOptions::Initialize() { 46 desktop_capture_options_.set_detect_updated_region(true); 47 #if defined (OS_WIN) 48 // Whether DirectX capturer can be enabled depends on various factors, 49 // including how many applications are using related APIs. 50 // WebRTC/DesktopCapturer will take care of those details. This check is used 51 // to ensure D3D APIs are safe to access in the current environment. 52 desktop_capture_options_.set_allow_directx_capturer(IsD3DAvailable()); 53 #endif 54 } 55 56 const DesktopCaptureOptions* desktop_capture_options() const57DesktopEnvironmentOptions::desktop_capture_options() const { 58 return &desktop_capture_options_; 59 } 60 61 DesktopCaptureOptions* desktop_capture_options()62DesktopEnvironmentOptions::desktop_capture_options() { 63 return &desktop_capture_options_; 64 } 65 enable_curtaining() const66bool DesktopEnvironmentOptions::enable_curtaining() const { 67 return enable_curtaining_; 68 } 69 set_enable_curtaining(bool enabled)70void DesktopEnvironmentOptions::set_enable_curtaining(bool enabled) { 71 enable_curtaining_ = enabled; 72 } 73 enable_user_interface() const74bool DesktopEnvironmentOptions::enable_user_interface() const { 75 return enable_user_interface_; 76 } 77 set_enable_user_interface(bool enabled)78void DesktopEnvironmentOptions::set_enable_user_interface(bool enabled) { 79 enable_user_interface_ = enabled; 80 } 81 enable_notifications() const82bool DesktopEnvironmentOptions::enable_notifications() const { 83 return enable_notifications_; 84 } 85 set_enable_notifications(bool enabled)86void DesktopEnvironmentOptions::set_enable_notifications(bool enabled) { 87 enable_notifications_ = enabled; 88 } 89 terminate_upon_input() const90bool DesktopEnvironmentOptions::terminate_upon_input() const { 91 return terminate_upon_input_; 92 } 93 set_terminate_upon_input(bool enabled)94void DesktopEnvironmentOptions::set_terminate_upon_input(bool enabled) { 95 terminate_upon_input_ = enabled; 96 } 97 enable_file_transfer() const98bool DesktopEnvironmentOptions::enable_file_transfer() const { 99 return enable_file_transfer_; 100 } 101 set_enable_file_transfer(bool enabled)102void DesktopEnvironmentOptions::set_enable_file_transfer(bool enabled) { 103 enable_file_transfer_ = enabled; 104 } 105 ApplySessionOptions(const SessionOptions & options)106void DesktopEnvironmentOptions::ApplySessionOptions( 107 const SessionOptions& options) { 108 #if defined(OS_WIN) 109 base::Optional<bool> directx_capturer = 110 options.GetBool("DirectX-Capturer"); 111 if (directx_capturer) { 112 desktop_capture_options_.set_allow_directx_capturer(*directx_capturer); 113 } 114 #endif 115 // This field is for test purpose. Usually it should not be set to false. 116 base::Optional<bool> detect_updated_region = 117 options.GetBool("Detect-Updated-Region"); 118 if (detect_updated_region) { 119 desktop_capture_options_.set_detect_updated_region(*detect_updated_region); 120 } 121 } 122 123 } // namespace remoting 124