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

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

Issue 891853002: Add a UsbService::Observer function for cleanup actions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 "chrome/browser/extensions/extension_apitest.h" 5 #include "chrome/browser/extensions/extension_apitest.h"
6 #include "content/public/browser/browser_thread.h" 6 #include "content/public/browser/browser_thread.h"
7 #include "content/public/test/test_utils.h" 7 #include "content/public/test/test_utils.h"
8 #include "device/usb/usb_service.h" 8 #include "device/usb/usb_service.h"
9 #include "extensions/browser/api/device_permissions_prompt.h"
9 #include "extensions/browser/api/usb/usb_api.h" 10 #include "extensions/browser/api/usb/usb_api.h"
11 #include "extensions/shell/browser/shell_extensions_api_client.h"
10 #include "extensions/shell/test/shell_apitest.h" 12 #include "extensions/shell/test/shell_apitest.h"
11 #include "extensions/test/extension_test_message_listener.h" 13 #include "extensions/test/extension_test_message_listener.h"
12 #include "net/base/io_buffer.h" 14 #include "net/base/io_buffer.h"
13 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
14 16
15 using testing::_; 17 using testing::_;
16 using testing::AnyNumber; 18 using testing::AnyNumber;
17 using testing::Invoke; 19 using testing::Invoke;
18 using testing::Return; 20 using testing::Return;
19 using content::BrowserThread; 21 using content::BrowserThread;
(...skipping 15 matching lines...) Expand all
35 net::IOBuffer* io_buffer = new net::IOBuffer(1); 37 net::IOBuffer* io_buffer = new net::IOBuffer(1);
36 memset(io_buffer->data(), 0, 1); // Avoid uninitialized reads. 38 memset(io_buffer->data(), 0, 1); // Avoid uninitialized reads.
37 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); 39 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1);
38 } 40 }
39 41
40 void RequestUsbAccess(int interface_id, 42 void RequestUsbAccess(int interface_id,
41 const base::Callback<void(bool success)>& callback) { 43 const base::Callback<void(bool success)>& callback) {
42 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, true)); 44 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, true));
43 } 45 }
44 46
47 class TestDevicePermissionsPrompt
48 : public DevicePermissionsPrompt,
49 public DevicePermissionsPrompt::Prompt::Observer {
50 public:
51 TestDevicePermissionsPrompt(content::WebContents* web_contents)
52 : DevicePermissionsPrompt(web_contents) {}
53
54 void ShowDialog() override { prompt()->SetObserver(this); }
55
56 void OnDevicesChanged() override {
57 std::vector<scoped_refptr<UsbDevice>> devices;
58 for (size_t i = 0; i < prompt()->GetDeviceCount(); ++i) {
59 prompt()->GrantDevicePermission(i);
60 devices.push_back(prompt()->GetDevice(i));
61 if (!prompt()->multiple()) {
62 break;
63 }
64 }
65 delegate()->OnUsbDevicesChosen(devices);
66 }
67 };
68
69 class TestExtensionsAPIClient : public ShellExtensionsAPIClient {
70 public:
71 TestExtensionsAPIClient() : ShellExtensionsAPIClient() {}
72
73 scoped_ptr<DevicePermissionsPrompt> CreateDevicePermissionsPrompt(
74 content::WebContents* web_contents) const override {
75 return make_scoped_ptr(new TestDevicePermissionsPrompt(web_contents));
76 }
77 };
78
45 class MockUsbDeviceHandle : public UsbDeviceHandle { 79 class MockUsbDeviceHandle : public UsbDeviceHandle {
46 public: 80 public:
47 MockUsbDeviceHandle() : UsbDeviceHandle() {} 81 MockUsbDeviceHandle() : UsbDeviceHandle() {}
48 82
49 MOCK_METHOD0(Close, void()); 83 MOCK_METHOD0(Close, void());
50 84
51 MOCK_METHOD10(ControlTransfer, 85 MOCK_METHOD10(ControlTransfer,
52 void(UsbEndpointDirection direction, 86 void(UsbEndpointDirection direction,
53 TransferRequestType request_type, 87 TransferRequestType request_type,
54 TransferRecipient recipient, 88 TransferRecipient recipient,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 184
151 scoped_refptr<UsbDevice> device_; 185 scoped_refptr<UsbDevice> device_;
152 }; 186 };
153 187
154 class UsbApiTest : public ShellApiTest { 188 class UsbApiTest : public ShellApiTest {
155 public: 189 public:
156 void SetUpOnMainThread() override { 190 void SetUpOnMainThread() override {
157 ShellApiTest::SetUpOnMainThread(); 191 ShellApiTest::SetUpOnMainThread();
158 192
159 mock_device_ = new MockUsbDevice(0, 0, 0); 193 mock_device_ = new MockUsbDevice(0, 0, 0);
194 EXPECT_CALL(*mock_device_.get(), GetManufacturer(_))
195 .WillRepeatedly(Return(false));
196 EXPECT_CALL(*mock_device_.get(), GetProduct(_))
197 .WillRepeatedly(Return(false));
160 EXPECT_CALL(*mock_device_.get(), GetSerialNumber(_)) 198 EXPECT_CALL(*mock_device_.get(), GetSerialNumber(_))
161 .WillRepeatedly(Return(false)); 199 .WillRepeatedly(Return(false));
162 200
163 mock_device_handle_ = new MockUsbDeviceHandle(); 201 mock_device_handle_ = new MockUsbDeviceHandle();
164 mock_device_handle_->set_device(mock_device_.get()); 202 mock_device_handle_->set_device(mock_device_.get());
165 EXPECT_CALL(*mock_device_.get(), RequestUsbAccess(_, _)) 203 EXPECT_CALL(*mock_device_.get(), RequestUsbAccess(_, _))
166 .WillRepeatedly(Invoke(RequestUsbAccess)); 204 .WillRepeatedly(Invoke(RequestUsbAccess));
167 EXPECT_CALL(*mock_device_.get(), Open()) 205 EXPECT_CALL(*mock_device_.get(), Open())
168 .WillRepeatedly(Return(mock_device_handle_)); 206 .WillRepeatedly(Return(mock_device_handle_));
169 207
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); 329 ASSERT_TRUE(load_listener.WaitUntilSatisfied());
292 330
293 base::RunLoop run_loop; 331 base::RunLoop run_loop;
294 BrowserThread::PostTaskAndReply( 332 BrowserThread::PostTaskAndReply(
295 BrowserThread::FILE, FROM_HERE, 333 BrowserThread::FILE, FROM_HERE,
296 base::Bind(&UsbApiTest::AddTestDevices, base::Unretained(this)), 334 base::Bind(&UsbApiTest::AddTestDevices, base::Unretained(this)),
297 run_loop.QuitClosure()); 335 run_loop.QuitClosure());
298 run_loop.Run(); 336 run_loop.Run();
299 337
300 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); 338 ASSERT_TRUE(result_listener.WaitUntilSatisfied());
301 ASSERT_EQ("success", result_listener.message());
302 } 339 }
303 340
304 IN_PROC_BROWSER_TEST_F(UsbApiTest, OnDeviceRemoved) { 341 IN_PROC_BROWSER_TEST_F(UsbApiTest, OnDeviceRemoved) {
305 ExtensionTestMessageListener load_listener("loaded", false); 342 ExtensionTestMessageListener load_listener("loaded", false);
306 ExtensionTestMessageListener result_listener("success", false); 343 ExtensionTestMessageListener result_listener("success", false);
307 result_listener.set_failure_message("failure"); 344 result_listener.set_failure_message("failure");
308 345
309 ASSERT_TRUE(LoadApp("api_test/usb/remove_event")); 346 ASSERT_TRUE(LoadApp("api_test/usb/remove_event"));
310 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); 347 ASSERT_TRUE(load_listener.WaitUntilSatisfied());
311 348
312 base::RunLoop run_loop; 349 base::RunLoop run_loop;
313 BrowserThread::PostTaskAndReply( 350 BrowserThread::PostTaskAndReply(
314 BrowserThread::FILE, FROM_HERE, 351 BrowserThread::FILE, FROM_HERE,
315 base::Bind(&MockUsbService::NotifyDeviceRemoved, 352 base::Bind(&MockUsbService::NotifyDeviceRemoved,
316 base::Unretained(mock_service_), mock_device_), 353 base::Unretained(mock_service_), mock_device_),
317 run_loop.QuitClosure()); 354 run_loop.QuitClosure());
318 run_loop.Run(); 355 run_loop.Run();
319 356
320 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); 357 ASSERT_TRUE(result_listener.WaitUntilSatisfied());
321 ASSERT_EQ("success", result_listener.message()); 358 }
359
360 IN_PROC_BROWSER_TEST_F(UsbApiTest, GetUserSelectedDevices) {
361 ExtensionTestMessageListener ready_listener("opened_device", false);
362 ExtensionTestMessageListener result_listener("success", false);
363 result_listener.set_failure_message("failure");
364
365 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(1);
366
367 TestExtensionsAPIClient test_api_client;
368 ASSERT_TRUE(LoadApp("api_test/usb/get_user_selected_devices"));
369 ASSERT_TRUE(ready_listener.WaitUntilSatisfied());
370
371 base::RunLoop run_loop;
372 BrowserThread::PostTaskAndReply(
373 BrowserThread::FILE, FROM_HERE,
374 base::Bind(&MockUsbService::NotifyDeviceRemoved,
375 base::Unretained(mock_service_), mock_device_),
376 run_loop.QuitClosure());
377 run_loop.Run();
378
379 ASSERT_TRUE(result_listener.WaitUntilSatisfied());
322 } 380 }
323 381
324 } // namespace extensions 382 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698