| OLD | NEW | 
|    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 "content/browser/gamepad/raw_input_data_fetcher_win.h" |    5 #include "content/browser/gamepad/raw_input_data_fetcher_win.h" | 
|    6  |    6  | 
|    7 #include "base/trace_event/trace_event.h" |    7 #include "base/trace_event/trace_event.h" | 
|    8 #include "content/common/gamepad_hardware_buffer.h" |    8 #include "content/common/gamepad_hardware_buffer.h" | 
|    9 #include "content/common/gamepad_messages.h" |    9 #include "content/common/gamepad_messages.h" | 
|   10  |   10  | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
|   34  |   34  | 
|   35 }   // namespace |   35 }   // namespace | 
|   36  |   36  | 
|   37 RawInputDataFetcher::RawInputDataFetcher() |   37 RawInputDataFetcher::RawInputDataFetcher() | 
|   38     : hid_dll_(base::FilePath(FILE_PATH_LITERAL("hid.dll"))) |   38     : hid_dll_(base::FilePath(FILE_PATH_LITERAL("hid.dll"))) | 
|   39     , rawinput_available_(GetHidDllFunctions()) |   39     , rawinput_available_(GetHidDllFunctions()) | 
|   40     , filter_xinput_(true) |   40     , filter_xinput_(true) | 
|   41     , events_monitored_(false) {} |   41     , events_monitored_(false) {} | 
|   42  |   42  | 
|   43 RawInputDataFetcher::~RawInputDataFetcher() { |   43 RawInputDataFetcher::~RawInputDataFetcher() { | 
 |   44   ClearControllers(); | 
|   44   DCHECK(!window_); |   45   DCHECK(!window_); | 
|   45   DCHECK(!events_monitored_); |   46   DCHECK(!events_monitored_); | 
|   46 } |   47 } | 
|   47  |   48  | 
|   48 void RawInputDataFetcher::WillDestroyCurrentMessageLoop() { |   49 void RawInputDataFetcher::WillDestroyCurrentMessageLoop() { | 
|   49   StopMonitor(); |   50   StopMonitor(); | 
|   50 } |   51 } | 
|   51  |   52  | 
|   52 RAWINPUTDEVICE* RawInputDataFetcher::GetRawInputDevices(DWORD flags) { |   53 RAWINPUTDEVICE* RawInputDataFetcher::GetRawInputDevices(DWORD flags) { | 
|   53   int usage_count = arraysize(DeviceUsages); |   54   int usage_count = arraysize(DeviceUsages); | 
|   54   scoped_ptr<RAWINPUTDEVICE[]> devices(new RAWINPUTDEVICE[usage_count]); |   55   scoped_ptr<RAWINPUTDEVICE[]> devices(new RAWINPUTDEVICE[usage_count]); | 
|   55   for (int i = 0; i < usage_count; ++i) { |   56   for (int i = 0; i < usage_count; ++i) { | 
|   56     devices[i].dwFlags = flags; |   57     devices[i].dwFlags = flags; | 
|   57     devices[i].usUsagePage = 1; |   58     devices[i].usUsagePage = 1; | 
|   58     devices[i].usUsage = DeviceUsages[i]; |   59     devices[i].usUsage = DeviceUsages[i]; | 
|   59     devices[i].hwndTarget = window_->hwnd(); |   60     devices[i].hwndTarget = (flags & RIDEV_REMOVE) ? 0 : window_->hwnd(); | 
|   60   } |   61   } | 
|   61   return devices.release(); |   62   return devices.release(); | 
|   62 } |   63 } | 
|   63  |   64  | 
|   64 void RawInputDataFetcher::StartMonitor() { |   65 void RawInputDataFetcher::StartMonitor() { | 
|   65   if (!rawinput_available_ || events_monitored_) |   66   if (!rawinput_available_ || events_monitored_) | 
|   66     return; |   67     return; | 
|   67  |   68  | 
|   68   if (!window_) { |   69   if (!window_) { | 
|   69     window_.reset(new base::win::MessageWindow()); |   70     window_.reset(new base::win::MessageWindow()); | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
|  100   DCHECK(window_); |  101   DCHECK(window_); | 
|  101   scoped_ptr<RAWINPUTDEVICE[]> devices(GetRawInputDevices(RIDEV_REMOVE)); |  102   scoped_ptr<RAWINPUTDEVICE[]> devices(GetRawInputDevices(RIDEV_REMOVE)); | 
|  102  |  103  | 
|  103   if (!RegisterRawInputDevices(devices.get(), arraysize(DeviceUsages), |  104   if (!RegisterRawInputDevices(devices.get(), arraysize(DeviceUsages), | 
|  104       sizeof(RAWINPUTDEVICE))) { |  105       sizeof(RAWINPUTDEVICE))) { | 
|  105     PLOG(INFO) << "RegisterRawInputDevices() failed for RIDEV_REMOVE"; |  106     PLOG(INFO) << "RegisterRawInputDevices() failed for RIDEV_REMOVE"; | 
|  106   } |  107   } | 
|  107  |  108  | 
|  108   events_monitored_ = false; |  109   events_monitored_ = false; | 
|  109   window_.reset(); |  110   window_.reset(); | 
|  110   ClearControllers(); |  | 
|  111  |  111  | 
|  112   // Stop observing message loop destruction if no event is being monitored. |  112   // Stop observing message loop destruction if no event is being monitored. | 
|  113   base::MessageLoop::current()->RemoveDestructionObserver(this); |  113   base::MessageLoop::current()->RemoveDestructionObserver(this); | 
|  114 } |  114 } | 
|  115  |  115  | 
|  116 void RawInputDataFetcher::ClearControllers() { |  116 void RawInputDataFetcher::ClearControllers() { | 
|  117   while (!controllers_.empty()) { |  117   while (!controllers_.empty()) { | 
|  118     RawGamepadInfo* gamepad_info = controllers_.begin()->second; |  118     RawGamepadInfo* gamepad_info = controllers_.begin()->second; | 
|  119     controllers_.erase(gamepad_info->handle); |  119     controllers_.erase(gamepad_info->handle); | 
|  120     delete gamepad_info; |  120     delete gamepad_info; | 
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  504     return false; |  504     return false; | 
|  505   hidd_get_product_string_ = reinterpret_cast<HidDGetStringFunc>( |  505   hidd_get_product_string_ = reinterpret_cast<HidDGetStringFunc>( | 
|  506       hid_dll_.GetFunctionPointer("HidD_GetProductString")); |  506       hid_dll_.GetFunctionPointer("HidD_GetProductString")); | 
|  507   if (!hidd_get_product_string_) |  507   if (!hidd_get_product_string_) | 
|  508     return false; |  508     return false; | 
|  509  |  509  | 
|  510   return true; |  510   return true; | 
|  511 } |  511 } | 
|  512  |  512  | 
|  513 }  // namespace content |  513 }  // namespace content | 
| OLD | NEW |