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

Side by Side Diff: components/mus/ws/ids.h

Issue 2119963002: Move mus to //services/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef COMPONENTS_MUS_WS_IDS_H_
6 #define COMPONENTS_MUS_WS_IDS_H_
7
8 #include <stdint.h>
9
10 #include <tuple>
11
12 #include "base/containers/hash_tables.h"
13 #include "base/hash.h"
14 #include "components/mus/common/types.h"
15 #include "components/mus/common/util.h"
16
17 namespace mus {
18 namespace ws {
19
20 // A client id used to indicate no client. That is, no WindowTree ever gets this
21 // id.
22 const ClientSpecificId kInvalidClientId = 0;
23
24 // Every window has a unique id associated with it (WindowId). The id is a
25 // combination of the id assigned to the client (the high order bits) and
26 // a unique id for the window. Each client (WindowTree) refers to the window
27 // by an id assigned by the client (ClientWindowId). To facilitate this
28 // WindowTree maintains a mapping between WindowId and ClientWindowId.
29 //
30 // This model works when the client initiates creation of windows, which is
31 // the typical use case. Embed roots and the WindowManager are special, they
32 // get access to windows created by other clients. These clients see the
33 // id assigned on the server. Such clients have to take care that they only
34 // create windows using their client id. To do otherwise could result in
35 // multiple windows having the same ClientWindowId. WindowTree enforces
36 // that embed roots use the client id in creating the window id to avoid
37 // possible conflicts.
38 struct WindowId {
39 WindowId(ClientSpecificId client_id, ClientSpecificId window_id)
40 : client_id(client_id), window_id(window_id) {}
41 WindowId() : client_id(0), window_id(0) {}
42
43 bool operator==(const WindowId& other) const {
44 return other.client_id == client_id && other.window_id == window_id;
45 }
46
47 bool operator!=(const WindowId& other) const { return !(*this == other); }
48
49 bool operator<(const WindowId& other) const {
50 return std::tie(client_id, window_id) <
51 std::tie(other.client_id, other.window_id);
52 }
53
54 ClientSpecificId client_id;
55 ClientSpecificId window_id;
56 };
57
58 // Used for ids assigned by the client.
59 struct ClientWindowId {
60 explicit ClientWindowId(Id id) : id(id) {}
61 ClientWindowId() : id(0u) {}
62
63 bool operator==(const ClientWindowId& other) const { return other.id == id; }
64
65 bool operator!=(const ClientWindowId& other) const {
66 return !(*this == other);
67 }
68
69 bool operator<(const ClientWindowId& other) const { return id < other.id; }
70
71 Id id;
72 };
73
74 inline WindowId WindowIdFromTransportId(Id id) {
75 return WindowId(HiWord(id), LoWord(id));
76 }
77 inline Id WindowIdToTransportId(const WindowId& id) {
78 return (id.client_id << 16) | id.window_id;
79 }
80
81 // Returns a WindowId that is reserved to indicate no window. That is, no window
82 // will ever be created with this id.
83 inline WindowId InvalidWindowId() {
84 return WindowId(kInvalidClientId, 0);
85 }
86
87 // Returns a root window id with a given index offset.
88 inline WindowId RootWindowId(uint16_t index) {
89 return WindowId(kInvalidClientId, 2 + index);
90 }
91
92 } // namespace ws
93 } // namespace mus
94
95 namespace BASE_HASH_NAMESPACE {
96
97 template <>
98 struct hash<mus::ws::ClientWindowId> {
99 size_t operator()(const mus::ws::ClientWindowId& id) const {
100 return hash<mus::Id>()(id.id);
101 }
102 };
103
104 template <>
105 struct hash<mus::ws::WindowId> {
106 size_t operator()(const mus::ws::WindowId& id) const {
107 return hash<mus::Id>()(WindowIdToTransportId(id));
108 }
109 };
110
111 } // namespace BASE_HASH_NAMESPACE
112
113 #endif // COMPONENTS_MUS_WS_IDS_H_
OLDNEW
« no previous file with comments | « components/mus/ws/focus_controller_unittest.cc ('k') | components/mus/ws/modal_window_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698