Commit 7d6c8b29 authored by erg's avatar erg Committed by Commit bot

mus: The window server needs to be able to write to the clipboard.

This lifetime management for ClipboardImpl from service.cc to the window
server.

BUG=614037

Review-Url: https://codereview.chromium.org/2180593002
Cr-Commit-Position: refs/heads/master@{#407308}
parent 6610df62
......@@ -75,7 +75,6 @@ struct Service::PendingRequest {
};
struct Service::UserState {
std::unique_ptr<clipboard::ClipboardImpl> clipboard;
std::unique_ptr<ws::AccessibilityManager> accessibility;
std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory;
};
......@@ -296,10 +295,8 @@ void Service::Create(shell::Connection* connection,
void Service::Create(shell::Connection* connection,
mojom::ClipboardRequest request) {
UserState* user_state = GetUserState(connection);
if (!user_state->clipboard)
user_state->clipboard.reset(new clipboard::ClipboardImpl);
user_state->clipboard->AddBinding(std::move(request));
const ws::UserId& user_id = connection->GetRemoteIdentity().user_id();
window_server_->GetClipboardForUser(user_id)->AddBinding(std::move(request));
}
void Service::Create(shell::Connection* connection,
......
......@@ -112,6 +112,7 @@ static_library("lib") {
"//services/shell/public/cpp",
"//services/shell/public/interfaces",
"//services/tracing/public/cpp",
"//services/ui/clipboard:lib",
"//services/ui/common:mus_common",
"//services/ui/display",
"//services/ui/gles2",
......
......@@ -242,6 +242,12 @@ void WindowServer::OnFirstWindowManagerWindowTreeFactoryReady() {
delegate_->CreateDefaultDisplays();
}
ui::clipboard::ClipboardImpl* WindowServer::GetClipboardForUser(
const UserId& user_id) {
DCHECK_GT(clipboard_map_.count(user_id), 0u);
return clipboard_map_[user_id].get();
}
UserActivityMonitor* WindowServer::GetUserActivityMonitorForUser(
const UserId& user_id) {
DCHECK_GT(activity_monitor_map_.count(user_id), 0u);
......@@ -769,10 +775,12 @@ void WindowServer::OnActiveUserIdChanged(const UserId& previously_active_id,
void WindowServer::OnUserIdAdded(const UserId& id) {
activity_monitor_map_[id] = base::MakeUnique<UserActivityMonitor>(nullptr);
clipboard_map_[id] = base::MakeUnique<clipboard::ClipboardImpl>();
}
void WindowServer::OnUserIdRemoved(const UserId& id) {
activity_monitor_map_.erase(id);
clipboard_map_.erase(id);
}
} // namespace ws
......
......@@ -15,6 +15,7 @@
#include "base/macros.h"
#include "mojo/public/cpp/bindings/array.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "services/ui/clipboard/clipboard_impl.h"
#include "services/ui/public/interfaces/window_manager_window_tree_factory.mojom.h"
#include "services/ui/public/interfaces/window_tree.mojom.h"
#include "services/ui/public/interfaces/window_tree_host.mojom.h"
......@@ -131,6 +132,8 @@ class WindowServer : public ServerWindowDelegate,
void OnFirstWindowManagerWindowTreeFactoryReady();
clipboard::ClipboardImpl* GetClipboardForUser(const UserId& user_id);
UserActivityMonitor* GetUserActivityMonitorForUser(const UserId& user_id);
WindowManagerWindowTreeFactorySet* window_manager_window_tree_factory_set() {
......@@ -218,6 +221,8 @@ class WindowServer : public ServerWindowDelegate,
std::map<ClientSpecificId, std::unique_ptr<WindowTree>>;
using UserActivityMonitorMap =
std::map<UserId, std::unique_ptr<UserActivityMonitor>>;
using UserClipboardMap =
std::map<UserId, std::unique_ptr<ui::clipboard::ClipboardImpl>>;
struct InFlightWindowManagerChange {
// Identifies the client that initiated the change.
......@@ -350,6 +355,7 @@ class WindowServer : public ServerWindowDelegate,
base::Callback<void(ServerWindow*)> window_paint_callback_;
UserActivityMonitorMap activity_monitor_map_;
UserClipboardMap clipboard_map_;
WindowManagerWindowTreeFactorySet window_manager_window_tree_factory_set_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment