Chromium Code Reviews| Index: services/ui/ws/window_tree_host_factory_registrar.cc | 
| diff --git a/services/ui/ws/window_tree_host_factory_registrar.cc b/services/ui/ws/window_tree_host_factory_registrar.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..7e1ccb561533294e307d505c7b03798d40dc5893 | 
| --- /dev/null | 
| +++ b/services/ui/ws/window_tree_host_factory_registrar.cc | 
| @@ -0,0 +1,56 @@ | 
| +// Copyright 2017 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_tree_host_factory_registrar.h" | 
| + | 
| +#include "services/ui/ws/default_access_policy.h" | 
| +#include "services/ui/ws/window_server.h" | 
| +#include "services/ui/ws/window_tree.h" | 
| +#include "services/ui/ws/window_tree_host_factory.h" | 
| + | 
| +namespace ui { | 
| +namespace ws { | 
| + | 
| +WindowTreeHostFactoryRegistrar::WindowTreeHostFactoryRegistrar( | 
| + WindowServer* window_server, | 
| + const UserId& user_id) | 
| + : window_server_(window_server), user_id_(user_id) {} | 
| + | 
| +WindowTreeHostFactoryRegistrar::~WindowTreeHostFactoryRegistrar() {} | 
| + | 
| +void WindowTreeHostFactoryRegistrar::Register( | 
| + mojom::WindowTreeHostFactoryRequest host_factory_request, | 
| + mojom::WindowTreeRequest tree_request, | 
| + mojom::WindowTreeClientPtr tree_client) { | 
| + std::unique_ptr<WindowTreeHostFactory> host_factory( | 
| 
 
kylechar
2017/03/07 18:19:37
It's preferred to use MakeUnique, so something lik
 
tonikitoo
2017/03/07 20:09:36
Will fix.
 
 | 
| + new WindowTreeHostFactory(window_server_, user_id_)); | 
| + | 
| + host_factory->AddBinding(std::move(host_factory_request)); | 
| + | 
| + std::unique_ptr<ws::WindowTree> tree( | 
| + new ws::WindowTree(window_server_, user_id_, nullptr /*ServerWindow*/, | 
| + base::WrapUnique(new DefaultAccessPolicy))); | 
| + | 
| + std::unique_ptr<ws::DefaultWindowTreeBinding> tree_binding( | 
| + new ws::DefaultWindowTreeBinding(tree.get(), window_server_, | 
| + std::move(tree_request), | 
| + std::move(tree_client))); | 
| + | 
| + host_factory->set_window_tree(tree.get()); | 
| + | 
| + // Pass nullptr as mojom::WindowTreePtr (3rd parameter), because in external | 
| + // window mode, the WindowTreePtr is created on the aura/WindowTreeClient | 
| + // side. | 
| + // | 
| + // NOTE: This call to ::AddTree calls ::Init. However, it will not trigger a | 
| + // ::OnEmbed call because the WindowTree instance was created above passing | 
| + // 'nullptr' as the ServerWindow, hence there is no 'root' yet. | 
| + window_server_->AddTree(std::move(tree), std::move(tree_binding), | 
| + nullptr /*mojom::WindowTreePtr*/); | 
| + | 
| + window_server_->set_window_tree_host_factory(std::move(host_factory)); | 
| +} | 
| + | 
| +} // namespace ws | 
| +} // namespace ui |