OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "ui/views/mus/surface_binding.h" | 5 #include "ui/views/mus/surface_binding.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 | 72 |
73 // static | 73 // static |
74 base::LazyInstance<base::ThreadLocalPointer< | 74 base::LazyInstance<base::ThreadLocalPointer< |
75 SurfaceBinding::PerClientState::ClientToStateMap>>::Leaky | 75 SurfaceBinding::PerClientState::ClientToStateMap>>::Leaky |
76 SurfaceBinding::PerClientState::window_states; | 76 SurfaceBinding::PerClientState::window_states; |
77 | 77 |
78 // static | 78 // static |
79 SurfaceBinding::PerClientState* SurfaceBinding::PerClientState::Get( | 79 SurfaceBinding::PerClientState* SurfaceBinding::PerClientState::Get( |
80 shell::Connector* connector, | 80 shell::Connector* connector, |
81 mus::WindowTreeClient* client) { | 81 mus::WindowTreeClient* client) { |
| 82 // |connector| can be null in some unit-tests. |
| 83 if (!connector) |
| 84 return nullptr; |
82 ClientToStateMap* window_map = window_states.Pointer()->Get(); | 85 ClientToStateMap* window_map = window_states.Pointer()->Get(); |
83 if (!window_map) { | 86 if (!window_map) { |
84 window_map = new ClientToStateMap; | 87 window_map = new ClientToStateMap; |
85 window_states.Pointer()->Set(window_map); | 88 window_states.Pointer()->Set(window_map); |
86 } | 89 } |
87 if (!(*window_map)[client]) { | 90 if (!(*window_map)[client]) { |
88 (*window_map)[client] = new PerClientState(connector, client); | 91 (*window_map)[client] = new PerClientState(connector, client); |
89 (*window_map)[client]->Init(); | 92 (*window_map)[client]->Init(); |
90 } | 93 } |
91 return (*window_map)[client]; | 94 return (*window_map)[client]; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 SurfaceBinding::SurfaceBinding(shell::Connector* connector, | 142 SurfaceBinding::SurfaceBinding(shell::Connector* connector, |
140 mus::Window* window, | 143 mus::Window* window, |
141 mus::mojom::SurfaceType surface_type) | 144 mus::mojom::SurfaceType surface_type) |
142 : window_(window), | 145 : window_(window), |
143 surface_type_(surface_type), | 146 surface_type_(surface_type), |
144 state_(PerClientState::Get(connector, window->window_tree())) {} | 147 state_(PerClientState::Get(connector, window->window_tree())) {} |
145 | 148 |
146 SurfaceBinding::~SurfaceBinding() {} | 149 SurfaceBinding::~SurfaceBinding() {} |
147 | 150 |
148 std::unique_ptr<cc::OutputSurface> SurfaceBinding::CreateOutputSurface() { | 151 std::unique_ptr<cc::OutputSurface> SurfaceBinding::CreateOutputSurface() { |
149 return state_->CreateOutputSurface(window_, surface_type_); | 152 return state_ ? state_->CreateOutputSurface(window_, surface_type_) : nullptr; |
150 } | 153 } |
151 | 154 |
152 } // namespace views | 155 } // namespace views |
OLD | NEW |