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

Side by Side Diff: chrome/browser/devtools/device/usb/android_usb_browsertest.cc

Issue 980023002: Move device/usb classes from the FILE thread to UI thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed first round of rocket@ feedback. Created 5 years, 8 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <algorithm> 5 #include <algorithm>
6 6
7 #include "base/containers/scoped_ptr_hash_map.h" 7 #include "base/containers/scoped_ptr_hash_map.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/devtools/device/adb/mock_adb_server.h" 9 #include "chrome/browser/devtools/device/adb/mock_adb_server.h"
10 #include "chrome/browser/devtools/device/devtools_android_bridge.h" 10 #include "chrome/browser/devtools/device/devtools_android_bridge.h"
(...skipping 11 matching lines...) Expand all
22 22
23 using content::BrowserThread; 23 using content::BrowserThread;
24 using device::UsbConfigDescriptor; 24 using device::UsbConfigDescriptor;
25 using device::UsbDevice; 25 using device::UsbDevice;
26 using device::UsbDeviceHandle; 26 using device::UsbDeviceHandle;
27 using device::UsbEndpointDescriptor; 27 using device::UsbEndpointDescriptor;
28 using device::UsbEndpointDirection; 28 using device::UsbEndpointDirection;
29 using device::UsbInterfaceDescriptor; 29 using device::UsbInterfaceDescriptor;
30 using device::UsbService; 30 using device::UsbService;
31 using device::UsbSynchronizationType; 31 using device::UsbSynchronizationType;
32 using device::UsbTransferCallback;
33 using device::UsbTransferType; 32 using device::UsbTransferType;
34 using device::UsbUsageType; 33 using device::UsbUsageType;
35 34
36 namespace { 35 namespace {
37 36
38 struct NoConfigTraits { 37 struct NoConfigTraits {
39 static const int kClass = 0xff; 38 static const int kClass = 0xff;
40 static const int kSubclass = 0x42; 39 static const int kSubclass = 0x42;
41 static const int kProtocol = 0x1; 40 static const int kProtocol = 0x1;
42 static const bool kBreaks = false; 41 static const bool kBreaks = false;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 last_local_socket_(0), 119 last_local_socket_(0),
121 broken_(false) { 120 broken_(false) {
122 } 121 }
123 122
124 virtual scoped_refptr<UsbDevice> GetDevice() const override { 123 virtual scoped_refptr<UsbDevice> GetDevice() const override {
125 return device_; 124 return device_;
126 } 125 }
127 126
128 virtual void Close() override { device_ = nullptr; } 127 virtual void Close() override { device_ = nullptr; }
129 128
130 bool SetConfiguration(int configuration_value) override { return true; } 129 void SetConfiguration(int configuration_value,
130 const ResultCallback& callback) override {
131 NOTIMPLEMENTED();
132 }
131 133
132 bool ClaimInterface(int interface_number) override { 134 void ClaimInterface(int interface_number,
133 if (device_->claimed_interfaces_.find(interface_number) != 135 const ResultCallback& callback) override {
134 device_->claimed_interfaces_.end()) 136 bool success = false;
135 return false; 137 if (device_->claimed_interfaces_.find(interface_number) ==
138 device_->claimed_interfaces_.end()) {
139 device_->claimed_interfaces_.insert(interface_number);
140 success = true;
141 }
136 142
137 device_->claimed_interfaces_.insert(interface_number); 143 base::MessageLoop::current()->PostTask(FROM_HERE,
138 return true; 144 base::Bind(callback, success));
139 } 145 }
140 146
141 bool ReleaseInterface(int interface_number) override { 147 bool ReleaseInterface(int interface_number) override {
142 if (device_->claimed_interfaces_.find(interface_number) == 148 if (device_->claimed_interfaces_.find(interface_number) ==
143 device_->claimed_interfaces_.end()) 149 device_->claimed_interfaces_.end())
144 return false; 150 return false;
145 151
146 device_->claimed_interfaces_.erase(interface_number); 152 device_->claimed_interfaces_.erase(interface_number);
147 return true; 153 return true;
148 } 154 }
149 155
150 virtual bool SetInterfaceAlternateSetting(int interface_number, 156 void SetInterfaceAlternateSetting(int interface_number,
151 int alternate_setting) override { 157 int alternate_setting,
152 return true; 158 const ResultCallback& callback) override {
159 NOTIMPLEMENTED();
153 } 160 }
154 161
155 virtual bool ResetDevice() override { return true; } 162 void ResetDevice(const ResultCallback& callback) override {
156 bool GetStringDescriptor(uint8_t string_id, 163 NOTIMPLEMENTED();
157 base::string16* content) override {
158 return false;
159 } 164 }
160 165
161 // Async IO. Can be called on any thread. 166 // Async IO. Can be called on any thread.
162 virtual void ControlTransfer(UsbEndpointDirection direction, 167 void ControlTransfer(UsbEndpointDirection direction,
163 TransferRequestType request_type, 168 TransferRequestType request_type,
164 TransferRecipient recipient, 169 TransferRecipient recipient,
165 uint8 request, 170 uint8 request,
166 uint16 value, 171 uint16 value,
167 uint16 index, 172 uint16 index,
168 net::IOBuffer* buffer, 173 net::IOBuffer* buffer,
169 size_t length, 174 size_t length,
170 unsigned int timeout, 175 unsigned int timeout,
171 const UsbTransferCallback& callback) override {} 176 const TransferCallback& callback) override {}
172 177
173 virtual void BulkTransfer(UsbEndpointDirection direction, 178 void BulkTransfer(UsbEndpointDirection direction,
174 uint8 endpoint, 179 uint8 endpoint,
175 net::IOBuffer* buffer, 180 net::IOBuffer* buffer,
176 size_t length, 181 size_t length,
177 unsigned int timeout, 182 unsigned int timeout,
178 const UsbTransferCallback& callback) override { 183 const TransferCallback& callback) override {
179 if (direction == device::USB_DIRECTION_OUTBOUND) { 184 if (direction == device::USB_DIRECTION_OUTBOUND) {
180 if (remaining_body_length_ == 0) { 185 if (remaining_body_length_ == 0) {
181 std::vector<uint32> header(6); 186 std::vector<uint32> header(6);
182 memcpy(&header[0], buffer->data(), length); 187 memcpy(&header[0], buffer->data(), length);
183 current_message_.reset( 188 current_message_.reset(
184 new AdbMessage(header[0], header[1], header[2], std::string())); 189 new AdbMessage(header[0], header[1], header[2], std::string()));
185 remaining_body_length_ = header[3]; 190 remaining_body_length_ = header[3];
186 uint32 magic = header[5]; 191 uint32 magic = header[5];
187 if ((current_message_->command ^ 0xffffffff) != magic) { 192 if ((current_message_->command ^ 0xffffffff) != magic) {
188 DCHECK(false) << "Header checksum error"; 193 DCHECK(false) << "Header checksum error";
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 output_buffer_.begin() + query.size); 334 output_buffer_.begin() + query.size);
330 base::MessageLoop::current()->PostTask( 335 base::MessageLoop::current()->PostTask(
331 FROM_HERE, 336 FROM_HERE,
332 base::Bind(query.callback, 337 base::Bind(query.callback,
333 device::USB_TRANSFER_COMPLETED, 338 device::USB_TRANSFER_COMPLETED,
334 query.buffer, 339 query.buffer,
335 query.size)); 340 query.size));
336 341
337 } 342 }
338 343
339 virtual void InterruptTransfer(UsbEndpointDirection direction, 344 void InterruptTransfer(UsbEndpointDirection direction,
340 uint8 endpoint, 345 uint8 endpoint,
341 net::IOBuffer* buffer, 346 net::IOBuffer* buffer,
342 size_t length, 347 size_t length,
343 unsigned int timeout, 348 unsigned int timeout,
344 const UsbTransferCallback& callback) override { 349 const TransferCallback& callback) override {}
345 }
346 350
347 virtual void IsochronousTransfer( 351 void IsochronousTransfer(UsbEndpointDirection direction,
348 UsbEndpointDirection direction, 352 uint8 endpoint,
349 uint8 endpoint, 353 net::IOBuffer* buffer,
350 net::IOBuffer* buffer, 354 size_t length,
351 size_t length, 355 unsigned int packets,
352 unsigned int packets, 356 unsigned int packet_length,
353 unsigned int packet_length, 357 unsigned int timeout,
354 unsigned int timeout, 358 const TransferCallback& callback) override {}
355 const UsbTransferCallback& callback) override {}
356 359
357 protected: 360 protected:
358 virtual ~MockUsbDeviceHandle() {} 361 virtual ~MockUsbDeviceHandle() {}
359 362
360 struct Query { 363 struct Query {
361 UsbTransferCallback callback; 364 TransferCallback callback;
362 scoped_refptr<net::IOBuffer> buffer; 365 scoped_refptr<net::IOBuffer> buffer;
363 size_t size; 366 size_t size;
364 367
365 Query(UsbTransferCallback callback, 368 Query(TransferCallback callback,
366 scoped_refptr<net::IOBuffer> buffer, 369 scoped_refptr<net::IOBuffer> buffer,
367 int size) 370 int size)
368 : callback(callback), buffer(buffer), size(size) {}; 371 : callback(callback), buffer(buffer), size(size) {}
369 }; 372 };
370 373
371 scoped_refptr<MockUsbDevice<T> > device_; 374 scoped_refptr<MockUsbDevice<T> > device_;
372 uint32 remaining_body_length_; 375 uint32 remaining_body_length_;
373 scoped_ptr<AdbMessage> current_message_; 376 scoped_ptr<AdbMessage> current_message_;
374 std::vector<char> output_buffer_; 377 std::vector<char> output_buffer_;
375 std::queue<Query> queries_; 378 std::queue<Query> queries_;
376 base::ScopedPtrHashMap<int, MockLocalSocket> local_sockets_; 379 base::ScopedPtrHashMap<int, MockLocalSocket> local_sockets_;
377 int last_local_socket_; 380 int last_local_socket_;
378 bool broken_; 381 bool broken_;
379 }; 382 };
380 383
381 template <class T> 384 template <class T>
382 class MockUsbDevice : public UsbDevice { 385 class MockUsbDevice : public UsbDevice {
383 public: 386 public:
384 MockUsbDevice() : UsbDevice(0, 0, 0) { 387 MockUsbDevice()
388 : UsbDevice(0,
389 0,
390 0,
391 base::UTF8ToUTF16(kDeviceManufacturer),
392 base::UTF8ToUTF16(kDeviceModel),
393 base::UTF8ToUTF16(kDeviceSerial)) {
385 UsbEndpointDescriptor bulk_in; 394 UsbEndpointDescriptor bulk_in;
386 bulk_in.address = 0x81; 395 bulk_in.address = 0x81;
387 bulk_in.direction = device::USB_DIRECTION_INBOUND; 396 bulk_in.direction = device::USB_DIRECTION_INBOUND;
388 bulk_in.maximum_packet_size = 512; 397 bulk_in.maximum_packet_size = 512;
389 bulk_in.transfer_type = device::USB_TRANSFER_BULK; 398 bulk_in.transfer_type = device::USB_TRANSFER_BULK;
390 399
391 UsbEndpointDescriptor bulk_out; 400 UsbEndpointDescriptor bulk_out;
392 bulk_out.address = 0x01; 401 bulk_out.address = 0x01;
393 bulk_out.direction = device::USB_DIRECTION_OUTBOUND; 402 bulk_out.direction = device::USB_DIRECTION_OUTBOUND;
394 bulk_out.maximum_packet_size = 512; 403 bulk_out.maximum_packet_size = 512;
395 bulk_out.transfer_type = device::USB_TRANSFER_BULK; 404 bulk_out.transfer_type = device::USB_TRANSFER_BULK;
396 405
397 UsbInterfaceDescriptor interface_desc; 406 UsbInterfaceDescriptor interface_desc;
398 interface_desc.interface_number = 0; 407 interface_desc.interface_number = 0;
399 interface_desc.alternate_setting = 0; 408 interface_desc.alternate_setting = 0;
400 interface_desc.interface_class = T::kClass; 409 interface_desc.interface_class = T::kClass;
401 interface_desc.interface_subclass = T::kSubclass; 410 interface_desc.interface_subclass = T::kSubclass;
402 interface_desc.interface_protocol = T::kProtocol; 411 interface_desc.interface_protocol = T::kProtocol;
403 interface_desc.endpoints.push_back(bulk_in); 412 interface_desc.endpoints.push_back(bulk_in);
404 interface_desc.endpoints.push_back(bulk_out); 413 interface_desc.endpoints.push_back(bulk_out);
405 414
406 config_desc_.interfaces.push_back(interface_desc); 415 config_desc_.interfaces.push_back(interface_desc);
407 } 416 }
408 417
409 virtual scoped_refptr<UsbDeviceHandle> Open() override { 418 void Open(const OpenCallback& callback) override {
410 return new MockUsbDeviceHandle<T>(this); 419 base::MessageLoop::current()->PostTask(
420 FROM_HERE, base::Bind(callback, make_scoped_refptr(
421 new MockUsbDeviceHandle<T>(this))));
411 } 422 }
412 423
413 virtual const UsbConfigDescriptor* GetConfiguration() override { 424 const UsbConfigDescriptor* GetConfiguration() override {
414 return T::kConfigured ? &config_desc_ : nullptr; 425 return T::kConfigured ? &config_desc_ : nullptr;
415 } 426 }
416 427
417 virtual bool GetManufacturer(base::string16* manufacturer) override { 428 bool Close(scoped_refptr<UsbDeviceHandle> handle) override { return true; }
418 *manufacturer = base::UTF8ToUTF16(kDeviceManufacturer);
419 return true;
420 }
421
422 virtual bool GetProduct(base::string16* product) override {
423 *product = base::UTF8ToUTF16(kDeviceModel);
424 return true;
425 }
426
427 virtual bool GetSerialNumber(base::string16* serial) override {
428 *serial = base::UTF8ToUTF16(kDeviceSerial);
429 return true;
430 }
431
432 virtual bool Close(scoped_refptr<UsbDeviceHandle> handle) override {
433 return true;
434 }
435 429
436 std::set<int> claimed_interfaces_; 430 std::set<int> claimed_interfaces_;
437 431
438 protected: 432 protected:
439 virtual ~MockUsbDevice() {} 433 virtual ~MockUsbDevice() {}
440 434
441 private: 435 private:
442 UsbConfigDescriptor config_desc_; 436 UsbConfigDescriptor config_desc_;
443 }; 437 };
444 438
445 class MockUsbService : public UsbService { 439 class MockUsbService : public UsbService {
446 public: 440 public:
447 MockUsbService() { 441 MockUsbService() {
448 devices_.push_back(new MockUsbDevice<AndroidTraits>()); 442 devices_.push_back(new MockUsbDevice<AndroidTraits>());
449 } 443 }
450 444
451 scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { 445 scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override {
452 NOTIMPLEMENTED(); 446 NOTIMPLEMENTED();
453 return nullptr; 447 return nullptr;
454 } 448 }
455 449
456 void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override { 450 void GetDevices(const GetDevicesCallback& callback) override {
457 STLClearObject(devices); 451 callback.Run(devices_);
458 std::copy(devices_.begin(), devices_.end(), back_inserter(*devices));
459 } 452 }
460 453
461 std::vector<scoped_refptr<UsbDevice> > devices_; 454 std::vector<scoped_refptr<UsbDevice> > devices_;
462 }; 455 };
463 456
464 class MockBreakingUsbService : public UsbService { 457 class MockBreakingUsbService : public MockUsbService {
465 public: 458 public:
466 scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { 459 MockBreakingUsbService() {
467 NOTIMPLEMENTED(); 460 devices_.clear();
468 return nullptr; 461 devices_.push_back(new MockUsbDevice<BreakingAndroidTraits>());
469 }
470
471 void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override {
472 STLClearObject(devices);
473 devices->push_back(new MockUsbDevice<BreakingAndroidTraits>());
474 } 462 }
475 }; 463 };
476 464
477 class MockNoConfigUsbService : public UsbService { 465 class MockNoConfigUsbService : public MockUsbService {
478 public: 466 public:
479 scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { 467 MockNoConfigUsbService() {
480 NOTIMPLEMENTED(); 468 devices_.push_back(new MockUsbDevice<NoConfigTraits>());
481 return nullptr;
482 }
483
484 void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override {
485 STLClearObject(devices);
486 devices->push_back(new MockUsbDevice<AndroidTraits>());
487 devices->push_back(new MockUsbDevice<NoConfigTraits>());
488 } 469 }
489 }; 470 };
490 471
491 class MockUsbServiceForCheckingTraits : public UsbService { 472 class MockUsbServiceForCheckingTraits : public MockUsbService {
492 public: 473 public:
493 MockUsbServiceForCheckingTraits() : step_(0) {} 474 MockUsbServiceForCheckingTraits() : step_(0) {}
494 475
495 scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { 476 void GetDevices(const GetDevicesCallback& callback) override {
496 NOTIMPLEMENTED(); 477 std::vector<scoped_refptr<UsbDevice>> devices;
497 return nullptr;
498 }
499
500 void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override {
501 STLClearObject(devices);
502 // This switch should be kept in sync with 478 // This switch should be kept in sync with
503 // AndroidUsbBrowserTest::DeviceCountChanged. 479 // AndroidUsbBrowserTest::DeviceCountChanged.
504 switch (step_) { 480 switch (step_) {
505 case 0: 481 case 0:
506 // No devices. 482 // No devices.
507 break; 483 break;
508 case 1: 484 case 1:
509 // Android device. 485 // Android device.
510 devices->push_back(new MockUsbDevice<AndroidTraits>()); 486 devices.push_back(new MockUsbDevice<AndroidTraits>());
511 break; 487 break;
512 case 2: 488 case 2:
513 // Android and non-android device. 489 // Android and non-android device.
514 devices->push_back(new MockUsbDevice<AndroidTraits>()); 490 devices.push_back(new MockUsbDevice<AndroidTraits>());
515 devices->push_back(new MockUsbDevice<NonAndroidTraits>()); 491 devices.push_back(new MockUsbDevice<NonAndroidTraits>());
516 break; 492 break;
517 case 3: 493 case 3:
518 // Non-android device. 494 // Non-android device.
519 devices->push_back(new MockUsbDevice<NonAndroidTraits>()); 495 devices.push_back(new MockUsbDevice<NonAndroidTraits>());
520 break; 496 break;
521 } 497 }
522 step_++; 498 step_++;
499 callback.Run(devices);
523 } 500 }
524 501
525 private: 502 private:
526 int step_; 503 int step_;
527 }; 504 };
528 505
529 class DevToolsAndroidBridgeWarmUp 506 class DevToolsAndroidBridgeWarmUp
530 : public DevToolsAndroidBridge::DeviceCountListener { 507 : public DevToolsAndroidBridge::DeviceCountListener {
531 public: 508 public:
532 DevToolsAndroidBridgeWarmUp(base::Closure closure, 509 DevToolsAndroidBridgeWarmUp(base::Closure closure,
533 DevToolsAndroidBridge* adb_bridge) 510 DevToolsAndroidBridge* adb_bridge)
534 : closure_(closure), adb_bridge_(adb_bridge) {} 511 : closure_(closure), adb_bridge_(adb_bridge) {}
535 512
536 void DeviceCountChanged(int count) override { 513 void DeviceCountChanged(int count) override {
537 adb_bridge_->RemoveDeviceCountListener(this); 514 adb_bridge_->RemoveDeviceCountListener(this);
538 closure_.Run(); 515 closure_.Run();
539 } 516 }
540 517
541 base::Closure closure_; 518 base::Closure closure_;
542 DevToolsAndroidBridge* adb_bridge_; 519 DevToolsAndroidBridge* adb_bridge_;
543 }; 520 };
544 521
545 class AndroidUsbDiscoveryTest : public InProcessBrowserTest { 522 class AndroidUsbDiscoveryTest : public InProcessBrowserTest {
546 protected: 523 protected:
547 AndroidUsbDiscoveryTest() 524 AndroidUsbDiscoveryTest()
548 : scheduler_invoked_(0) { 525 : scheduler_invoked_(0) {
549 } 526 }
550 void SetUpOnMainThread() override { 527 void SetUpOnMainThread() override {
551 scoped_refptr<content::MessageLoopRunner> runner = 528 mock_usb_service_.reset(CreateMockService());
552 new content::MessageLoopRunner;
553
554 BrowserThread::PostTaskAndReply(
555 BrowserThread::FILE,
556 FROM_HERE,
557 base::Bind(&AndroidUsbDiscoveryTest::SetUpService, this),
558 runner->QuitClosure());
559 runner->Run();
560 529
561 adb_bridge_ = 530 adb_bridge_ =
562 DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile()); 531 DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile());
563 DCHECK(adb_bridge_); 532 DCHECK(adb_bridge_);
564 adb_bridge_->set_task_scheduler_for_test(base::Bind( 533 adb_bridge_->set_task_scheduler_for_test(base::Bind(
565 &AndroidUsbDiscoveryTest::ScheduleDeviceCountRequest, this)); 534 &AndroidUsbDiscoveryTest::ScheduleDeviceCountRequest, this));
566 535
567 scoped_refptr<UsbDeviceProvider> provider = 536 scoped_refptr<UsbDeviceProvider> provider =
568 new UsbDeviceProvider(browser()->profile()); 537 new UsbDeviceProvider(browser()->profile());
569 538
570 AndroidDeviceManager::DeviceProviders providers; 539 AndroidDeviceManager::DeviceProviders providers;
571 providers.push_back(provider); 540 providers.push_back(provider);
572 adb_bridge_->set_device_providers_for_test(providers); 541 adb_bridge_->set_device_providers_for_test(providers);
573 runner_ = new content::MessageLoopRunner; 542 runner_ = new content::MessageLoopRunner;
574 } 543 }
575 544
576 void ScheduleDeviceCountRequest(const base::Closure& request) { 545 void ScheduleDeviceCountRequest(const base::Closure& request) {
577 DCHECK_CURRENTLY_ON(BrowserThread::UI); 546 DCHECK_CURRENTLY_ON(BrowserThread::UI);
578 scheduler_invoked_++; 547 scheduler_invoked_++;
579 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, request); 548 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, request);
580 } 549 }
581 550
582 virtual void SetUpService() { 551 virtual MockUsbService* CreateMockService() { return new MockUsbService(); }
583 UsbService::SetInstanceForTest(new MockUsbService());
584 }
585
586 void TearDownOnMainThread() override {
587 scoped_refptr<content::MessageLoopRunner> runner =
588 new content::MessageLoopRunner;
589 UsbService* service = nullptr;
590 BrowserThread::PostTaskAndReply(
591 BrowserThread::FILE,
592 FROM_HERE,
593 base::Bind(&UsbService::SetInstanceForTest, service),
594 runner->QuitClosure());
595 runner->Run();
596 }
597 552
598 scoped_refptr<content::MessageLoopRunner> runner_; 553 scoped_refptr<content::MessageLoopRunner> runner_;
554 scoped_ptr<MockUsbService> mock_usb_service_;
599 DevToolsAndroidBridge* adb_bridge_; 555 DevToolsAndroidBridge* adb_bridge_;
600 int scheduler_invoked_; 556 int scheduler_invoked_;
601 }; 557 };
602 558
603 class AndroidUsbCountTest : public AndroidUsbDiscoveryTest { 559 class AndroidUsbCountTest : public AndroidUsbDiscoveryTest {
604 protected: 560 protected:
605 void SetUpOnMainThread() override { 561 void SetUpOnMainThread() override {
606 AndroidUsbDiscoveryTest::SetUpOnMainThread(); 562 AndroidUsbDiscoveryTest::SetUpOnMainThread();
607 DevToolsAndroidBridgeWarmUp warmup(runner_->QuitClosure(), adb_bridge_); 563 DevToolsAndroidBridgeWarmUp warmup(runner_->QuitClosure(), adb_bridge_);
608 adb_bridge_->AddDeviceCountListener(&warmup); 564 adb_bridge_->AddDeviceCountListener(&warmup);
609 runner_->Run(); 565 runner_->Run();
610 runner_ = new content::MessageLoopRunner; 566 runner_ = new content::MessageLoopRunner;
611 } 567 }
612 }; 568 };
613 569
614 class AndroidUsbTraitsTest : public AndroidUsbDiscoveryTest { 570 class AndroidUsbTraitsTest : public AndroidUsbDiscoveryTest {
615 protected: 571 protected:
616 void SetUpService() override { 572 MockUsbService* CreateMockService() override {
617 UsbService::SetInstanceForTest(new MockUsbServiceForCheckingTraits()); 573 return new MockUsbServiceForCheckingTraits();
618 } 574 }
619 }; 575 };
620 576
621 class AndroidBreakingUsbTest : public AndroidUsbDiscoveryTest { 577 class AndroidBreakingUsbTest : public AndroidUsbDiscoveryTest {
622 protected: 578 protected:
623 void SetUpService() override { 579 MockUsbService* CreateMockService() override {
624 UsbService::SetInstanceForTest(new MockBreakingUsbService()); 580 return new MockBreakingUsbService();
625 } 581 }
626 }; 582 };
627 583
628 class AndroidNoConfigUsbTest : public AndroidUsbDiscoveryTest { 584 class AndroidNoConfigUsbTest : public AndroidUsbDiscoveryTest {
629 protected: 585 protected:
630 void SetUpService() override { 586 MockUsbService* CreateMockService() override {
631 UsbService::SetInstanceForTest(new MockNoConfigUsbService()); 587 return new MockNoConfigUsbService();
632 } 588 }
633 }; 589 };
634 590
635 class MockListListener : public DevToolsAndroidBridge::DeviceListListener { 591 class MockListListener : public DevToolsAndroidBridge::DeviceListListener {
636 public: 592 public:
637 MockListListener(DevToolsAndroidBridge* adb_bridge, 593 MockListListener(DevToolsAndroidBridge* adb_bridge,
638 const base::Closure& callback) 594 const base::Closure& callback)
639 : adb_bridge_(adb_bridge), 595 : adb_bridge_(adb_bridge),
640 callback_(callback) { 596 callback_(callback) {
641 } 597 }
(...skipping 13 matching lines...) Expand all
655 } 611 }
656 } 612 }
657 613
658 DevToolsAndroidBridge* adb_bridge_; 614 DevToolsAndroidBridge* adb_bridge_;
659 base::Closure callback_; 615 base::Closure callback_;
660 }; 616 };
661 617
662 class MockCountListener : public DevToolsAndroidBridge::DeviceCountListener { 618 class MockCountListener : public DevToolsAndroidBridge::DeviceCountListener {
663 public: 619 public:
664 explicit MockCountListener(DevToolsAndroidBridge* adb_bridge) 620 explicit MockCountListener(DevToolsAndroidBridge* adb_bridge)
665 : adb_bridge_(adb_bridge), 621 : adb_bridge_(adb_bridge), invoked_(0) {}
666 reposts_left_(10),
667 invoked_(0) {
668 }
669 622
670 void DeviceCountChanged(int count) override { 623 void DeviceCountChanged(int count) override {
671 ++invoked_; 624 ++invoked_;
672 adb_bridge_->RemoveDeviceCountListener(this); 625 adb_bridge_->RemoveDeviceCountListener(this);
673 Shutdown(); 626 Shutdown();
674 } 627 }
675 628
676 void Shutdown() { 629 void Shutdown() { base::MessageLoop::current()->Quit(); }
677 ShutdownOnUIThread();
678 };
679
680 void ShutdownOnUIThread() {
681 DCHECK_CURRENTLY_ON(BrowserThread::UI);
682 if (reposts_left_-- == 0) {
683 base::MessageLoop::current()->Quit();
684 } else {
685 BrowserThread::PostTask(
686 BrowserThread::FILE,
687 FROM_HERE,
688 base::Bind(&MockCountListener::ShutdownOnFileThread,
689 base::Unretained(this)));
690 }
691 }
692
693 void ShutdownOnFileThread() {
694 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
695 BrowserThread::PostTask(BrowserThread::UI,
696 FROM_HERE,
697 base::Bind(&MockCountListener::ShutdownOnUIThread,
698 base::Unretained(this)));
699 }
700 630
701 DevToolsAndroidBridge* adb_bridge_; 631 DevToolsAndroidBridge* adb_bridge_;
702 int reposts_left_;
703 int invoked_; 632 int invoked_;
704 }; 633 };
705 634
706 class MockCountListenerWithReAdd : public MockCountListener { 635 class MockCountListenerWithReAdd : public MockCountListener {
707 public: 636 public:
708 explicit MockCountListenerWithReAdd( 637 explicit MockCountListenerWithReAdd(
709 DevToolsAndroidBridge* adb_bridge) 638 DevToolsAndroidBridge* adb_bridge)
710 : MockCountListener(adb_bridge), 639 : MockCountListener(adb_bridge),
711 readd_count_(2) { 640 readd_count_(2) {
712 } 641 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 runner_->Run(); 778 runner_->Run();
850 EXPECT_EQ(2, listener.invoked_); 779 EXPECT_EQ(2, listener.invoked_);
851 EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); 780 EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_);
852 } 781 }
853 782
854 IN_PROC_BROWSER_TEST_F(AndroidUsbTraitsTest, TestDeviceCounting) { 783 IN_PROC_BROWSER_TEST_F(AndroidUsbTraitsTest, TestDeviceCounting) {
855 MockCountListenerForCheckingTraits listener(adb_bridge_); 784 MockCountListenerForCheckingTraits listener(adb_bridge_);
856 adb_bridge_->AddDeviceCountListener(&listener); 785 adb_bridge_->AddDeviceCountListener(&listener);
857 runner_->Run(); 786 runner_->Run();
858 } 787 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698