OLD | NEW |
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 "content/browser/renderer_host/pepper/pepper_gamepad_host.h" | 5 #include "content/browser/renderer_host/pepper/pepper_gamepad_host.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 16 matching lines...) Expand all Loading... |
27 namespace content { | 27 namespace content { |
28 | 28 |
29 namespace { | 29 namespace { |
30 | 30 |
31 class PepperGamepadHostTest : public testing::Test, | 31 class PepperGamepadHostTest : public testing::Test, |
32 public BrowserPpapiHostTest { | 32 public BrowserPpapiHostTest { |
33 public: | 33 public: |
34 PepperGamepadHostTest() {} | 34 PepperGamepadHostTest() {} |
35 ~PepperGamepadHostTest() override {} | 35 ~PepperGamepadHostTest() override {} |
36 | 36 |
37 void ConstructService(const blink::WebGamepads& test_data) { | 37 void ConstructService(const device::Gamepads& test_data) { |
38 service_.reset(new device::GamepadServiceTestConstructor(test_data)); | 38 service_.reset(new device::GamepadServiceTestConstructor(test_data)); |
39 } | 39 } |
40 | 40 |
41 device::GamepadService* gamepad_service() { | 41 device::GamepadService* gamepad_service() { |
42 return service_->gamepad_service(); | 42 return service_->gamepad_service(); |
43 } | 43 } |
44 | 44 |
45 protected: | 45 protected: |
46 std::unique_ptr<device::GamepadServiceTestConstructor> service_; | 46 std::unique_ptr<device::GamepadServiceTestConstructor> service_; |
47 | 47 |
(...skipping 17 matching lines...) Expand all Loading... |
65 ppapi::ContentGamepadHardwareBuffer ppapi_buf; | 65 ppapi::ContentGamepadHardwareBuffer ppapi_buf; |
66 device::GamepadHardwareBuffer content_buf; | 66 device::GamepadHardwareBuffer content_buf; |
67 EXPECT_EQ(AddressDiff(&content_buf.seqlock, &content_buf), | 67 EXPECT_EQ(AddressDiff(&content_buf.seqlock, &content_buf), |
68 AddressDiff(&ppapi_buf.sequence, &ppapi_buf)); | 68 AddressDiff(&ppapi_buf.sequence, &ppapi_buf)); |
69 EXPECT_EQ(AddressDiff(&content_buf.data, &content_buf), | 69 EXPECT_EQ(AddressDiff(&content_buf.data, &content_buf), |
70 AddressDiff(&ppapi_buf.buffer, &ppapi_buf)); | 70 AddressDiff(&ppapi_buf.buffer, &ppapi_buf)); |
71 } | 71 } |
72 | 72 |
73 TEST_F(PepperGamepadHostTest, ValidateGamepadsMatch) { | 73 TEST_F(PepperGamepadHostTest, ValidateGamepadsMatch) { |
74 // Gamepads. | 74 // Gamepads. |
75 static_assert(sizeof(ppapi::WebKitGamepads) == sizeof(blink::WebGamepads), | 75 static_assert(sizeof(ppapi::WebKitGamepads) == sizeof(device::Gamepads), |
76 "gamepads data must match"); | 76 "gamepads data must match"); |
77 ppapi::WebKitGamepads ppapi_gamepads; | 77 ppapi::WebKitGamepads ppapi_gamepads; |
78 blink::WebGamepads web_gamepads; | 78 device::Gamepads web_gamepads; |
79 | 79 |
80 // See comment below on storage & the EXPECT macro. | 80 // See comment below on storage & the EXPECT macro. |
81 size_t webkit_items_length_cap = blink::WebGamepads::kItemsLengthCap; | 81 size_t webkit_items_length_cap = device::Gamepads::kItemsLengthCap; |
82 size_t ppapi_items_length_cap = ppapi::WebKitGamepads::kItemsLengthCap; | 82 size_t ppapi_items_length_cap = ppapi::WebKitGamepads::kItemsLengthCap; |
83 EXPECT_EQ(webkit_items_length_cap, ppapi_items_length_cap); | 83 EXPECT_EQ(webkit_items_length_cap, ppapi_items_length_cap); |
84 | 84 |
85 for (size_t i = 0; i < webkit_items_length_cap; i++) { | 85 for (size_t i = 0; i < webkit_items_length_cap; i++) { |
86 EXPECT_EQ(AddressDiff(&web_gamepads.items[0], &web_gamepads), | 86 EXPECT_EQ(AddressDiff(&web_gamepads.items[0], &web_gamepads), |
87 AddressDiff(&ppapi_gamepads.items[0], &ppapi_gamepads)); | 87 AddressDiff(&ppapi_gamepads.items[0], &ppapi_gamepads)); |
88 } | 88 } |
89 } | 89 } |
90 | 90 |
91 TEST_F(PepperGamepadHostTest, ValidateGamepadMatch) { | 91 TEST_F(PepperGamepadHostTest, ValidateGamepadMatch) { |
92 // Gamepad. | 92 // Gamepad. |
93 static_assert(sizeof(ppapi::WebKitGamepad) == sizeof(blink::WebGamepad), | 93 static_assert(sizeof(ppapi::WebKitGamepad) == sizeof(device::Gamepad), |
94 "gamepad data must match"); | 94 "gamepad data must match"); |
95 ppapi::WebKitGamepad ppapi_gamepad; | 95 ppapi::WebKitGamepad ppapi_gamepad; |
96 blink::WebGamepad web_gamepad; | 96 device::Gamepad web_gamepad; |
97 | 97 |
98 // Using EXPECT seems to force storage for the parameter, which the constants | 98 // Using EXPECT seems to force storage for the parameter, which the constants |
99 // in the WebKit/PPAPI headers don't have. So we have to use temporaries | 99 // in the WebKit/PPAPI headers don't have. So we have to use temporaries |
100 // before comparing them. | 100 // before comparing them. |
101 size_t webkit_id_length_cap = blink::WebGamepad::kIdLengthCap; | 101 size_t webkit_id_length_cap = device::Gamepad::kIdLengthCap; |
102 size_t ppapi_id_length_cap = ppapi::WebKitGamepad::kIdLengthCap; | 102 size_t ppapi_id_length_cap = ppapi::WebKitGamepad::kIdLengthCap; |
103 EXPECT_EQ(webkit_id_length_cap, ppapi_id_length_cap); | 103 EXPECT_EQ(webkit_id_length_cap, ppapi_id_length_cap); |
104 | 104 |
105 size_t webkit_axes_length_cap = blink::WebGamepad::kAxesLengthCap; | 105 size_t webkit_axes_length_cap = device::Gamepad::kAxesLengthCap; |
106 size_t ppapi_axes_length_cap = ppapi::WebKitGamepad::kAxesLengthCap; | 106 size_t ppapi_axes_length_cap = ppapi::WebKitGamepad::kAxesLengthCap; |
107 EXPECT_EQ(webkit_axes_length_cap, ppapi_axes_length_cap); | 107 EXPECT_EQ(webkit_axes_length_cap, ppapi_axes_length_cap); |
108 | 108 |
109 size_t webkit_buttons_length_cap = blink::WebGamepad::kButtonsLengthCap; | 109 size_t webkit_buttons_length_cap = device::Gamepad::kButtonsLengthCap; |
110 size_t ppapi_buttons_length_cap = ppapi::WebKitGamepad::kButtonsLengthCap; | 110 size_t ppapi_buttons_length_cap = ppapi::WebKitGamepad::kButtonsLengthCap; |
111 EXPECT_EQ(webkit_buttons_length_cap, ppapi_buttons_length_cap); | 111 EXPECT_EQ(webkit_buttons_length_cap, ppapi_buttons_length_cap); |
112 | 112 |
113 EXPECT_EQ(AddressDiff(&web_gamepad.connected, &web_gamepad), | 113 EXPECT_EQ(AddressDiff(&web_gamepad.connected, &web_gamepad), |
114 AddressDiff(&ppapi_gamepad.connected, &ppapi_gamepad)); | 114 AddressDiff(&ppapi_gamepad.connected, &ppapi_gamepad)); |
115 EXPECT_EQ(AddressDiff(&web_gamepad.id, &web_gamepad), | 115 EXPECT_EQ(AddressDiff(&web_gamepad.id, &web_gamepad), |
116 AddressDiff(&ppapi_gamepad.id, &ppapi_gamepad)); | 116 AddressDiff(&ppapi_gamepad.id, &ppapi_gamepad)); |
117 EXPECT_EQ(AddressDiff(&web_gamepad.timestamp, &web_gamepad), | 117 EXPECT_EQ(AddressDiff(&web_gamepad.timestamp, &web_gamepad), |
118 AddressDiff(&ppapi_gamepad.timestamp, &ppapi_gamepad)); | 118 AddressDiff(&ppapi_gamepad.timestamp, &ppapi_gamepad)); |
119 EXPECT_EQ(AddressDiff(&web_gamepad.axes_length, &web_gamepad), | 119 EXPECT_EQ(AddressDiff(&web_gamepad.axes_length, &web_gamepad), |
120 AddressDiff(&ppapi_gamepad.axes_length, &ppapi_gamepad)); | 120 AddressDiff(&ppapi_gamepad.axes_length, &ppapi_gamepad)); |
121 EXPECT_EQ(AddressDiff(&web_gamepad.axes, &web_gamepad), | 121 EXPECT_EQ(AddressDiff(&web_gamepad.axes, &web_gamepad), |
122 AddressDiff(&ppapi_gamepad.axes, &ppapi_gamepad)); | 122 AddressDiff(&ppapi_gamepad.axes, &ppapi_gamepad)); |
123 EXPECT_EQ(AddressDiff(&web_gamepad.buttons_length, &web_gamepad), | 123 EXPECT_EQ(AddressDiff(&web_gamepad.buttons_length, &web_gamepad), |
124 AddressDiff(&ppapi_gamepad.buttons_length, &ppapi_gamepad)); | 124 AddressDiff(&ppapi_gamepad.buttons_length, &ppapi_gamepad)); |
125 EXPECT_EQ(AddressDiff(&web_gamepad.buttons, &web_gamepad), | 125 EXPECT_EQ(AddressDiff(&web_gamepad.buttons, &web_gamepad), |
126 AddressDiff(&ppapi_gamepad.buttons, &ppapi_gamepad)); | 126 AddressDiff(&ppapi_gamepad.buttons, &ppapi_gamepad)); |
127 } | 127 } |
128 | 128 |
129 TEST_F(PepperGamepadHostTest, WaitForReply) { | 129 TEST_F(PepperGamepadHostTest, WaitForReply) { |
130 blink::WebGamepads default_data; | 130 device::Gamepads default_data; |
131 memset(&default_data, 0, sizeof(blink::WebGamepads)); | 131 memset(&default_data, 0, sizeof(device::Gamepads)); |
132 default_data.items[0].connected = true; | 132 default_data.items[0].connected = true; |
133 default_data.items[0].buttons_length = 1; | 133 default_data.items[0].buttons_length = 1; |
134 ConstructService(default_data); | 134 ConstructService(default_data); |
135 | 135 |
136 PP_Instance pp_instance = 12345; | 136 PP_Instance pp_instance = 12345; |
137 PP_Resource pp_resource = 67890; | 137 PP_Resource pp_resource = 67890; |
138 PepperGamepadHost gamepad_host( | 138 PepperGamepadHost gamepad_host( |
139 gamepad_service(), GetBrowserPpapiHost(), pp_instance, pp_resource); | 139 gamepad_service(), GetBrowserPpapiHost(), pp_instance, pp_resource); |
140 | 140 |
141 // Synthesize a request for gamepad data. | 141 // Synthesize a request for gamepad data. |
142 ppapi::host::HostMessageContext context( | 142 ppapi::host::HostMessageContext context( |
143 ppapi::proxy::ResourceMessageCallParams(pp_resource, 1)); | 143 ppapi::proxy::ResourceMessageCallParams(pp_resource, 1)); |
144 EXPECT_EQ(PP_OK_COMPLETIONPENDING, | 144 EXPECT_EQ(PP_OK_COMPLETIONPENDING, |
145 gamepad_host.OnResourceMessageReceived( | 145 gamepad_host.OnResourceMessageReceived( |
146 PpapiHostMsg_Gamepad_RequestMemory(), &context)); | 146 PpapiHostMsg_Gamepad_RequestMemory(), &context)); |
147 | 147 |
148 device::MockGamepadDataFetcher* fetcher = service_->data_fetcher(); | 148 device::MockGamepadDataFetcher* fetcher = service_->data_fetcher(); |
149 fetcher->WaitForDataReadAndCallbacksIssued(); | 149 fetcher->WaitForDataReadAndCallbacksIssued(); |
150 | 150 |
151 // It should not have sent the callback message. | 151 // It should not have sent the callback message. |
152 base::RunLoop().RunUntilIdle(); | 152 base::RunLoop().RunUntilIdle(); |
153 EXPECT_EQ(0u, sink().message_count()); | 153 EXPECT_EQ(0u, sink().message_count()); |
154 | 154 |
155 // Set a button down and wait for it to be read twice. | 155 // Set a button down and wait for it to be read twice. |
156 blink::WebGamepads button_down_data = default_data; | 156 device::Gamepads button_down_data = default_data; |
157 button_down_data.items[0].buttons[0].value = 1.f; | 157 button_down_data.items[0].buttons[0].value = 1.f; |
158 button_down_data.items[0].buttons[0].pressed = true; | 158 button_down_data.items[0].buttons[0].pressed = true; |
159 fetcher->SetTestData(button_down_data); | 159 fetcher->SetTestData(button_down_data); |
160 fetcher->WaitForDataReadAndCallbacksIssued(); | 160 fetcher->WaitForDataReadAndCallbacksIssued(); |
161 | 161 |
162 // It should have sent a callback. | 162 // It should have sent a callback. |
163 base::RunLoop().RunUntilIdle(); | 163 base::RunLoop().RunUntilIdle(); |
164 ppapi::proxy::ResourceMessageReplyParams reply_params; | 164 ppapi::proxy::ResourceMessageReplyParams reply_params; |
165 IPC::Message reply_msg; | 165 IPC::Message reply_msg; |
166 ASSERT_TRUE(sink().GetFirstResourceReplyMatching( | 166 ASSERT_TRUE(sink().GetFirstResourceReplyMatching( |
(...skipping 18 matching lines...) Expand all Loading... |
185 buffer->buffer.items[0].buttons[i].pressed); | 185 buffer->buffer.items[0].buttons[i].pressed); |
186 } | 186 } |
187 | 187 |
188 // Duplicate requests should be denied. | 188 // Duplicate requests should be denied. |
189 EXPECT_EQ(PP_ERROR_FAILED, | 189 EXPECT_EQ(PP_ERROR_FAILED, |
190 gamepad_host.OnResourceMessageReceived( | 190 gamepad_host.OnResourceMessageReceived( |
191 PpapiHostMsg_Gamepad_RequestMemory(), &context)); | 191 PpapiHostMsg_Gamepad_RequestMemory(), &context)); |
192 } | 192 } |
193 | 193 |
194 } // namespace content | 194 } // namespace content |
OLD | NEW |