| Index: ui/ozone/public/cursor_factory_ozone.cc | 
| diff --git a/ui/ozone/public/cursor_factory_ozone.cc b/ui/ozone/public/cursor_factory_ozone.cc | 
| index 356bd127b80cf434f9266882158cbfffa361db0d..7efc26c22bffb003c81de9d0844f2c064b6772c4 100644 | 
| --- a/ui/ozone/public/cursor_factory_ozone.cc | 
| +++ b/ui/ozone/public/cursor_factory_ozone.cc | 
| @@ -4,26 +4,37 @@ | 
|  | 
| #include "ui/ozone/public/cursor_factory_ozone.h" | 
|  | 
| +#include "base/lazy_instance.h" | 
| #include "base/logging.h" | 
| +#include "base/threading/thread_local.h" | 
|  | 
| namespace ui { | 
|  | 
| -// static | 
| -CursorFactoryOzone* CursorFactoryOzone::impl_ = NULL; | 
| +namespace { | 
| + | 
| +// TODO(mfomitchev): crbug.com/741106 | 
| +// Until the above bug is fixed, CursorFactoryOzone singleton needs to be | 
| +// thread-local, because Ash creates its own instance. | 
| +base::LazyInstance<base::ThreadLocalPointer<CursorFactoryOzone>>::Leaky | 
| +    lazy_tls_ptr = LAZY_INSTANCE_INITIALIZER; | 
| + | 
| +}  // namespace | 
|  | 
| CursorFactoryOzone::CursorFactoryOzone() { | 
| -  DCHECK(!impl_) << "There should only be a single CursorFactoryOzone."; | 
| -  impl_ = this; | 
| +  DCHECK(!lazy_tls_ptr.Pointer()->Get()) | 
| +      << "There should only be a single CursorFactoryOzone per thread."; | 
| +  lazy_tls_ptr.Pointer()->Set(this); | 
| } | 
|  | 
| CursorFactoryOzone::~CursorFactoryOzone() { | 
| -  DCHECK_EQ(impl_, this); | 
| -  impl_ = NULL; | 
| +  DCHECK_EQ(lazy_tls_ptr.Pointer()->Get(), this); | 
| +  lazy_tls_ptr.Pointer()->Set(nullptr); | 
| } | 
|  | 
| CursorFactoryOzone* CursorFactoryOzone::GetInstance() { | 
| -  DCHECK(impl_) << "No CursorFactoryOzone implementation set."; | 
| -  return impl_; | 
| +  CursorFactoryOzone* result = lazy_tls_ptr.Pointer()->Get(); | 
| +  DCHECK(result) << "No CursorFactoryOzone implementation set."; | 
| +  return result; | 
| } | 
|  | 
| PlatformCursor CursorFactoryOzone::GetDefaultCursor(CursorType type) { | 
|  |