Index: ui/views/mus/surface_binding.cc |
diff --git a/ui/views/mus/surface_binding.cc b/ui/views/mus/surface_binding.cc |
index 659766aed3a89fc04422efea4af4804b4e0f5365..d5daa7dbf4de273b9b78791ea609c24a087a4bcd 100644 |
--- a/ui/views/mus/surface_binding.cc |
+++ b/ui/views/mus/surface_binding.cc |
@@ -37,7 +37,8 @@ namespace views { |
// remain the PerClientState is deleted and the underlying map cleaned up. |
class SurfaceBinding::PerClientState : public base::RefCounted<PerClientState> { |
public: |
- static PerClientState* Get(ui::WindowTreeClient* client); |
+ static PerClientState* Get(shell::Connector* connector, |
+ ui::WindowTreeClient* client); |
std::unique_ptr<cc::OutputSurface> CreateOutputSurface( |
ui::Window* window, |
@@ -48,12 +49,13 @@ class SurfaceBinding::PerClientState : public base::RefCounted<PerClientState> { |
friend class base::RefCounted<PerClientState>; |
- explicit PerClientState(ui::WindowTreeClient* client); |
+ PerClientState(shell::Connector* connector, ui::WindowTreeClient* client); |
~PerClientState(); |
static base::LazyInstance< |
base::ThreadLocalPointer<ClientToStateMap>>::Leaky window_states; |
+ shell::Connector* connector_; |
ui::WindowTreeClient* client_; |
DISALLOW_COPY_AND_ASSIGN(PerClientState); |
@@ -66,14 +68,18 @@ base::LazyInstance<base::ThreadLocalPointer< |
// static |
SurfaceBinding::PerClientState* SurfaceBinding::PerClientState::Get( |
+ shell::Connector* connector, |
ui::WindowTreeClient* client) { |
+ // |connector| can be null in some unit-tests. |
+ if (!connector) |
+ return nullptr; |
ClientToStateMap* window_map = window_states.Pointer()->Get(); |
if (!window_map) { |
window_map = new ClientToStateMap; |
window_states.Pointer()->Set(window_map); |
} |
if (!(*window_map)[client]) |
- (*window_map)[client] = new PerClientState(client); |
+ (*window_map)[client] = new PerClientState(connector, client); |
return (*window_map)[client]; |
} |
@@ -81,13 +87,15 @@ std::unique_ptr<cc::OutputSurface> |
SurfaceBinding::PerClientState::CreateOutputSurface( |
ui::Window* window, |
ui::mojom::SurfaceType surface_type) { |
- scoped_refptr<cc::ContextProvider> context_provider(new ui::ContextProvider); |
+ scoped_refptr<cc::ContextProvider> context_provider( |
+ new ui::ContextProvider(connector_)); |
return base::WrapUnique(new ui::OutputSurface( |
context_provider, window->RequestSurface(surface_type))); |
} |
-SurfaceBinding::PerClientState::PerClientState(ui::WindowTreeClient* client) |
- : client_(client) {} |
+SurfaceBinding::PerClientState::PerClientState(shell::Connector* connector, |
+ ui::WindowTreeClient* client) |
+ : connector_(connector), client_(client) {} |
SurfaceBinding::PerClientState::~PerClientState() { |
ClientToStateMap* window_map = window_states.Pointer()->Get(); |
@@ -102,11 +110,12 @@ SurfaceBinding::PerClientState::~PerClientState() { |
// SurfaceBinding -------------------------------------------------------------- |
-SurfaceBinding::SurfaceBinding(ui::Window* window, |
+SurfaceBinding::SurfaceBinding(shell::Connector* connector, |
+ ui::Window* window, |
ui::mojom::SurfaceType surface_type) |
: window_(window), |
surface_type_(surface_type), |
- state_(PerClientState::Get(window->window_tree())) {} |
+ state_(PerClientState::Get(connector, window->window_tree())) {} |
SurfaceBinding::~SurfaceBinding() {} |