| Index: ui/events/platform/platform_event_source.cc
|
| diff --git a/ui/events/platform/platform_event_source.cc b/ui/events/platform/platform_event_source.cc
|
| index 9be6630e268abbcb8ce45c7746f3f34cb119e41c..c521b282457fc1ca83c3e2c49dbe0133a66c9984 100644
|
| --- a/ui/events/platform/platform_event_source.cc
|
| +++ b/ui/events/platform/platform_event_source.cc
|
| @@ -6,30 +6,42 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "base/lazy_instance.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/message_loop/message_loop.h"
|
| +#include "base/threading/thread_local.h"
|
| #include "ui/events/platform/platform_event_dispatcher.h"
|
| #include "ui/events/platform/platform_event_observer.h"
|
| #include "ui/events/platform/scoped_event_dispatcher.h"
|
|
|
| namespace ui {
|
|
|
| -// static
|
| -PlatformEventSource* PlatformEventSource::instance_ = NULL;
|
| +namespace {
|
| +
|
| +// PlatformEventSource singleton is thread local so that different instances
|
| +// can be used on different threads (e.g. browser thread should be able to
|
| +// access PlatformEventSource owned by the UI Service's thread).
|
| +base::LazyInstance<base::ThreadLocalPointer<PlatformEventSource>>::Leaky
|
| + lazy_tls_ptr = LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +} // namespace
|
|
|
| PlatformEventSource::PlatformEventSource()
|
| : overridden_dispatcher_(NULL),
|
| overridden_dispatcher_restored_(false) {
|
| - CHECK(!instance_) << "Only one platform event source can be created.";
|
| - instance_ = this;
|
| + CHECK(!lazy_tls_ptr.Pointer()->Get())
|
| + << "Only one platform event source can be created.";
|
| + lazy_tls_ptr.Pointer()->Set(this);
|
| }
|
|
|
| PlatformEventSource::~PlatformEventSource() {
|
| - CHECK_EQ(this, instance_);
|
| - instance_ = NULL;
|
| + CHECK_EQ(this, lazy_tls_ptr.Pointer()->Get());
|
| + lazy_tls_ptr.Pointer()->Set(nullptr);
|
| }
|
|
|
| -PlatformEventSource* PlatformEventSource::GetInstance() { return instance_; }
|
| +PlatformEventSource* PlatformEventSource::GetInstance() {
|
| + return lazy_tls_ptr.Pointer()->Get();
|
| +}
|
|
|
| void PlatformEventSource::AddPlatformEventDispatcher(
|
| PlatformEventDispatcher* dispatcher) {
|
|
|