| 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 |