summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarajp <arajp@nvidia.com>2015-05-28 11:20:17 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-28 18:20:43 +0000
commitbc4f7fa505a2d59a434d8a164043210a960d9be9 (patch)
tree2f8d05efe3e9b83e3f3e3292e6d270d724f538fd
parent2f535b6a37179e0fe2b7c291ef987b2610fd35aa (diff)
downloadchromium_src-bc4f7fa505a2d59a434d8a164043210a960d9be9.zip
chromium_src-bc4f7fa505a2d59a434d8a164043210a960d9be9.tar.gz
chromium_src-bc4f7fa505a2d59a434d8a164043210a960d9be9.tar.bz2
Handle gamepad length being incorrectly set to 0 even when gamepad is present
When Windows sends device changed event multiple times even when a single gamepad is connected, EnumerateDevices incorrectly sets gamepad length to zero. BUG=485507 R=scottmg, raymes Review URL: https://codereview.chromium.org/1145063004 Cr-Commit-Position: refs/heads/master@{#331822}
-rw-r--r--content/browser/gamepad/gamepad_platform_data_fetcher_win.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc b/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc
index c563cff..aca00960 100644
--- a/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc
+++ b/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc
@@ -97,7 +97,6 @@ void GamepadPlatformDataFetcherWin::EnumerateDevices(
WebGamepads* pads) {
TRACE_EVENT0("GAMEPAD", "EnumerateDevices");
- pads->length = 0;
// Mark all disconnected pads DISCONNECTED.
for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) {
if (!pads->items[i].connected)
@@ -115,7 +114,6 @@ void GamepadPlatformDataFetcherWin::EnumerateDevices(
pad_state_[pad_index].status = XINPUT_CONNECTED;
pad_state_[pad_index].xinput_index = i;
pad_state_[pad_index].mapper = NULL;
- pads->length++;
}
}
@@ -151,7 +149,6 @@ void GamepadPlatformDataFetcherWin::EnumerateDevices(
else
pad.mapping[0] = 0;
- pads->length++;
}
}
}
@@ -177,6 +174,7 @@ void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads,
if (devices_changed_hint)
EnumerateDevices(pads);
+ pads->length = 0;
for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) {
// We rely on device_changed and GetCapabilities to tell us that
// something's been connected, but we will mark as disconnected if
@@ -188,6 +186,9 @@ void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads,
GetXInputPadData(i, &pads->items[i]);
else if (pad_state_[i].status == RAWINPUT_CONNECTED)
GetRawInputPadData(i, &pads->items[i]);
+
+ if (pads->items[i].connected)
+ pads->length++;
}
}