Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: remoting/protocol/input_event_tracker_unittest.cc

Issue 985863002: Move all protocol event matchers to test_event_matchers.h (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/protocol/input_event_tracker.h" 5 #include "remoting/protocol/input_event_tracker.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::_; 13 using ::testing::_;
13 using ::testing::ExpectationSet; 14 using ::testing::ExpectationSet;
14 using ::testing::InSequence; 15 using ::testing::InSequence;
15 16
16 namespace remoting { 17 namespace remoting {
17 namespace protocol { 18 namespace protocol {
18 19
20 using test::EqualsKeyEventWithCapsLock;
21 using test::EqualsMouseEvent;
22 using test::EqualsKeyEventWithoutLockStates;
23
19 namespace { 24 namespace {
20 25
21 static const MouseEvent::MouseButton BUTTON_LEFT = MouseEvent::BUTTON_LEFT; 26 static const MouseEvent::MouseButton BUTTON_LEFT = MouseEvent::BUTTON_LEFT;
22 static const MouseEvent::MouseButton BUTTON_RIGHT = MouseEvent::BUTTON_RIGHT; 27 static const MouseEvent::MouseButton BUTTON_RIGHT = MouseEvent::BUTTON_RIGHT;
23 28
24 // A hardcoded value used to verify |lock_states| is preserved.
25 static const uint32 kTestLockStates = protocol::KeyEvent::LOCK_STATES_CAPSLOCK;
26
27 // Verify the usb key code and the "pressed" state.
28 // Also verify that the event doesn't have |lock_states| set.
29 MATCHER_P2(EqualsUsbEventWithoutLockStates, usb_keycode, pressed, "") {
30 return arg.usb_keycode() == static_cast<uint32>(usb_keycode) &&
31 arg.pressed() == pressed &&
32 !arg.has_lock_states();
33 }
34
35 // Verify the usb key code, the "pressed" state, and the lock states.
36 MATCHER_P2(EqualsUsbEvent, usb_keycode, pressed, "") {
37 return arg.usb_keycode() == static_cast<uint32>(usb_keycode) &&
38 arg.pressed() == pressed &&
39 arg.lock_states() == kTestLockStates;
40 }
41
42 MATCHER_P4(EqualsMouseEvent, x, y, button, down, "") {
43 return arg.x() == x && arg.y() == y && arg.button() == button &&
44 arg.button_down() == down;
45 }
46
47 MATCHER_P2(TouchPointIdsAndTypeEqual, ids, type, "") { 29 MATCHER_P2(TouchPointIdsAndTypeEqual, ids, type, "") {
48 if (arg.event_type() != type) 30 if (arg.event_type() != type)
49 return false; 31 return false;
50 32
51 std::set<uint32> touch_ids; 33 std::set<uint32> touch_ids;
52 for (const TouchEventPoint& point : arg.touch_points()) { 34 for (const TouchEventPoint& point : arg.touch_points()) {
53 touch_ids.insert(point.id()); 35 touch_ids.insert(point.id());
54 } 36 }
55 return touch_ids == ids; 37 return touch_ids == ids;
56 } 38 }
57 39
58 static KeyEvent NewUsbEvent(uint32 usb_keycode, 40 static KeyEvent NewUsbEvent(uint32 usb_keycode, bool pressed) {
59 bool pressed) {
60 KeyEvent event; 41 KeyEvent event;
61 event.set_usb_keycode(usb_keycode); 42 event.set_usb_keycode(usb_keycode);
62 event.set_pressed(pressed); 43 event.set_pressed(pressed);
63 // Create all key events with the hardcoded |lock_state| in this test. 44 // Create all key events with the hardcoded |lock_state| in this test.
64 event.set_lock_states(kTestLockStates); 45 event.set_lock_states(KeyEvent::LOCK_STATES_CAPSLOCK);
65 return event; 46 return event;
66 } 47 }
67 48
68 static void PressAndReleaseUsb(InputStub* input_stub, 49 static void PressAndReleaseUsb(InputStub* input_stub, uint32 usb_keycode) {
69 uint32 usb_keycode) {
70 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, true)); 50 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, true));
71 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, false)); 51 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, false));
72 } 52 }
73 53
74 static MouseEvent NewMouseEvent(int x, int y, 54 static MouseEvent NewMouseEvent(int x,
75 MouseEvent::MouseButton button, bool down) { 55 int y,
56 MouseEvent::MouseButton button,
57 bool down) {
76 MouseEvent event; 58 MouseEvent event;
77 event.set_x(x); 59 event.set_x(x);
78 event.set_y(y); 60 event.set_y(y);
79 event.set_button(button); 61 event.set_button(button);
80 event.set_button_down(down); 62 event.set_button_down(down);
81 return event; 63 return event;
82 } 64 }
83 65
84 void AddTouchPoint(uint32 id, TouchEvent* event) { 66 void AddTouchPoint(uint32 id, TouchEvent* event) {
85 TouchEventPoint* p = event->add_touch_points(); 67 TouchEventPoint* p = event->add_touch_points();
86 p->set_id(id); 68 p->set_id(id);
87 } 69 }
88 70
89 } // namespace 71 } // namespace
90 72
91 // Verify that keys that were pressed and released aren't re-released. 73 // Verify that keys that were pressed and released aren't re-released.
92 TEST(InputEventTrackerTest, NothingToRelease) { 74 TEST(InputEventTrackerTest, NothingToRelease) {
93 MockInputStub mock_stub; 75 MockInputStub mock_stub;
94 InputEventTracker input_tracker(&mock_stub); 76 InputEventTracker input_tracker(&mock_stub);
95 77
96 { 78 {
97 InSequence s; 79 InSequence s;
98 80
99 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, true))); 81 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEventWithCapsLock(1, true)));
100 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, false))); 82 EXPECT_CALL(mock_stub,
101 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 83 InjectKeyEvent(EqualsKeyEventWithCapsLock(1, false)));
102 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 84 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEventWithCapsLock(2, true)));
85 EXPECT_CALL(mock_stub,
86 InjectKeyEvent(EqualsKeyEventWithCapsLock(2, false)));
103 87
104 EXPECT_CALL(mock_stub, 88 EXPECT_CALL(mock_stub,
105 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true))); 89 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true)));
106 EXPECT_CALL(mock_stub, 90 EXPECT_CALL(mock_stub,
107 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, false))); 91 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, false)));
108 } 92 }
109 93
110 PressAndReleaseUsb(&input_tracker, 1); 94 PressAndReleaseUsb(&input_tracker, 1);
111 PressAndReleaseUsb(&input_tracker, 2); 95 PressAndReleaseUsb(&input_tracker, 2);
112 96
113 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true)); 97 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true));
114 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, false)); 98 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, false));
115 99
116 input_tracker.ReleaseAll(); 100 input_tracker.ReleaseAll();
117 } 101 }
118 102
119 // Verify that keys that were left pressed get released. 103 // Verify that keys that were left pressed get released.
120 TEST(InputEventTrackerTest, ReleaseAllKeys) { 104 TEST(InputEventTrackerTest, ReleaseAllKeys) {
121 MockInputStub mock_stub; 105 MockInputStub mock_stub;
122 InputEventTracker input_tracker(&mock_stub); 106 InputEventTracker input_tracker(&mock_stub);
123 ExpectationSet injects; 107 ExpectationSet injects;
124 108
125 { 109 {
126 InSequence s; 110 InSequence s;
127 111
128 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(3, true))); 112 injects += EXPECT_CALL(mock_stub,
129 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, true))); 113 InjectKeyEvent(EqualsKeyEventWithCapsLock(3, true)));
130 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, false))); 114 injects += EXPECT_CALL(mock_stub,
131 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 115 InjectKeyEvent(EqualsKeyEventWithCapsLock(1, true)));
132 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 116 injects += EXPECT_CALL(
117 mock_stub, InjectKeyEvent(EqualsKeyEventWithCapsLock(1, false)));
118 injects += EXPECT_CALL(mock_stub,
119 InjectKeyEvent(EqualsKeyEventWithCapsLock(2, true)));
120 injects += EXPECT_CALL(
121 mock_stub, InjectKeyEvent(EqualsKeyEventWithCapsLock(2, false)));
133 122
134 injects += EXPECT_CALL(mock_stub, 123 injects += EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseEvent(
135 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_RIGHT, true))); 124 0, 0, BUTTON_RIGHT, true)));
136 injects += EXPECT_CALL(mock_stub, 125 injects += EXPECT_CALL(
137 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true))); 126 mock_stub, InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true)));
138 injects += EXPECT_CALL(mock_stub, 127 injects += EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseEvent(
139 InjectMouseEvent(EqualsMouseEvent(1, 1, BUTTON_LEFT, false))); 128 1, 1, BUTTON_LEFT, false)));
140 } 129 }
141 130
142 // The key should be released but |lock_states| should not be set. 131 // The key should be released but |lock_states| should not be set.
143 EXPECT_CALL(mock_stub, 132 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEventWithoutLockStates(
144 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false))) 133 3, false))).After(injects);
145 .After(injects); 134 EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseEvent(
146 EXPECT_CALL(mock_stub, 135 1, 1, BUTTON_RIGHT, false))).After(injects);
147 InjectMouseEvent(EqualsMouseEvent(1, 1, BUTTON_RIGHT, false)))
148 .After(injects);
149 136
150 input_tracker.InjectKeyEvent(NewUsbEvent(3, true)); 137 input_tracker.InjectKeyEvent(NewUsbEvent(3, true));
151 PressAndReleaseUsb(&input_tracker, 1); 138 PressAndReleaseUsb(&input_tracker, 1);
152 PressAndReleaseUsb(&input_tracker, 2); 139 PressAndReleaseUsb(&input_tracker, 2);
153 140
154 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_RIGHT, true)); 141 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_RIGHT, true));
155 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true)); 142 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true));
156 input_tracker.InjectMouseEvent(NewMouseEvent(1, 1, BUTTON_LEFT, false)); 143 input_tracker.InjectMouseEvent(NewMouseEvent(1, 1, BUTTON_LEFT, false));
157 144
158 EXPECT_FALSE(input_tracker.IsKeyPressed(1)); 145 EXPECT_FALSE(input_tracker.IsKeyPressed(1));
159 EXPECT_FALSE(input_tracker.IsKeyPressed(2)); 146 EXPECT_FALSE(input_tracker.IsKeyPressed(2));
160 EXPECT_TRUE(input_tracker.IsKeyPressed(3)); 147 EXPECT_TRUE(input_tracker.IsKeyPressed(3));
161 EXPECT_EQ(1, input_tracker.PressedKeyCount()); 148 EXPECT_EQ(1, input_tracker.PressedKeyCount());
162 149
163 input_tracker.ReleaseAll(); 150 input_tracker.ReleaseAll();
164 } 151 }
165 152
166 // Verify that we track both USB-based key events correctly. 153 // Verify that we track both USB-based key events correctly.
167 TEST(InputEventTrackerTest, TrackUsbKeyEvents) { 154 TEST(InputEventTrackerTest, TrackUsbKeyEvents) {
168 MockInputStub mock_stub; 155 MockInputStub mock_stub;
169 InputEventTracker input_tracker(&mock_stub); 156 InputEventTracker input_tracker(&mock_stub);
170 ExpectationSet injects; 157 ExpectationSet injects;
171 158
172 { 159 {
173 InSequence s; 160 InSequence s;
174 161
175 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(3, true))); 162 injects += EXPECT_CALL(mock_stub,
176 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(6, true))); 163 InjectKeyEvent(EqualsKeyEventWithCapsLock(3, true)));
177 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(7, true))); 164 injects += EXPECT_CALL(mock_stub,
178 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(5, true))); 165 InjectKeyEvent(EqualsKeyEventWithCapsLock(6, true)));
179 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(5, true))); 166 injects += EXPECT_CALL(mock_stub,
180 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 167 InjectKeyEvent(EqualsKeyEventWithCapsLock(7, true)));
181 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 168 injects += EXPECT_CALL(mock_stub,
169 InjectKeyEvent(EqualsKeyEventWithCapsLock(5, true)));
170 injects += EXPECT_CALL(mock_stub,
171 InjectKeyEvent(EqualsKeyEventWithCapsLock(5, true)));
172 injects += EXPECT_CALL(mock_stub,
173 InjectKeyEvent(EqualsKeyEventWithCapsLock(2, true)));
174 injects += EXPECT_CALL(
175 mock_stub, InjectKeyEvent(EqualsKeyEventWithCapsLock(2, false)));
182 } 176 }
183 177
184 // The key should be auto released with no |lock_states|. 178 // The key should be auto released with no |lock_states|.
185 EXPECT_CALL(mock_stub, 179 EXPECT_CALL(mock_stub,
186 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false))) 180 InjectKeyEvent(EqualsKeyEventWithoutLockStates(3, false)))
187 .After(injects); 181 .After(injects);
188 EXPECT_CALL(mock_stub, 182 EXPECT_CALL(mock_stub,
189 InjectKeyEvent(EqualsUsbEventWithoutLockStates(6, false))) 183 InjectKeyEvent(EqualsKeyEventWithoutLockStates(6, false)))
190 .After(injects); 184 .After(injects);
191 EXPECT_CALL(mock_stub, 185 EXPECT_CALL(mock_stub,
192 InjectKeyEvent(EqualsUsbEventWithoutLockStates(7, false))) 186 InjectKeyEvent(EqualsKeyEventWithoutLockStates(7, false)))
193 .After(injects); 187 .After(injects);
194 EXPECT_CALL(mock_stub, 188 EXPECT_CALL(mock_stub,
195 InjectKeyEvent(EqualsUsbEventWithoutLockStates(5, false))) 189 InjectKeyEvent(EqualsKeyEventWithoutLockStates(5, false)))
196 .After(injects); 190 .After(injects);
197 191
198 input_tracker.InjectKeyEvent(NewUsbEvent(3, true)); 192 input_tracker.InjectKeyEvent(NewUsbEvent(3, true));
199 input_tracker.InjectKeyEvent(NewUsbEvent(6, true)); 193 input_tracker.InjectKeyEvent(NewUsbEvent(6, true));
200 input_tracker.InjectKeyEvent(NewUsbEvent(7, true)); 194 input_tracker.InjectKeyEvent(NewUsbEvent(7, true));
201 input_tracker.InjectKeyEvent(NewUsbEvent(5, true)); 195 input_tracker.InjectKeyEvent(NewUsbEvent(5, true));
202 input_tracker.InjectKeyEvent(NewUsbEvent(5, true)); 196 input_tracker.InjectKeyEvent(NewUsbEvent(5, true));
203 PressAndReleaseUsb(&input_tracker, 2); 197 PressAndReleaseUsb(&input_tracker, 2);
204 198
205 EXPECT_FALSE(input_tracker.IsKeyPressed(1)); 199 EXPECT_FALSE(input_tracker.IsKeyPressed(1));
206 EXPECT_FALSE(input_tracker.IsKeyPressed(2)); 200 EXPECT_FALSE(input_tracker.IsKeyPressed(2));
207 EXPECT_TRUE(input_tracker.IsKeyPressed(3)); 201 EXPECT_TRUE(input_tracker.IsKeyPressed(3));
208 EXPECT_TRUE(input_tracker.IsKeyPressed(5)); 202 EXPECT_TRUE(input_tracker.IsKeyPressed(5));
209 EXPECT_TRUE(input_tracker.IsKeyPressed(6)); 203 EXPECT_TRUE(input_tracker.IsKeyPressed(6));
210 EXPECT_TRUE(input_tracker.IsKeyPressed(7)); 204 EXPECT_TRUE(input_tracker.IsKeyPressed(7));
211 EXPECT_EQ(4, input_tracker.PressedKeyCount()); 205 EXPECT_EQ(4, input_tracker.PressedKeyCount());
212 206
213 input_tracker.ReleaseAll(); 207 input_tracker.ReleaseAll();
214 } 208 }
215 209
216 // Verify that invalid events get passed through but not tracked. 210 // Verify that invalid events get passed through but not tracked.
217 TEST(InputEventTrackerTest, InvalidEventsNotTracked) { 211 TEST(InputEventTrackerTest, InvalidEventsNotTracked) {
218 MockInputStub mock_stub; 212 MockInputStub mock_stub;
219 InputEventTracker input_tracker(&mock_stub); 213 InputEventTracker input_tracker(&mock_stub);
220 ExpectationSet injects; 214 ExpectationSet injects;
221 215
222 { 216 {
223 InSequence s; 217 InSequence s;
224 218
225 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(3, true))); 219 injects += EXPECT_CALL(mock_stub,
226 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, true))); 220 InjectKeyEvent(EqualsKeyEventWithCapsLock(3, true)));
227 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, false))); 221 injects += EXPECT_CALL(mock_stub,
222 InjectKeyEvent(EqualsKeyEventWithCapsLock(1, true)));
223 injects += EXPECT_CALL(
224 mock_stub, InjectKeyEvent(EqualsKeyEventWithCapsLock(1, false)));
228 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(_)).Times(2); 225 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(_)).Times(2);
229 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 226 injects += EXPECT_CALL(mock_stub,
230 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 227 InjectKeyEvent(EqualsKeyEventWithCapsLock(2, true)));
228 injects += EXPECT_CALL(
229 mock_stub, InjectKeyEvent(EqualsKeyEventWithCapsLock(2, false)));
231 } 230 }
232 231
233 EXPECT_CALL(mock_stub, 232 EXPECT_CALL(mock_stub,
234 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false))) 233 InjectKeyEvent(EqualsKeyEventWithoutLockStates(3, false)))
235 .After(injects); 234 .After(injects);
236 235
237 input_tracker.InjectKeyEvent(NewUsbEvent(3, true)); 236 input_tracker.InjectKeyEvent(NewUsbEvent(3, true));
238 PressAndReleaseUsb(&input_tracker, 1); 237 PressAndReleaseUsb(&input_tracker, 1);
239 238
240 KeyEvent invalid_event1; 239 KeyEvent invalid_event1;
241 invalid_event1.set_pressed(true); 240 invalid_event1.set_pressed(true);
242 input_tracker.InjectKeyEvent(invalid_event1); 241 input_tracker.InjectKeyEvent(invalid_event1);
243 242
244 KeyEvent invalid_event2; 243 KeyEvent invalid_event2;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 TouchEvent cancel_event; 346 TouchEvent cancel_event;
348 cancel_event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); 347 cancel_event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL);
349 AddTouchPoint(3, &cancel_event); 348 AddTouchPoint(3, &cancel_event);
350 input_tracker.InjectTouchEvent(cancel_event); 349 input_tracker.InjectTouchEvent(cancel_event);
351 350
352 input_tracker.ReleaseAll(); 351 input_tracker.ReleaseAll();
353 } 352 }
354 353
355 } // namespace protocol 354 } // namespace protocol
356 } // namespace remoting 355 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/clipboard_filter_unittest.cc ('k') | remoting/protocol/input_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698