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

Side by Side Diff: components/webusb/webusb_detector_unittest.cc

Issue 2146663002: Move //components/webusb/ to //chrome/browser/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merged web_usb_browser_client.* to web_usb_detector.* Created 4 years, 5 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
« no previous file with comments | « components/webusb/webusb_detector.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 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 "components/webusb/webusb_detector.h"
6
7 #include <string>
8
9 #include "base/macros.h"
10 #include "base/strings/string16.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "components/webusb/webusb_browser_client.h"
13 #include "device/core/mock_device_client.h"
14 #include "device/usb/mock_usb_device.h"
15 #include "device/usb/mock_usb_service.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "url/gurl.h"
19
20 namespace {
21
22 // usb device product name
23 const char* kProductName_1 = "Google Product A";
24 const char* kProductName_2 = "Google Product B";
25 const char* kProductName_3 = "Google Product C";
26
27 // usb device landing page
28 const char* kLandingPage_1 = "https://www.google.com/A";
29 const char* kLandingPage_2 = "https://www.google.com/B";
30 const char* kLandingPage_3 = "https://www.google.com/C";
31
32 } // namespace
33
34 namespace webusb {
35
36 namespace {
37
38 class MockWebUsbBrowserClient : public webusb::WebUsbBrowserClient {
39 public:
40 MockWebUsbBrowserClient() {}
41
42 ~MockWebUsbBrowserClient() override {}
43
44 // webusb::WebUsbBrowserClient implementation
45 MOCK_METHOD3(OnDeviceAdded,
46 void(const base::string16& product_name,
47 const GURL& landing_page,
48 const std::string& notification_id));
49
50 // webusb::WebUsbBrowserClient implementation
51 MOCK_METHOD1(OnDeviceRemoved, void(const std::string& notification_id));
52
53 private:
54 DISALLOW_COPY_AND_ASSIGN(MockWebUsbBrowserClient);
55 };
56
57 } // namespace
58
59 class WebUsbDetectorTest : public testing::Test {
60 public:
61 WebUsbDetectorTest() {}
62
63 ~WebUsbDetectorTest() override = default;
64
65 protected:
66 device::MockDeviceClient device_client_;
67 MockWebUsbBrowserClient mock_webusb_browser_client_;
68
69 private:
70 DISALLOW_COPY_AND_ASSIGN(WebUsbDetectorTest);
71 };
72
73 TEST_F(WebUsbDetectorTest, UsbDeviceAdded) {
74 base::string16 product_name = base::UTF8ToUTF16(kProductName_1);
75 GURL landing_page(kLandingPage_1);
76 scoped_refptr<device::MockUsbDevice> device(new device::MockUsbDevice(
77 0, 1, "Google", kProductName_1, "002", landing_page));
78 std::string guid = device->guid();
79
80 EXPECT_CALL(mock_webusb_browser_client_,
81 OnDeviceAdded(product_name, landing_page, guid))
82 .Times(1);
83 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(testing::_))
84 .Times(0);
85
86 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
87
88 device_client_.usb_service()->AddDevice(device);
89 }
90
91 TEST_F(WebUsbDetectorTest, UsbDeviceAddedAndRemoved) {
92 base::string16 product_name = base::UTF8ToUTF16(kProductName_1);
93 GURL landing_page(kLandingPage_1);
94 scoped_refptr<device::MockUsbDevice> device(new device::MockUsbDevice(
95 0, 1, "Google", kProductName_1, "002", landing_page));
96 std::string guid = device->guid();
97
98 {
99 testing::InSequence s;
100 EXPECT_CALL(mock_webusb_browser_client_,
101 OnDeviceAdded(product_name, landing_page, guid))
102 .Times(1);
103 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid)).Times(1);
104 }
105
106 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
107
108 device_client_.usb_service()->AddDevice(device);
109 device_client_.usb_service()->RemoveDevice(device);
110 }
111
112 TEST_F(WebUsbDetectorTest, UsbDeviceWithoutProductNameAddedAndRemoved) {
113 std::string product_name = "";
114 GURL landing_page(kLandingPage_1);
115 scoped_refptr<device::MockUsbDevice> device(new device::MockUsbDevice(
116 0, 1, "Google", product_name, "002", landing_page));
117 std::string guid = device->guid();
118
119 EXPECT_CALL(mock_webusb_browser_client_,
120 OnDeviceAdded(testing::_, testing::_, testing::_))
121 .Times(0);
122 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid)).Times(1);
123
124 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
125
126 device_client_.usb_service()->AddDevice(device);
127 device_client_.usb_service()->RemoveDevice(device);
128 }
129
130 TEST_F(WebUsbDetectorTest, UsbDeviceWithoutLandingPageAddedAndRemoved) {
131 GURL landing_page("");
132 scoped_refptr<device::MockUsbDevice> device(new device::MockUsbDevice(
133 0, 1, "Google", kProductName_1, "002", landing_page));
134 std::string guid = device->guid();
135
136 EXPECT_CALL(mock_webusb_browser_client_,
137 OnDeviceAdded(testing::_, testing::_, testing::_))
138 .Times(0);
139 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid)).Times(1);
140
141 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
142
143 device_client_.usb_service()->AddDevice(device);
144 device_client_.usb_service()->RemoveDevice(device);
145 }
146
147 TEST_F(WebUsbDetectorTest, WebUsbBrowserClientIsNullptr) {
148 GURL landing_page(kLandingPage_1);
149 scoped_refptr<device::MockUsbDevice> device(new device::MockUsbDevice(
150 0, 1, "Google", kProductName_1, "002", landing_page));
151
152 EXPECT_CALL(mock_webusb_browser_client_,
153 OnDeviceAdded(testing::_, testing::_, testing::_))
154 .Times(0);
155 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(testing::_))
156 .Times(0);
157
158 webusb::WebUsbDetector webusb_detector(nullptr);
159
160 device_client_.usb_service()->AddDevice(device);
161 device_client_.usb_service()->RemoveDevice(device);
162 }
163
164 TEST_F(WebUsbDetectorTest, NoUsbService) {
165 GURL landing_page(kLandingPage_1);
166 scoped_refptr<device::MockUsbDevice> device(new device::MockUsbDevice(
167 0, 1, "Google", kProductName_1, "002", landing_page));
168
169 EXPECT_CALL(mock_webusb_browser_client_,
170 OnDeviceAdded(testing::_, testing::_, testing::_))
171 .Times(0);
172 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(testing::_))
173 .Times(0);
174
175 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
176 }
177
178 TEST_F(WebUsbDetectorTest, UsbDeviceWasThereBeforeAndThenRemoved) {
179 GURL landing_page(kLandingPage_1);
180 scoped_refptr<device::MockUsbDevice> device(new device::MockUsbDevice(
181 0, 1, "Google", kProductName_1, "002", landing_page));
182 std::string guid = device->guid();
183
184 EXPECT_CALL(mock_webusb_browser_client_,
185 OnDeviceAdded(testing::_, testing::_, testing::_))
186 .Times(0);
187 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid)).Times(1);
188
189 // usb device was added before webusb_detector was created
190 device_client_.usb_service()->AddDevice(device);
191
192 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
193
194 device_client_.usb_service()->RemoveDevice(device);
195 }
196
197 TEST_F(
198 WebUsbDetectorTest,
199 ThreeUsbDevicesWereThereBeforeAndThenRemovedBeforeWebUsbDetectorWasCreated) {
200 base::string16 product_name_1 = base::UTF8ToUTF16(kProductName_1);
201 GURL landing_page_1(kLandingPage_1);
202 scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
203 0, 1, "Google", kProductName_1, "002", landing_page_1));
204 std::string guid_1 = device_1->guid();
205
206 base::string16 product_name_2 = base::UTF8ToUTF16(kProductName_2);
207 GURL landing_page_2(kLandingPage_2);
208 scoped_refptr<device::MockUsbDevice> device_2(new device::MockUsbDevice(
209 3, 4, "Google", kProductName_2, "005", landing_page_2));
210 std::string guid_2 = device_2->guid();
211
212 base::string16 product_name_3 = base::UTF8ToUTF16(kProductName_3);
213 GURL landing_page_3(kLandingPage_3);
214 scoped_refptr<device::MockUsbDevice> device_3(new device::MockUsbDevice(
215 6, 7, "Google", kProductName_3, "008", landing_page_3));
216 std::string guid_3 = device_3->guid();
217
218 EXPECT_CALL(mock_webusb_browser_client_,
219 OnDeviceAdded(product_name_1, landing_page_1, guid_1))
220 .Times(0);
221 EXPECT_CALL(mock_webusb_browser_client_,
222 OnDeviceAdded(product_name_2, landing_page_2, guid_2))
223 .Times(0);
224 EXPECT_CALL(mock_webusb_browser_client_,
225 OnDeviceAdded(product_name_3, landing_page_3, guid_3))
226 .Times(0);
227
228 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_1)).Times(0);
229 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_2)).Times(0);
230 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_3)).Times(0);
231
232 // three usb devices were added and removed before webusb_detector was
233 // created
234 device_client_.usb_service()->AddDevice(device_1);
235 device_client_.usb_service()->AddDevice(device_2);
236 device_client_.usb_service()->AddDevice(device_3);
237
238 device_client_.usb_service()->RemoveDevice(device_1);
239 device_client_.usb_service()->RemoveDevice(device_2);
240 device_client_.usb_service()->RemoveDevice(device_3);
241
242 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
243 }
244
245 TEST_F(
246 WebUsbDetectorTest,
247 ThreeUsbDevicesWereThereBeforeAndThenRemovedAfterWebUsbDetectorWasCreated) {
248 base::string16 product_name_1 = base::UTF8ToUTF16(kProductName_1);
249 GURL landing_page_1(kLandingPage_1);
250 scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
251 0, 1, "Google", kProductName_1, "002", landing_page_1));
252 std::string guid_1 = device_1->guid();
253
254 base::string16 product_name_2 = base::UTF8ToUTF16(kProductName_2);
255 GURL landing_page_2(kLandingPage_2);
256 scoped_refptr<device::MockUsbDevice> device_2(new device::MockUsbDevice(
257 3, 4, "Google", kProductName_2, "005", landing_page_2));
258 std::string guid_2 = device_2->guid();
259
260 base::string16 product_name_3 = base::UTF8ToUTF16(kProductName_3);
261 GURL landing_page_3(kLandingPage_3);
262 scoped_refptr<device::MockUsbDevice> device_3(new device::MockUsbDevice(
263 6, 7, "Google", kProductName_3, "008", landing_page_3));
264 std::string guid_3 = device_3->guid();
265
266 EXPECT_CALL(mock_webusb_browser_client_,
267 OnDeviceAdded(product_name_1, landing_page_1, guid_1))
268 .Times(0);
269 EXPECT_CALL(mock_webusb_browser_client_,
270 OnDeviceAdded(product_name_2, landing_page_2, guid_2))
271 .Times(0);
272 EXPECT_CALL(mock_webusb_browser_client_,
273 OnDeviceAdded(product_name_3, landing_page_3, guid_3))
274 .Times(0);
275
276 {
277 testing::InSequence s;
278
279 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_1)).Times(1);
280 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_2)).Times(1);
281 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_3)).Times(1);
282 }
283
284 // three usb devices were added before webusb_detector was created
285 device_client_.usb_service()->AddDevice(device_1);
286 device_client_.usb_service()->AddDevice(device_2);
287 device_client_.usb_service()->AddDevice(device_3);
288
289 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
290
291 device_client_.usb_service()->RemoveDevice(device_1);
292 device_client_.usb_service()->RemoveDevice(device_2);
293 device_client_.usb_service()->RemoveDevice(device_3);
294 }
295
296 TEST_F(WebUsbDetectorTest,
297 TwoUsbDevicesWereThereBeforeAndThenRemovedAndNewUsbDeviceAdded) {
298 base::string16 product_name_1 = base::UTF8ToUTF16(kProductName_1);
299 GURL landing_page_1(kLandingPage_1);
300 scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
301 0, 1, "Google", kProductName_1, "002", landing_page_1));
302 std::string guid_1 = device_1->guid();
303
304 base::string16 product_name_2 = base::UTF8ToUTF16(kProductName_2);
305 GURL landing_page_2(kLandingPage_2);
306 scoped_refptr<device::MockUsbDevice> device_2(new device::MockUsbDevice(
307 3, 4, "Google", kProductName_2, "005", landing_page_2));
308 std::string guid_2 = device_2->guid();
309
310 base::string16 product_name_3 = base::UTF8ToUTF16(kProductName_3);
311 GURL landing_page_3(kLandingPage_3);
312 scoped_refptr<device::MockUsbDevice> device_3(new device::MockUsbDevice(
313 6, 7, "Google", kProductName_3, "008", landing_page_3));
314 std::string guid_3 = device_3->guid();
315
316 EXPECT_CALL(mock_webusb_browser_client_,
317 OnDeviceAdded(product_name_1, landing_page_1, guid_1))
318 .Times(0);
319 EXPECT_CALL(mock_webusb_browser_client_,
320 OnDeviceAdded(product_name_3, landing_page_3, guid_3))
321 .Times(0);
322
323 {
324 testing::InSequence s;
325
326 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_1)).Times(1);
327 EXPECT_CALL(mock_webusb_browser_client_,
328 OnDeviceAdded(product_name_2, landing_page_2, guid_2))
329 .Times(1);
330 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_3)).Times(1);
331 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_2)).Times(1);
332 }
333
334 // two usb devices were added before webusb_detector was created
335 device_client_.usb_service()->AddDevice(device_1);
336 device_client_.usb_service()->AddDevice(device_3);
337
338 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
339
340 device_client_.usb_service()->RemoveDevice(device_1);
341 device_client_.usb_service()->AddDevice(device_2);
342 device_client_.usb_service()->RemoveDevice(device_3);
343 device_client_.usb_service()->RemoveDevice(device_2);
344 }
345
346 TEST_F(WebUsbDetectorTest, ThreeUsbDevicesAddedAndRemoved) {
347 base::string16 product_name_1 = base::UTF8ToUTF16(kProductName_1);
348 GURL landing_page_1(kLandingPage_1);
349 scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
350 0, 1, "Google", kProductName_1, "002", landing_page_1));
351 std::string guid_1 = device_1->guid();
352
353 base::string16 product_name_2 = base::UTF8ToUTF16(kProductName_2);
354 GURL landing_page_2(kLandingPage_2);
355 scoped_refptr<device::MockUsbDevice> device_2(new device::MockUsbDevice(
356 3, 4, "Google", kProductName_2, "005", landing_page_2));
357 std::string guid_2 = device_2->guid();
358
359 base::string16 product_name_3 = base::UTF8ToUTF16(kProductName_3);
360 GURL landing_page_3(kLandingPage_3);
361 scoped_refptr<device::MockUsbDevice> device_3(new device::MockUsbDevice(
362 6, 7, "Google", kProductName_3, "008", landing_page_3));
363 std::string guid_3 = device_3->guid();
364
365 {
366 testing::InSequence s;
367
368 EXPECT_CALL(mock_webusb_browser_client_,
369 OnDeviceAdded(product_name_1, landing_page_1, guid_1))
370 .Times(1);
371 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_1)).Times(1);
372
373 EXPECT_CALL(mock_webusb_browser_client_,
374 OnDeviceAdded(product_name_2, landing_page_2, guid_2))
375 .Times(1);
376 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_2)).Times(1);
377
378 EXPECT_CALL(mock_webusb_browser_client_,
379 OnDeviceAdded(product_name_3, landing_page_3, guid_3))
380 .Times(1);
381 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_3)).Times(1);
382 }
383
384 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
385
386 device_client_.usb_service()->AddDevice(device_1);
387 device_client_.usb_service()->RemoveDevice(device_1);
388 device_client_.usb_service()->AddDevice(device_2);
389 device_client_.usb_service()->RemoveDevice(device_2);
390 device_client_.usb_service()->AddDevice(device_3);
391 device_client_.usb_service()->RemoveDevice(device_3);
392 }
393
394 TEST_F(WebUsbDetectorTest, ThreeUsbDeviceAddedAndRemovedDifferentOrder) {
395 base::string16 product_name_1 = base::UTF8ToUTF16(kProductName_1);
396 GURL landing_page_1(kLandingPage_1);
397 scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
398 0, 1, "Google", kProductName_1, "002", landing_page_1));
399 std::string guid_1 = device_1->guid();
400
401 base::string16 product_name_2 = base::UTF8ToUTF16(kProductName_2);
402 GURL landing_page_2(kLandingPage_2);
403 scoped_refptr<device::MockUsbDevice> device_2(new device::MockUsbDevice(
404 3, 4, "Google", kProductName_2, "005", landing_page_2));
405 std::string guid_2 = device_2->guid();
406
407 base::string16 product_name_3 = base::UTF8ToUTF16(kProductName_3);
408 GURL landing_page_3(kLandingPage_3);
409 scoped_refptr<device::MockUsbDevice> device_3(new device::MockUsbDevice(
410 6, 7, "Google", kProductName_3, "008", landing_page_3));
411 std::string guid_3 = device_3->guid();
412
413 {
414 testing::InSequence s;
415
416 EXPECT_CALL(mock_webusb_browser_client_,
417 OnDeviceAdded(product_name_1, landing_page_1, guid_1))
418 .Times(1);
419
420 EXPECT_CALL(mock_webusb_browser_client_,
421 OnDeviceAdded(product_name_2, landing_page_2, guid_2))
422 .Times(1);
423
424 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_2)).Times(1);
425
426 EXPECT_CALL(mock_webusb_browser_client_,
427 OnDeviceAdded(product_name_3, landing_page_3, guid_3))
428 .Times(1);
429
430 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_1)).Times(1);
431
432 EXPECT_CALL(mock_webusb_browser_client_, OnDeviceRemoved(guid_3)).Times(1);
433 }
434
435 webusb::WebUsbDetector webusb_detector(&mock_webusb_browser_client_);
436
437 device_client_.usb_service()->AddDevice(device_1);
438 device_client_.usb_service()->AddDevice(device_2);
439 device_client_.usb_service()->RemoveDevice(device_2);
440 device_client_.usb_service()->AddDevice(device_3);
441 device_client_.usb_service()->RemoveDevice(device_1);
442 device_client_.usb_service()->RemoveDevice(device_3);
443 }
444
445 } // namespace webusb
OLDNEW
« no previous file with comments | « components/webusb/webusb_detector.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698