Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Unified Diff: components/mus/ws/window_manager_window_tree_factory_set.cc

Issue 2072343002: Changes how window manager obtains WindowTree from mus (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: include Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/mus/ws/window_manager_window_tree_factory_set.cc
diff --git a/components/mus/ws/window_manager_window_tree_factory_set.cc b/components/mus/ws/window_manager_window_tree_factory_set.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d9bd63d61c2cdf4d5993694423a916c36508bb8c
--- /dev/null
+++ b/components/mus/ws/window_manager_window_tree_factory_set.cc
@@ -0,0 +1,107 @@
+// 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 "components/mus/ws/window_manager_window_tree_factory_set.h"
+
+#include "components/mus/ws/user_id_tracker_observer.h"
+#include "components/mus/ws/window_manager_window_tree_factory.h"
+#include "components/mus/ws/window_manager_window_tree_factory_set_observer.h"
+#include "components/mus/ws/window_server.h"
+
+namespace mus {
+namespace ws {
+
+WindowManagerWindowTreeFactorySet::WindowManagerWindowTreeFactorySet(
+ WindowServer* window_server,
+ UserIdTracker* id_tracker)
+ : id_tracker_(id_tracker), window_server_(window_server) {
+ id_tracker_->AddObserver(this);
+}
+
+WindowManagerWindowTreeFactorySet::~WindowManagerWindowTreeFactorySet() {
+ id_tracker_->RemoveObserver(this);
+}
+
+WindowManagerWindowTreeFactory* WindowManagerWindowTreeFactorySet::Add(
+ const UserId& user_id,
+ mojo::InterfaceRequest<mojom::WindowManagerWindowTreeFactory> request) {
+ if (ContainsFactoryForUser(user_id)) {
+ DVLOG(1) << "can only have one factory per user";
+ return nullptr;
+ }
+
+ std::unique_ptr<WindowManagerWindowTreeFactory> factory_ptr(
+ new WindowManagerWindowTreeFactory(this, user_id, std::move(request)));
+ WindowManagerWindowTreeFactory* factory = factory_ptr.get();
+ factories_.push_back(std::move(factory_ptr));
+ return factory;
+}
+
+void WindowManagerWindowTreeFactorySet::DeleteFactoryAssociatedWithTree(
+ WindowTree* window_tree) {
+ for (auto it = factories_.begin(); it != factories_.end(); ++it) {
+ if ((*it)->window_tree() == window_tree) {
+ factories_.erase(it);
+ return;
+ }
+ }
+}
+
+std::vector<WindowManagerWindowTreeFactory*>
+WindowManagerWindowTreeFactorySet::GetFactories() {
+ std::vector<WindowManagerWindowTreeFactory*> result;
+ for (auto& factory : factories_)
+ result.push_back(factory.get());
+ return result;
+}
+
+void WindowManagerWindowTreeFactorySet::AddObserver(
+ WindowManagerWindowTreeFactorySetObserver* observer) {
+ observers_.AddObserver(observer);
+}
+
+void WindowManagerWindowTreeFactorySet::RemoveObserver(
+ WindowManagerWindowTreeFactorySetObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+bool WindowManagerWindowTreeFactorySet::ContainsFactoryForUser(
+ const UserId& user_id) const {
+ for (auto& factory : factories_) {
+ if (factory->user_id() == user_id)
+ return true;
+ }
+ return false;
+}
+
+void WindowManagerWindowTreeFactorySet::OnWindowManagerWindowTreeFactoryReady(
+ WindowManagerWindowTreeFactory* factory) {
+ const bool is_first_valid_factory = !got_valid_factory_;
+ got_valid_factory_ = true;
+ FOR_EACH_OBSERVER(WindowManagerWindowTreeFactorySetObserver, observers_,
+ OnWindowManagerWindowTreeFactoryReady(factory));
+
+ // Notify after other observers as WindowServer triggers other
+ // observers being added, which will have already processed the add.
+ if (is_first_valid_factory)
+ window_server_->OnFirstWindowManagerWindowTreeFactoryReady();
+}
+
+void WindowManagerWindowTreeFactorySet::OnActiveUserIdChanged(
+ const UserId& previously_active_id,
+ const UserId& active_id) {}
+
+void WindowManagerWindowTreeFactorySet::OnUserIdAdded(const UserId& id) {}
+
+void WindowManagerWindowTreeFactorySet::OnUserIdRemoved(const UserId& id) {
+ for (auto iter = factories_.begin(); iter != factories_.end(); ++iter) {
+ if ((*iter)->user_id() == id) {
+ factories_.erase(iter);
+ return;
+ }
+ }
+}
+
+} // namespace ws
+} // namespace mus

Powered by Google App Engine
This is Rietveld 408576698