Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "remoting/client/plugin/normalizing_input_filter_mac.h" | 5 #include "remoting/client/plugin/normalizing_input_filter_mac.h" |
| 6 | 6 |
| 7 #include "remoting/proto/event.pb.h" | 7 #include "remoting/proto/event.pb.h" |
| 8 #include "remoting/protocol/protocol_mock_objects.h" | 8 #include "remoting/protocol/protocol_mock_objects.h" |
| 9 #include "remoting/protocol/test_event_matchers.h" | |
| 9 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 11 | 12 |
| 12 using ::testing::InSequence; | 13 using ::testing::InSequence; |
| 13 using remoting::protocol::InputStub; | 14 using remoting::protocol::InputStub; |
| 14 using remoting::protocol::KeyEvent; | 15 using remoting::protocol::KeyEvent; |
| 15 using remoting::protocol::MockInputStub; | 16 using remoting::protocol::MockInputStub; |
| 16 using remoting::protocol::MouseEvent; | 17 using remoting::protocol::MouseEvent; |
| 18 using remoting::protocol::EqualsUsbEventWithNumLock; | |
| 17 | 19 |
| 18 namespace remoting { | 20 namespace remoting { |
| 19 | 21 |
| 20 namespace { | 22 namespace { |
| 21 | 23 |
| 22 const unsigned int kUsbCapsLock = 0x070039; | 24 const unsigned int kUsbCapsLock = 0x070039; |
| 23 const unsigned int kUsbLeftShift = 0x0700e1; | 25 const unsigned int kUsbLeftShift = 0x0700e1; |
| 24 const unsigned int kUsbLeftOption = 0x0700e2; | 26 const unsigned int kUsbLeftOption = 0x0700e2; |
| 25 const unsigned int kUsbLeftCmd = 0x0700e3; | 27 const unsigned int kUsbLeftCmd = 0x0700e3; |
| 26 const unsigned int kUsbRightCmd = 0x0700e7; | 28 const unsigned int kUsbRightCmd = 0x0700e7; |
| 27 | 29 |
| 28 // A hardcoded value used to verify |lock_states| is preserved. | |
| 29 static const uint32 kTestLockStates = protocol::KeyEvent::LOCK_STATES_NUMLOCK; | |
|
Wez
2015/03/12 00:13:58
And this?
Rintaro Kuroiwa
2015/03/12 18:51:27
Same as the other file.
| |
| 30 | |
| 31 MATCHER_P2(EqualsUsbEvent, usb_keycode, pressed, "") { | |
| 32 return arg.usb_keycode() == static_cast<uint32>(usb_keycode) && | |
| 33 arg.pressed() == pressed && | |
| 34 arg.lock_states() == kTestLockStates; | |
| 35 } | |
| 36 | |
| 37 KeyEvent MakeKeyEvent(uint32 keycode, bool pressed) { | 30 KeyEvent MakeKeyEvent(uint32 keycode, bool pressed) { |
| 38 KeyEvent event; | 31 KeyEvent event; |
| 39 event.set_usb_keycode(keycode); | 32 event.set_usb_keycode(keycode); |
| 40 event.set_pressed(pressed); | 33 event.set_pressed(pressed); |
| 41 event.set_lock_states(kTestLockStates); | 34 event.set_lock_states(KeyEvent::LOCK_STATES_NUMLOCK); |
| 42 return event; | 35 return event; |
| 43 } | 36 } |
| 44 | 37 |
| 45 } // namespace | 38 } // namespace |
| 46 | 39 |
| 47 // Test CapsLock press/release. | 40 // Test CapsLock press/release. |
| 48 TEST(NormalizingInputFilterMacTest, CapsLock) { | 41 TEST(NormalizingInputFilterMacTest, CapsLock) { |
| 49 MockInputStub stub; | 42 MockInputStub stub; |
| 50 scoped_ptr<protocol::InputFilter> processor( | 43 scoped_ptr<protocol::InputFilter> processor( |
| 51 new NormalizingInputFilterMac(&stub)); | 44 new NormalizingInputFilterMac(&stub)); |
| 52 | 45 |
| 53 { | 46 { |
| 54 InSequence s; | 47 InSequence s; |
| 55 | 48 |
| 56 // Verifies the generated CapsLock up/down events. | 49 // Verifies the generated CapsLock up/down events. |
| 57 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbCapsLock, true))); | 50 EXPECT_CALL(stub, |
| 58 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbCapsLock, false))); | 51 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbCapsLock, true))); |
| 52 EXPECT_CALL(stub, | |
| 53 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbCapsLock, false))); | |
| 59 } | 54 } |
| 60 | 55 |
| 61 // Injecting a CapsLock down event with NumLock on. | 56 // Injecting a CapsLock down event with NumLock on. |
| 62 processor->InjectKeyEvent(MakeKeyEvent(kUsbCapsLock, true)); | 57 processor->InjectKeyEvent(MakeKeyEvent(kUsbCapsLock, true)); |
| 63 } | 58 } |
| 64 | 59 |
| 65 // Test without pressing command key. | 60 // Test without pressing command key. |
| 66 TEST(NormalizingInputFilterMacTest, NoInjection) { | 61 TEST(NormalizingInputFilterMacTest, NoInjection) { |
| 67 MockInputStub stub; | 62 MockInputStub stub; |
| 68 scoped_ptr<protocol::InputFilter> processor( | 63 scoped_ptr<protocol::InputFilter> processor( |
| 69 new NormalizingInputFilterMac(&stub)); | 64 new NormalizingInputFilterMac(&stub)); |
| 70 | 65 |
| 71 { | 66 { |
| 72 InSequence s; | 67 InSequence s; |
| 73 | 68 |
| 74 EXPECT_CALL(stub, InjectKeyEvent( | 69 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
| 75 EqualsUsbEvent('C', true))); | 70 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
| 76 EXPECT_CALL(stub, InjectKeyEvent( | |
| 77 EqualsUsbEvent('C', false))); | |
| 78 } | 71 } |
| 79 | 72 |
| 80 // C Down and C Up. | 73 // C Down and C Up. |
| 81 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 74 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
| 82 processor->InjectKeyEvent(MakeKeyEvent('C', false)); | 75 processor->InjectKeyEvent(MakeKeyEvent('C', false)); |
| 83 } | 76 } |
| 84 | 77 |
| 85 // Test pressing command key and other normal keys. | 78 // Test pressing command key and other normal keys. |
| 86 TEST(NormalizingInputFilterMacTest, CmdKey) { | 79 TEST(NormalizingInputFilterMacTest, CmdKey) { |
| 87 MockInputStub stub; | 80 MockInputStub stub; |
| 88 scoped_ptr<protocol::InputFilter> processor( | 81 scoped_ptr<protocol::InputFilter> processor( |
| 89 new NormalizingInputFilterMac(&stub)); | 82 new NormalizingInputFilterMac(&stub)); |
| 90 | 83 |
| 91 { | 84 { |
| 92 InSequence s; | 85 InSequence s; |
| 93 | 86 |
| 94 // Left command key. | 87 // Left command key. |
| 95 EXPECT_CALL(stub, InjectKeyEvent( | 88 EXPECT_CALL(stub, |
| 96 EqualsUsbEvent(kUsbLeftCmd, true))); | 89 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
| 97 EXPECT_CALL(stub, InjectKeyEvent( | 90 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
| 98 EqualsUsbEvent('C', true))); | 91 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
| 99 EXPECT_CALL(stub, InjectKeyEvent( | 92 EXPECT_CALL(stub, |
| 100 EqualsUsbEvent('C', false))); | 93 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
| 101 EXPECT_CALL(stub, InjectKeyEvent( | |
| 102 EqualsUsbEvent(kUsbLeftCmd, false))); | |
| 103 | 94 |
| 104 // Right command key. | 95 // Right command key. |
| 105 EXPECT_CALL(stub, InjectKeyEvent( | 96 EXPECT_CALL(stub, |
| 106 EqualsUsbEvent(kUsbRightCmd, true))); | 97 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
| 107 EXPECT_CALL(stub, InjectKeyEvent( | 98 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
| 108 EqualsUsbEvent('C', true))); | 99 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
| 109 EXPECT_CALL(stub, InjectKeyEvent( | 100 EXPECT_CALL(stub, |
| 110 EqualsUsbEvent('C', false))); | 101 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, false))); |
| 111 EXPECT_CALL(stub, InjectKeyEvent( | |
| 112 EqualsUsbEvent(kUsbRightCmd, false))); | |
| 113 | 102 |
| 114 // More than one keys after CMD. | 103 // More than one keys after CMD. |
| 115 EXPECT_CALL(stub, InjectKeyEvent( | 104 EXPECT_CALL(stub, |
| 116 EqualsUsbEvent(kUsbRightCmd, true))); | 105 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
| 117 EXPECT_CALL(stub, InjectKeyEvent( | 106 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
| 118 EqualsUsbEvent('C', true))); | 107 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('V', true))); |
| 119 EXPECT_CALL(stub, InjectKeyEvent( | 108 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
| 120 EqualsUsbEvent('V', true))); | 109 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('V', false))); |
| 121 EXPECT_CALL(stub, InjectKeyEvent( | 110 EXPECT_CALL(stub, |
| 122 EqualsUsbEvent('C', false))); | 111 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, false))); |
| 123 EXPECT_CALL(stub, InjectKeyEvent( | |
| 124 EqualsUsbEvent('V', false))); | |
| 125 EXPECT_CALL(stub, InjectKeyEvent( | |
| 126 EqualsUsbEvent(kUsbRightCmd, false))); | |
| 127 } | 112 } |
| 128 | 113 |
| 129 // Left command key. | 114 // Left command key. |
| 130 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 115 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 131 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 116 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
| 132 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 117 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 133 | 118 |
| 134 // Right command key. | 119 // Right command key. |
| 135 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 120 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 136 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 121 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
| 137 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); | 122 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
| 138 | 123 |
| 139 // More than one keys after CMD. | 124 // More than one keys after CMD. |
| 140 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 125 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 141 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 126 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
| 142 processor->InjectKeyEvent(MakeKeyEvent('V', true)); | 127 processor->InjectKeyEvent(MakeKeyEvent('V', true)); |
| 143 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); | 128 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
| 144 } | 129 } |
| 145 | 130 |
| 146 // Test pressing command and special keys. | 131 // Test pressing command and special keys. |
| 147 TEST(NormalizingInputFilterMacTest, SpecialKeys) { | 132 TEST(NormalizingInputFilterMacTest, SpecialKeys) { |
| 148 MockInputStub stub; | 133 MockInputStub stub; |
| 149 scoped_ptr<protocol::InputFilter> processor( | 134 scoped_ptr<protocol::InputFilter> processor( |
| 150 new NormalizingInputFilterMac(&stub)); | 135 new NormalizingInputFilterMac(&stub)); |
| 151 | 136 |
| 152 { | 137 { |
| 153 InSequence s; | 138 InSequence s; |
| 154 | 139 |
| 155 // Command + Shift. | 140 // Command + Shift. |
| 156 EXPECT_CALL(stub, InjectKeyEvent( | 141 EXPECT_CALL(stub, |
| 157 EqualsUsbEvent(kUsbLeftCmd, true))); | 142 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
| 158 EXPECT_CALL(stub, InjectKeyEvent( | 143 EXPECT_CALL(stub, |
| 159 EqualsUsbEvent(kUsbLeftShift, true))); | 144 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftShift, true))); |
| 160 EXPECT_CALL(stub, InjectKeyEvent( | 145 EXPECT_CALL(stub, |
| 161 EqualsUsbEvent(kUsbLeftCmd, false))); | 146 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
| 162 EXPECT_CALL(stub, InjectKeyEvent( | 147 EXPECT_CALL( |
| 163 EqualsUsbEvent(kUsbLeftShift, false))); | 148 stub, InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftShift, false))); |
| 164 | 149 |
| 165 // Command + Option. | 150 // Command + Option. |
| 166 EXPECT_CALL(stub, InjectKeyEvent( | 151 EXPECT_CALL(stub, |
| 167 EqualsUsbEvent(kUsbLeftCmd, true))); | 152 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
| 168 EXPECT_CALL(stub, InjectKeyEvent( | 153 EXPECT_CALL( |
| 169 EqualsUsbEvent(kUsbLeftOption, true))); | 154 stub, InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftOption, true))); |
| 170 EXPECT_CALL(stub, InjectKeyEvent( | 155 EXPECT_CALL(stub, |
| 171 EqualsUsbEvent(kUsbLeftCmd, false))); | 156 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
| 172 EXPECT_CALL(stub, InjectKeyEvent( | 157 EXPECT_CALL( |
| 173 EqualsUsbEvent(kUsbLeftOption, false))); | 158 stub, InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftOption, false))); |
| 174 } | 159 } |
| 175 | 160 |
| 176 // Command + Shift. | 161 // Command + Shift. |
| 177 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 162 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 178 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, true)); | 163 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, true)); |
| 179 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 164 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 180 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, false)); | 165 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, false)); |
| 181 | 166 |
| 182 // Command + Option. | 167 // Command + Option. |
| 183 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 168 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 184 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, true)); | 169 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, true)); |
| 185 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 170 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 186 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, false)); | 171 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, false)); |
| 187 } | 172 } |
| 188 | 173 |
| 189 // Test pressing multiple command keys. | 174 // Test pressing multiple command keys. |
| 190 TEST(NormalizingInputFilterMacTest, MultipleCmdKeys) { | 175 TEST(NormalizingInputFilterMacTest, MultipleCmdKeys) { |
| 191 MockInputStub stub; | 176 MockInputStub stub; |
| 192 scoped_ptr<protocol::InputFilter> processor( | 177 scoped_ptr<protocol::InputFilter> processor( |
| 193 new NormalizingInputFilterMac(&stub)); | 178 new NormalizingInputFilterMac(&stub)); |
| 194 | 179 |
| 195 { | 180 { |
| 196 InSequence s; | 181 InSequence s; |
| 197 | 182 |
| 198 EXPECT_CALL(stub, InjectKeyEvent( | 183 EXPECT_CALL(stub, |
| 199 EqualsUsbEvent(kUsbLeftCmd, true))); | 184 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
| 200 EXPECT_CALL(stub, InjectKeyEvent( | 185 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
| 201 EqualsUsbEvent('C', true))); | 186 EXPECT_CALL(stub, |
| 202 EXPECT_CALL(stub, InjectKeyEvent( | 187 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
| 203 EqualsUsbEvent(kUsbRightCmd, true))); | 188 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
| 204 EXPECT_CALL(stub, InjectKeyEvent( | 189 EXPECT_CALL(stub, |
| 205 EqualsUsbEvent('C', false))); | 190 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
| 206 EXPECT_CALL(stub, InjectKeyEvent( | |
| 207 EqualsUsbEvent(kUsbLeftCmd, false))); | |
| 208 } | 191 } |
| 209 | 192 |
| 210 // Test multiple CMD keys at the same time. | 193 // Test multiple CMD keys at the same time. |
| 211 // L CMD Down, C Down, R CMD Down, L CMD Up. | 194 // L CMD Down, C Down, R CMD Down, L CMD Up. |
| 212 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 195 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 213 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 196 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
| 214 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 197 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 215 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 198 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 216 } | 199 } |
| 217 | 200 |
| 218 // Test press C key before command key. | 201 // Test press C key before command key. |
| 219 TEST(NormalizingInputFilterMacTest, BeforeCmdKey) { | 202 TEST(NormalizingInputFilterMacTest, BeforeCmdKey) { |
| 220 MockInputStub stub; | 203 MockInputStub stub; |
| 221 scoped_ptr<protocol::InputFilter> processor( | 204 scoped_ptr<protocol::InputFilter> processor( |
| 222 new NormalizingInputFilterMac(&stub)); | 205 new NormalizingInputFilterMac(&stub)); |
| 223 | 206 |
| 224 { | 207 { |
| 225 InSequence s; | 208 InSequence s; |
| 226 | 209 |
| 227 EXPECT_CALL(stub, InjectKeyEvent( | 210 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
| 228 EqualsUsbEvent('C', true))); | 211 EXPECT_CALL(stub, |
| 229 EXPECT_CALL(stub, InjectKeyEvent( | 212 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
| 230 EqualsUsbEvent(kUsbRightCmd, true))); | 213 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
| 231 EXPECT_CALL(stub, InjectKeyEvent( | 214 EXPECT_CALL(stub, |
| 232 EqualsUsbEvent('C', false))); | 215 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, false))); |
| 233 EXPECT_CALL(stub, InjectKeyEvent( | 216 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
| 234 EqualsUsbEvent(kUsbRightCmd, false))); | |
| 235 EXPECT_CALL(stub, InjectKeyEvent( | |
| 236 EqualsUsbEvent('C', false))); | |
| 237 } | 217 } |
| 238 | 218 |
| 239 // Press C before command key. | 219 // Press C before command key. |
| 240 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 220 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
| 241 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 221 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 242 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); | 222 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
| 243 processor->InjectKeyEvent(MakeKeyEvent('C', false)); | 223 processor->InjectKeyEvent(MakeKeyEvent('C', false)); |
| 244 } | 224 } |
| 245 | 225 |
| 246 } // namespace remoting | 226 } // namespace remoting |
| OLD | NEW |