| Index: content/browser/gamepad/gamepad_provider.cc
|
| diff --git a/content/browser/gamepad/gamepad_provider.cc b/content/browser/gamepad/gamepad_provider.cc
|
| index 16976d965385f4d7ba005e1779d6a6d36e132b64..caa4cc82c667fb10707360250194af33e9fabbd8 100644
|
| --- a/content/browser/gamepad/gamepad_provider.cc
|
| +++ b/content/browser/gamepad/gamepad_provider.cc
|
| @@ -175,8 +175,7 @@ bool GamepadProvider::PadState::Match(const WebGamepad& pad) const {
|
| }
|
|
|
| void GamepadProvider::PadState::SetPad(const WebGamepad& pad) {
|
| - DCHECK(pad.connected);
|
| - connected_ = true;
|
| + connected_ = pad.connected;
|
| axes_length_ = pad.axesLength;
|
| buttons_length_ = pad.buttonsLength;
|
| memcpy(id_, pad.id, arraysize(id_));
|
| @@ -230,8 +229,6 @@ void GamepadProvider::DoPoll() {
|
| hwbuf->sequence.WriteEnd();
|
| }
|
|
|
| - CheckForUserGesture();
|
| -
|
| if (ever_had_user_gesture_) {
|
| for (unsigned i = 0; i < WebGamepads::itemsLengthCap; ++i) {
|
| WebGamepad& pad = hwbuf->buffer.items[i];
|
| @@ -249,6 +246,8 @@ void GamepadProvider::DoPoll() {
|
| }
|
| }
|
|
|
| + CheckForUserGesture();
|
| +
|
| // Schedule our next interval of polling.
|
| ScheduleDoPoll();
|
| }
|
| @@ -308,7 +307,9 @@ void GamepadProvider::CheckForUserGesture() {
|
| if (user_gesture_observers_.empty() && ever_had_user_gesture_)
|
| return;
|
|
|
| - if (GamepadsHaveUserGesture(SharedMemoryAsHardwareBuffer()->buffer)) {
|
| + bool had_gesture_before = ever_had_user_gesture_;
|
| + const WebGamepads& pads = SharedMemoryAsHardwareBuffer()->buffer;
|
| + if (GamepadsHaveUserGesture(pads)) {
|
| ever_had_user_gesture_ = true;
|
| for (size_t i = 0; i < user_gesture_observers_.size(); i++) {
|
| user_gesture_observers_[i].message_loop->PostTask(FROM_HERE,
|
| @@ -316,6 +317,12 @@ void GamepadProvider::CheckForUserGesture() {
|
| }
|
| user_gesture_observers_.clear();
|
| }
|
| + if (!had_gesture_before && ever_had_user_gesture_) {
|
| + // Initialize pad_states_ for the first time.
|
| + for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) {
|
| + pad_states_.get()[i].SetPad(pads.items[i]);
|
| + }
|
| + }
|
| }
|
|
|
| } // namespace content
|
|
|