Index: ui/views/mus/window_manager_connection.cc |
diff --git a/ui/views/mus/window_manager_connection.cc b/ui/views/mus/window_manager_connection.cc |
index 9924b2d56fed2024a57e2a4fb4968fc21991a6ca..743c2d0260743e26ec005a57f576836374da6103 100644 |
--- a/ui/views/mus/window_manager_connection.cc |
+++ b/ui/views/mus/window_manager_connection.cc |
@@ -35,10 +35,14 @@ base::LazyInstance<WindowManagerConnectionPtr>::Leaky lazy_tls_ptr = |
} // namespace |
// static |
-void WindowManagerConnection::Create(shell::Connector* connector, |
- const shell::Identity& identity) { |
+std::unique_ptr<WindowManagerConnection> WindowManagerConnection::Create( |
+ shell::Connector* connector, |
+ const shell::Identity& identity) { |
DCHECK(!lazy_tls_ptr.Pointer()->Get()); |
- lazy_tls_ptr.Pointer()->Set(new WindowManagerConnection(connector, identity)); |
+ WindowManagerConnection* connection = |
+ new WindowManagerConnection(connector, identity); |
+ DCHECK(lazy_tls_ptr.Pointer()->Get()); |
+ return base::WrapUnique(connection); |
} |
// static |
@@ -53,12 +57,6 @@ bool WindowManagerConnection::Exists() { |
return !!lazy_tls_ptr.Pointer()->Get(); |
} |
-// static |
-void WindowManagerConnection::Reset() { |
- delete Get(); |
- lazy_tls_ptr.Pointer()->Set(nullptr); |
-} |
- |
mus::Window* WindowManagerConnection::NewWindow( |
const std::map<std::string, std::vector<uint8_t>>& properties) { |
return window_tree_connection_->NewTopLevelWindow(&properties); |
@@ -102,17 +100,21 @@ WindowManagerConnection::WindowManagerConnection( |
const shell::Identity& identity) |
: connector_(connector), |
identity_(identity), |
- window_tree_connection_(nullptr) { |
+ created_device_data_manager_(false) { |
+ lazy_tls_ptr.Pointer()->Set(this); |
window_tree_connection_.reset( |
mus::WindowTreeConnection::Create(this, connector_)); |
screen_.reset(new ScreenMus(this)); |
screen_->Init(connector); |
- // TODO(sad): We should have a DeviceDataManager implementation that talks to |
- // a mojo service to learn about the input-devices on the system. |
- // http://crbug.com/601981 |
- ui::DeviceDataManager::CreateInstance(); |
+ if (!ui::DeviceDataManager::HasInstance()) { |
+ // TODO(sad): We should have a DeviceDataManager implementation that talks |
+ // to a mojo service to learn about the input-devices on the system. |
+ // http://crbug.com/601981 |
+ ui::DeviceDataManager::CreateInstance(); |
+ created_device_data_manager_ = true; |
+ } |
ViewsDelegate::GetInstance()->set_native_widget_factory(base::Bind( |
&WindowManagerConnection::CreateNativeWidgetMus, |
@@ -124,8 +126,9 @@ WindowManagerConnection::~WindowManagerConnection() { |
// ~WindowTreeConnection calls back to us (we're the WindowTreeDelegate), |
// destroy it while we are still valid. |
window_tree_connection_.reset(); |
- |
- ui::DeviceDataManager::DeleteInstance(); |
+ if (created_device_data_manager_) |
+ ui::DeviceDataManager::DeleteInstance(); |
+ lazy_tls_ptr.Pointer()->Set(nullptr); |
} |
bool WindowManagerConnection::HasPointerWatcher() { |