blob: 9b8a55e0526bc3e29ea23e93023b32409d85f813 [file] [log] [blame]
// Copyright 2016 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.
#include "services/ui/ws/window_manager_window_tree_factory.h"
#include "base/bind.h"
#include "services/ui/ws/window_manager_window_tree_factory_set.h"
#include "services/ui/ws/window_server.h"
#include "services/ui/ws/window_tree.h"
namespace ui {
namespace ws {
WindowManagerWindowTreeFactory::WindowManagerWindowTreeFactory(
WindowManagerWindowTreeFactorySet* window_manager_window_tree_factory_set,
const UserId& user_id,
mojo::InterfaceRequest<mojom::WindowManagerWindowTreeFactory> request)
: window_manager_window_tree_factory_set_(
window_manager_window_tree_factory_set),
user_id_(user_id),
binding_(this),
window_tree_(nullptr) {
if (request.is_pending())
binding_.Bind(std::move(request));
}
WindowManagerWindowTreeFactory::~WindowManagerWindowTreeFactory() {}
void WindowManagerWindowTreeFactory::CreateWindowTree(
mojom::WindowTreeRequest window_tree_request,
mojom::WindowTreeClientPtr window_tree_client) {
// CreateWindowTree() can only be called once, so there is no reason to keep
// the binding around.
if (binding_.is_bound())
binding_.Close();
SetWindowTree(GetWindowServer()->CreateTreeForWindowManager(
user_id_, std::move(window_tree_request), std::move(window_tree_client)));
}
WindowManagerWindowTreeFactory::WindowManagerWindowTreeFactory(
WindowManagerWindowTreeFactorySet* window_manager_window_tree_factory_set,
const UserId& user_id)
: window_manager_window_tree_factory_set_(
window_manager_window_tree_factory_set),
user_id_(user_id),
binding_(this),
window_tree_(nullptr) {}
WindowServer* WindowManagerWindowTreeFactory::GetWindowServer() {
return window_manager_window_tree_factory_set_->window_server();
}
void WindowManagerWindowTreeFactory::SetWindowTree(WindowTree* window_tree) {
DCHECK(!window_tree_);
window_tree_ = window_tree;
window_manager_window_tree_factory_set_
->OnWindowManagerWindowTreeFactoryReady(this);
}
} // namespace ws
} // namespace ui