blob: 5c814e74c1d460b2c40bc3d40c5b556a3aae16d1 [file] [log] [blame]
// Copyright 2015 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 "chrome/browser/chrome_browser_main_extra_parts_exo.h"
#include "base/command_line.h"
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
#include "chrome/browser/ui/ash/ash_util.h"
#include "chrome/common/chrome_switches.h"
#include "components/exo/display.h"
#include "components/exo/wayland/server.h"
#include "content/public/browser/browser_thread.h"
class ChromeBrowserMainExtraPartsExo::WaylandWatcher
: public base::MessagePumpLibevent::Watcher {
public:
explicit WaylandWatcher(exo::wayland::Server* server) : server_(server) {
base::MessageLoopForUI::current()->WatchFileDescriptor(
server_->GetFileDescriptor(),
true, // persistent
base::MessagePumpLibevent::WATCH_READ, &controller_, this);
}
// base::MessagePumpLibevent::Watcher:
void OnFileCanReadWithoutBlocking(int fd) override {
server_->Dispatch(base::TimeDelta());
server_->Flush();
}
void OnFileCanWriteWithoutBlocking(int fd) override { NOTREACHED(); }
private:
base::MessagePumpLibevent::FileDescriptorWatcher controller_;
exo::wayland::Server* const server_;
DISALLOW_COPY_AND_ASSIGN(WaylandWatcher);
};
ChromeBrowserMainExtraPartsExo::ChromeBrowserMainExtraPartsExo()
: display_(new exo::Display) {}
ChromeBrowserMainExtraPartsExo::~ChromeBrowserMainExtraPartsExo() {}
void ChromeBrowserMainExtraPartsExo::PreProfileInit() {
if (!chrome::ShouldOpenAshOnStartup())
return;
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableWaylandServer)) {
wayland_server_ = exo::wayland::Server::Create(display_.get());
wayland_watcher_ =
make_scoped_ptr(new WaylandWatcher(wayland_server_.get()));
}
}
void ChromeBrowserMainExtraPartsExo::PostMainMessageLoopRun() {
wayland_watcher_.reset();
wayland_server_.reset();
}