blob: 4b9b88485e9edec024e3713f9eefd00053eaa277 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_UI_WS_WINDOW_TREE_BINDING_H_
#define SERVICES_UI_WS_WINDOW_TREE_BINDING_H_
#include <memory>
#include "base/macros.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "services/ui/public/interfaces/window_tree.mojom.h"
namespace ui {
namespace ws {
class WindowServer;
class WindowTree;
// WindowTreeBinding manages the binding between a WindowTree and its
// WindowTreeClient. WindowTreeBinding exists so that a mock implementation
// of WindowTreeClient can be injected for tests. WindowTree owns its
// associated WindowTreeBinding.
class WindowTreeBinding {
public:
explicit WindowTreeBinding(mojom::WindowTreeClient* client);
virtual ~WindowTreeBinding();
mojom::WindowTreeClient* client() { return client_; }
// Obtains a new WindowManager. This should only be called once.
virtual mojom::WindowManager* GetWindowManager() = 0;
virtual void SetIncomingMethodCallProcessingPaused(bool paused) = 0;
// Called when the WindowServer is destroyed. Sets |client_| to
// CreateClientForShutdown().
void ResetClientForShutdown();
protected:
virtual mojom::WindowTreeClient* CreateClientForShutdown() = 0;
private:
mojom::WindowTreeClient* client_;
DISALLOW_COPY_AND_ASSIGN(WindowTreeBinding);
};
// Bindings implementation of WindowTreeBinding.
class DefaultWindowTreeBinding : public WindowTreeBinding {
public:
DefaultWindowTreeBinding(WindowTree* tree,
WindowServer* window_server,
mojom::WindowTreeRequest service_request,
mojom::WindowTreeClientPtr client);
DefaultWindowTreeBinding(WindowTree* tree,
mojom::WindowTreeClientPtr client);
~DefaultWindowTreeBinding() override;
// Use when created with the constructor that does not take a
// WindowTreeRequest.
mojom::WindowTreePtr CreateInterfacePtrAndBind();
// WindowTreeBinding:
mojom::WindowManager* GetWindowManager() override;
void SetIncomingMethodCallProcessingPaused(bool paused) override;
protected:
// WindowTreeBinding:
mojom::WindowTreeClient* CreateClientForShutdown() override;
private:
mojo::Binding<mojom::WindowTree> binding_;
mojom::WindowTreeClientPtr client_;
mojom::WindowManagerAssociatedPtr window_manager_internal_;
DISALLOW_COPY_AND_ASSIGN(DefaultWindowTreeBinding);
};
} // namespace ws
} // namespace ui
#endif // SERVICES_UI_WS_WINDOW_TREE_BINDING_H_