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

Side by Side Diff: chrome/browser/extensions/api/usb/usb_apitest.cc

Issue 19981004: Remove callbacks on USB manipulation methods. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix browser_tests Created 7 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/extensions/api/usb/usb_api.cc ('k') | chrome/browser/usb/usb_device_handle.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/browser/extensions/api/usb/usb_api.h" 5 #include "chrome/browser/extensions/api/usb/usb_api.h"
6 #include "chrome/browser/extensions/extension_apitest.h" 6 #include "chrome/browser/extensions/extension_apitest.h"
7 #include "chrome/browser/ui/browser.h" 7 #include "chrome/browser/ui/browser.h"
8 #include "chrome/browser/usb/usb_service.h" 8 #include "chrome/browser/usb/usb_service.h"
9 #include "chrome/browser/usb/usb_service_factory.h" 9 #include "chrome/browser/usb/usb_service_factory.h"
10 #include "chrome/common/chrome_switches.h" 10 #include "chrome/common/chrome_switches.h"
11 #include "net/base/io_buffer.h" 11 #include "net/base/io_buffer.h"
12 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
13 13
14 using testing::AnyNumber; 14 using testing::AnyNumber;
15 using testing::_; 15 using testing::_;
16 using testing::Return;
16 17
17 namespace { 18 namespace {
18 19
19 ACTION(InvokeUsbCallback) {
20 ::std::tr1::get<0>(args).Run();
21 }
22
23 ACTION_TEMPLATE(InvokeUsbTransferCallback, 20 ACTION_TEMPLATE(InvokeUsbTransferCallback,
24 HAS_1_TEMPLATE_PARAMS(int, k), 21 HAS_1_TEMPLATE_PARAMS(int, k),
25 AND_1_VALUE_PARAMS(p1)) { 22 AND_1_VALUE_PARAMS(p1)) {
26 ::std::tr1::get<k>(args).Run(p1, new net::IOBuffer(1), 1); 23 ::std::tr1::get<k>(args).Run(p1, new net::IOBuffer(1), 1);
27 } 24 }
28 25
29 ACTION_TEMPLATE(InvokeUsbResultCallback,
30 HAS_1_TEMPLATE_PARAMS(int, k),
31 AND_1_VALUE_PARAMS(p1)) {
32 ::std::tr1::get<k>(args).Run(p1);
33 }
34
35 // MSVC erroneously thinks that at least one of the arguments for the transfer 26 // MSVC erroneously thinks that at least one of the arguments for the transfer
36 // methods differ by const or volatility and emits a warning about the old 27 // methods differ by const or volatility and emits a warning about the old
37 // standards-noncompliant behaviour of their compiler. 28 // standards-noncompliant behaviour of their compiler.
38 #if defined(OS_WIN) 29 #if defined(OS_WIN)
39 #pragma warning(push) 30 #pragma warning(push)
40 #pragma warning(disable:4373) 31 #pragma warning(disable:4373)
41 #endif 32 #endif
42 class MockUsbDeviceHandle : public UsbDeviceHandle { 33 class MockUsbDeviceHandle : public UsbDeviceHandle {
43 public: 34 public:
44 MockUsbDeviceHandle() : UsbDeviceHandle() {} 35 MockUsbDeviceHandle() : UsbDeviceHandle() {}
45 36
46 MOCK_METHOD1(Close, void(const base::Callback<void()>& callback)); 37 MOCK_METHOD0(Close, void());
47 38
48 MOCK_METHOD10(ControlTransfer, void(const UsbEndpointDirection direction, 39 MOCK_METHOD10(ControlTransfer, void(const UsbEndpointDirection direction,
49 const TransferRequestType request_type, const TransferRecipient recipient, 40 const TransferRequestType request_type, const TransferRecipient recipient,
50 const uint8 request, const uint16 value, const uint16 index, 41 const uint8 request, const uint16 value, const uint16 index,
51 net::IOBuffer* buffer, const size_t length, const unsigned int timeout, 42 net::IOBuffer* buffer, const size_t length, const unsigned int timeout,
52 const UsbTransferCallback& callback)); 43 const UsbTransferCallback& callback));
53 44
54 MOCK_METHOD6(BulkTransfer, void(const UsbEndpointDirection direction, 45 MOCK_METHOD6(BulkTransfer, void(const UsbEndpointDirection direction,
55 const uint8 endpoint, net::IOBuffer* buffer, const size_t length, 46 const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
56 const unsigned int timeout, const UsbTransferCallback& callback)); 47 const unsigned int timeout, const UsbTransferCallback& callback));
57 48
58 MOCK_METHOD6(InterruptTransfer, void(const UsbEndpointDirection direction, 49 MOCK_METHOD6(InterruptTransfer, void(const UsbEndpointDirection direction,
59 const uint8 endpoint, net::IOBuffer* buffer, const size_t length, 50 const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
60 const unsigned int timeout, const UsbTransferCallback& callback)); 51 const unsigned int timeout, const UsbTransferCallback& callback));
61 52
62 MOCK_METHOD8(IsochronousTransfer, void(const UsbEndpointDirection direction, 53 MOCK_METHOD8(IsochronousTransfer, void(const UsbEndpointDirection direction,
63 const uint8 endpoint, net::IOBuffer* buffer, const size_t length, 54 const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
64 const unsigned int packets, const unsigned int packet_length, 55 const unsigned int packets, const unsigned int packet_length,
65 const unsigned int timeout, const UsbTransferCallback& callback)); 56 const unsigned int timeout, const UsbTransferCallback& callback));
66 57
67 MOCK_METHOD1(ResetDevice, void( 58 MOCK_METHOD0(ResetDevice, bool());
68 const base::Callback<void(bool success)>& callback));
69 59
70 MOCK_METHOD2(ListInterfaces, void(UsbConfigDescriptor* config, 60 MOCK_METHOD1(ListInterfaces, bool(UsbConfigDescriptor* config));
71 const UsbInterfaceCallback& callback));
72 61
73 protected: 62 protected:
74 virtual ~MockUsbDeviceHandle() {} 63 virtual ~MockUsbDeviceHandle() {}
75 }; 64 };
76 #if defined(OS_WIN) 65 #if defined(OS_WIN)
77 #pragma warning(pop) 66 #pragma warning(pop)
78 #endif 67 #endif
79 68
80 class UsbApiTest : public ExtensionApiTest { 69 class UsbApiTest : public ExtensionApiTest {
81 public: 70 public:
82 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 71 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
83 ExtensionApiTest::SetUpCommandLine(command_line); 72 ExtensionApiTest::SetUpCommandLine(command_line);
84 command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis); 73 command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis);
85 } 74 }
86 75
87 virtual void SetUpOnMainThread() OVERRIDE { 76 virtual void SetUpOnMainThread() OVERRIDE {
88 mock_device_ = new MockUsbDeviceHandle(); 77 mock_device_ = new MockUsbDeviceHandle();
89 extensions::UsbFindDevicesFunction::SetDeviceForTest(mock_device_.get()); 78 extensions::UsbFindDevicesFunction::SetDeviceForTest(mock_device_.get());
90 } 79 }
91 80
92 protected: 81 protected:
93 scoped_refptr<MockUsbDeviceHandle> mock_device_; 82 scoped_refptr<MockUsbDeviceHandle> mock_device_;
94 }; 83 };
95 84
96 } // namespace 85 } // namespace
97 86
98 IN_PROC_BROWSER_TEST_F(UsbApiTest, DeviceHandling) { 87 IN_PROC_BROWSER_TEST_F(UsbApiTest, DeviceHandling) {
99 EXPECT_CALL(*mock_device_.get(), Close(_)) 88 EXPECT_CALL(*mock_device_.get(), Close()).Times(AnyNumber());
100 .WillRepeatedly(InvokeUsbCallback()); 89 EXPECT_CALL(*mock_device_.get(), ResetDevice())
101 EXPECT_CALL(*mock_device_.get(), ResetDevice(_)) 90 .WillOnce(Return(true))
102 .WillOnce(InvokeUsbResultCallback<0>(true)) 91 .WillOnce(Return(false));
103 .WillOnce(InvokeUsbResultCallback<0>(false));
104 EXPECT_CALL(*mock_device_.get(), 92 EXPECT_CALL(*mock_device_.get(),
105 InterruptTransfer(USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) 93 InterruptTransfer(USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
106 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED)); 94 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
107 ASSERT_TRUE(RunExtensionTest("usb/device_handling")); 95 ASSERT_TRUE(RunExtensionTest("usb/device_handling"));
108 } 96 }
109 97
110 IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) { 98 IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) {
111 EXPECT_CALL(*mock_device_.get(), ListInterfaces(_, _)) 99 EXPECT_CALL(*mock_device_.get(), ListInterfaces(_))
112 .WillOnce(InvokeUsbResultCallback<1>(false)); 100 .WillOnce(Return(false));
113 EXPECT_CALL(*mock_device_.get(), Close(_)).Times(AnyNumber()); 101 EXPECT_CALL(*mock_device_.get(), Close()).Times(AnyNumber());
114 ASSERT_TRUE(RunExtensionTest("usb/list_interfaces")); 102 ASSERT_TRUE(RunExtensionTest("usb/list_interfaces"));
115 } 103 }
116 104
117 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) { 105 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) {
118 EXPECT_CALL(*mock_device_.get(), 106 EXPECT_CALL(*mock_device_.get(),
119 ControlTransfer(USB_DIRECTION_OUTBOUND, 107 ControlTransfer(USB_DIRECTION_OUTBOUND,
120 UsbDeviceHandle::STANDARD, 108 UsbDeviceHandle::STANDARD,
121 UsbDeviceHandle::DEVICE, 109 UsbDeviceHandle::DEVICE,
122 1, 110 1,
123 2, 111 2,
124 3, 112 3,
125 _, 113 _,
126 1, 114 1,
127 _, 115 _,
128 _)) 116 _))
129 .WillOnce(InvokeUsbTransferCallback<9>(USB_TRANSFER_COMPLETED)); 117 .WillOnce(InvokeUsbTransferCallback<9>(USB_TRANSFER_COMPLETED));
130 EXPECT_CALL(*mock_device_.get(), 118 EXPECT_CALL(*mock_device_.get(),
131 BulkTransfer(USB_DIRECTION_OUTBOUND, 1, _, 1, _, _)) 119 BulkTransfer(USB_DIRECTION_OUTBOUND, 1, _, 1, _, _))
132 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED)); 120 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
133 EXPECT_CALL(*mock_device_.get(), 121 EXPECT_CALL(*mock_device_.get(),
134 InterruptTransfer(USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) 122 InterruptTransfer(USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
135 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED)); 123 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
136 EXPECT_CALL(*mock_device_.get(), 124 EXPECT_CALL(*mock_device_.get(),
137 IsochronousTransfer(USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _)) 125 IsochronousTransfer(USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _))
138 .WillOnce(InvokeUsbTransferCallback<7>(USB_TRANSFER_COMPLETED)); 126 .WillOnce(InvokeUsbTransferCallback<7>(USB_TRANSFER_COMPLETED));
139 EXPECT_CALL(*mock_device_.get(), Close(_)).Times(AnyNumber()); 127 EXPECT_CALL(*mock_device_.get(), Close()).Times(AnyNumber());
140 ASSERT_TRUE(RunExtensionTest("usb/transfer_event")); 128 ASSERT_TRUE(RunExtensionTest("usb/transfer_event"));
141 } 129 }
142 130
143 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { 131 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) {
144 EXPECT_CALL(*mock_device_.get(), BulkTransfer(_, _, _, 0, _, _)) 132 EXPECT_CALL(*mock_device_.get(), BulkTransfer(_, _, _, 0, _, _))
145 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED)); 133 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
146 EXPECT_CALL(*mock_device_.get(), Close(_)).Times(AnyNumber()); 134 EXPECT_CALL(*mock_device_.get(), Close()).Times(AnyNumber());
147 ASSERT_TRUE(RunExtensionTest("usb/zero_length_transfer")); 135 ASSERT_TRUE(RunExtensionTest("usb/zero_length_transfer"));
148 } 136 }
149 137
150 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { 138 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) {
151 EXPECT_CALL(*mock_device_.get(), BulkTransfer(_, _, _, _, _, _)) 139 EXPECT_CALL(*mock_device_.get(), BulkTransfer(_, _, _, _, _, _))
152 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED)) 140 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED))
153 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_ERROR)) 141 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_ERROR))
154 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_TIMEOUT)); 142 .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_TIMEOUT));
155 EXPECT_CALL(*mock_device_.get(), Close(_)).Times(AnyNumber()); 143 EXPECT_CALL(*mock_device_.get(), Close()).Times(AnyNumber());
156 ASSERT_TRUE(RunExtensionTest("usb/transfer_failure")); 144 ASSERT_TRUE(RunExtensionTest("usb/transfer_failure"));
157 } 145 }
158 146
159 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { 147 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) {
160 EXPECT_CALL(*mock_device_.get(), Close(_)).Times(AnyNumber()); 148 EXPECT_CALL(*mock_device_.get(), Close()).Times(AnyNumber());
161 ASSERT_TRUE(RunExtensionTest("usb/invalid_length_transfer")); 149 ASSERT_TRUE(RunExtensionTest("usb/invalid_length_transfer"));
162 } 150 }
163 151
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/usb/usb_api.cc ('k') | chrome/browser/usb/usb_device_handle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698