1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7 #include "ClientState.h"
8
9 #include "mozilla/dom/ClientIPCTypes.h"
10
11 namespace mozilla::dom {
12
ClientWindowState(mozilla::dom::VisibilityState aVisibilityState,const TimeStamp & aLastFocusTime,StorageAccess aStorageAccess,bool aFocused)13 ClientWindowState::ClientWindowState(
14 mozilla::dom::VisibilityState aVisibilityState,
15 const TimeStamp& aLastFocusTime, StorageAccess aStorageAccess,
16 bool aFocused)
17 : mData(MakeUnique<IPCClientWindowState>(aVisibilityState, aLastFocusTime,
18 aStorageAccess, aFocused)) {}
19
ClientWindowState(const IPCClientWindowState & aData)20 ClientWindowState::ClientWindowState(const IPCClientWindowState& aData)
21 : mData(MakeUnique<IPCClientWindowState>(aData)) {}
22
ClientWindowState(const ClientWindowState & aRight)23 ClientWindowState::ClientWindowState(const ClientWindowState& aRight) {
24 operator=(aRight);
25 }
26
ClientWindowState(ClientWindowState && aRight)27 ClientWindowState::ClientWindowState(ClientWindowState&& aRight)
28 : mData(std::move(aRight.mData)) {}
29
operator =(const ClientWindowState & aRight)30 ClientWindowState& ClientWindowState::operator=(
31 const ClientWindowState& aRight) {
32 mData.reset();
33 mData = MakeUnique<IPCClientWindowState>(*aRight.mData);
34 return *this;
35 }
36
operator =(ClientWindowState && aRight)37 ClientWindowState& ClientWindowState::operator=(ClientWindowState&& aRight) {
38 mData.reset();
39 mData = std::move(aRight.mData);
40 return *this;
41 }
42
43 ClientWindowState::~ClientWindowState() = default;
44
VisibilityState() const45 mozilla::dom::VisibilityState ClientWindowState::VisibilityState() const {
46 return mData->visibilityState();
47 }
48
LastFocusTime() const49 const TimeStamp& ClientWindowState::LastFocusTime() const {
50 return mData->lastFocusTime();
51 }
52
Focused() const53 bool ClientWindowState::Focused() const { return mData->focused(); }
54
GetStorageAccess() const55 StorageAccess ClientWindowState::GetStorageAccess() const {
56 return mData->storageAccess();
57 }
58
ToIPC() const59 const IPCClientWindowState& ClientWindowState::ToIPC() const { return *mData; }
60
ClientWorkerState(StorageAccess aStorageAccess)61 ClientWorkerState::ClientWorkerState(StorageAccess aStorageAccess)
62 : mData(MakeUnique<IPCClientWorkerState>(aStorageAccess)) {}
63
ClientWorkerState(const IPCClientWorkerState & aData)64 ClientWorkerState::ClientWorkerState(const IPCClientWorkerState& aData)
65 : mData(MakeUnique<IPCClientWorkerState>(aData)) {}
66
ClientWorkerState(ClientWorkerState && aRight)67 ClientWorkerState::ClientWorkerState(ClientWorkerState&& aRight)
68 : mData(std::move(aRight.mData)) {}
69
ClientWorkerState(const ClientWorkerState & aRight)70 ClientWorkerState::ClientWorkerState(const ClientWorkerState& aRight) {
71 operator=(aRight);
72 }
73
operator =(const ClientWorkerState & aRight)74 ClientWorkerState& ClientWorkerState::operator=(
75 const ClientWorkerState& aRight) {
76 mData.reset();
77 mData = MakeUnique<IPCClientWorkerState>(*aRight.mData);
78 return *this;
79 }
80
operator =(ClientWorkerState && aRight)81 ClientWorkerState& ClientWorkerState::operator=(ClientWorkerState&& aRight) {
82 mData.reset();
83 mData = std::move(aRight.mData);
84 return *this;
85 }
86
87 ClientWorkerState::~ClientWorkerState() = default;
88
GetStorageAccess() const89 StorageAccess ClientWorkerState::GetStorageAccess() const {
90 return mData->storageAccess();
91 }
92
ToIPC() const93 const IPCClientWorkerState& ClientWorkerState::ToIPC() const { return *mData; }
94
95 ClientState::ClientState() = default;
96
ClientState(const ClientWindowState & aWindowState)97 ClientState::ClientState(const ClientWindowState& aWindowState) {
98 mData.emplace(AsVariant(aWindowState));
99 }
100
ClientState(const ClientWorkerState & aWorkerState)101 ClientState::ClientState(const ClientWorkerState& aWorkerState) {
102 mData.emplace(AsVariant(aWorkerState));
103 }
104
ClientState(const IPCClientWindowState & aData)105 ClientState::ClientState(const IPCClientWindowState& aData) {
106 mData.emplace(AsVariant(ClientWindowState(aData)));
107 }
108
ClientState(const IPCClientWorkerState & aData)109 ClientState::ClientState(const IPCClientWorkerState& aData) {
110 mData.emplace(AsVariant(ClientWorkerState(aData)));
111 }
112
ClientState(ClientState && aRight)113 ClientState::ClientState(ClientState&& aRight)
114 : mData(std::move(aRight.mData)) {}
115
operator =(ClientState && aRight)116 ClientState& ClientState::operator=(ClientState&& aRight) {
117 mData = std::move(aRight.mData);
118 return *this;
119 }
120
121 ClientState::~ClientState() = default;
122
123 // static
FromIPC(const IPCClientState & aData)124 ClientState ClientState::FromIPC(const IPCClientState& aData) {
125 switch (aData.type()) {
126 case IPCClientState::TIPCClientWindowState:
127 return ClientState(aData.get_IPCClientWindowState());
128 case IPCClientState::TIPCClientWorkerState:
129 return ClientState(aData.get_IPCClientWorkerState());
130 default:
131 MOZ_CRASH("unexpected IPCClientState type");
132 }
133 }
134
IsWindowState() const135 bool ClientState::IsWindowState() const {
136 return mData.isSome() && mData.ref().is<ClientWindowState>();
137 }
138
AsWindowState() const139 const ClientWindowState& ClientState::AsWindowState() const {
140 return mData.ref().as<ClientWindowState>();
141 }
142
IsWorkerState() const143 bool ClientState::IsWorkerState() const {
144 return mData.isSome() && mData.ref().is<ClientWorkerState>();
145 }
146
AsWorkerState() const147 const ClientWorkerState& ClientState::AsWorkerState() const {
148 return mData.ref().as<ClientWorkerState>();
149 }
150
GetStorageAccess() const151 StorageAccess ClientState::GetStorageAccess() const {
152 if (IsWindowState()) {
153 return AsWindowState().GetStorageAccess();
154 }
155
156 return AsWorkerState().GetStorageAccess();
157 }
158
ToIPC() const159 const IPCClientState ClientState::ToIPC() const {
160 if (IsWindowState()) {
161 return IPCClientState(AsWindowState().ToIPC());
162 }
163
164 return IPCClientState(AsWorkerState().ToIPC());
165 }
166
167 } // namespace mozilla::dom
168