blob: 63941069b710be67bc09827c702e5c715b3d94c7 [file] [log] [blame]
// 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 "ash/wayland/wayland_server_controller.h"
#include <memory>
#include "ash/keyboard/arc/arc_input_method_surface_manager.h"
#include "ash/public/cpp/ash_switches.h"
#include "ash/system/message_center/arc/arc_notification_surface_manager_impl.h"
#include "base/command_line.h"
#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop_current.h"
#include "components/exo/display.h"
#include "components/exo/file_helper.h"
#include "components/exo/wayland/server.h"
#include "components/exo/wayland/wayland_watcher.h"
#include "components/exo/wm_helper.h"
#include "components/exo/wm_helper_chromeos.h"
#include "ui/aura/env.h"
namespace ash {
// static
std::unique_ptr<WaylandServerController>
WaylandServerController::CreateIfNecessary(
std::unique_ptr<exo::FileHelper> file_helper,
aura::Env* env) {
if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshEnableWaylandServer)) {
return nullptr;
}
return base::WrapUnique(
new WaylandServerController(std::move(file_helper), env));
}
WaylandServerController::~WaylandServerController() {
wayland_watcher_.reset();
wayland_server_.reset();
display_.reset();
exo::WMHelper::SetInstance(nullptr);
wm_helper_.reset();
}
WaylandServerController::WaylandServerController(
std::unique_ptr<exo::FileHelper> file_helper,
aura::Env* env) {
arc_notification_surface_manager_ =
std::make_unique<ArcNotificationSurfaceManagerImpl>();
arc_input_method_surface_manager_ =
std::make_unique<ArcInputMethodSurfaceManager>();
wm_helper_ = std::make_unique<exo::WMHelperChromeOS>(env);
exo::WMHelper::SetInstance(wm_helper_.get());
display_ = std::make_unique<exo::Display>(
arc_notification_surface_manager_.get(),
arc_input_method_surface_manager_.get(), std::move(file_helper));
wayland_server_ = exo::wayland::Server::Create(display_.get());
// Wayland server creation can fail if XDG_RUNTIME_DIR is not set correctly.
if (wayland_server_)
wayland_watcher_ =
std::make_unique<exo::wayland::WaylandWatcher>(wayland_server_.get());
}
} // namespace ash