| Index: content/browser/gamepad/gamepad_provider.cc
|
| diff --git a/content/browser/gamepad/gamepad_provider.cc b/content/browser/gamepad/gamepad_provider.cc
|
| index 1dad4829f8d0a11222fad76cbeea0bbcd7d257d8..b4fe67fc81e2a7e54b6f74b4f233a687263d95b9 100644
|
| --- a/content/browser/gamepad/gamepad_provider.cc
|
| +++ b/content/browser/gamepad/gamepad_provider.cc
|
| @@ -113,8 +113,17 @@ void GamepadProvider::Initialize(scoped_ptr<GamepadDataFetcher> fetcher) {
|
| memset(hwbuf, 0, sizeof(GamepadHardwareBuffer));
|
|
|
| polling_thread_.reset(new base::Thread("Gamepad polling thread"));
|
| - polling_thread_->StartWithOptions(
|
| - base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
|
| +#if defined(OS_MACOSX)
|
| + // On Mac, the data fetcher uses IOKit which depends on CFRunLoop, so the
|
| + // message loop needs to be a UI-type loop.
|
| + const base::MessageLoop::Type kMessageLoopType = base::MessageLoop::TYPE_UI;
|
| +#else
|
| + // On Linux, the data fetcher needs to watch file descriptors, so the message
|
| + // loop needs to be a libevent loop. On Windows it doesn't matter what the
|
| + // loop is.
|
| + const base::MessageLoop::Type kMessageLoopType = base::MessageLoop::TYPE_IO;
|
| +#endif
|
| + polling_thread_->StartWithOptions(base::Thread::Options(kMessageLoopType, 0));
|
|
|
| polling_thread_->message_loop()->PostTask(
|
| FROM_HERE,
|
|
|