tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ClientState.cpp (4908B)


      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 
     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 
     20 ClientWindowState::ClientWindowState(const IPCClientWindowState& aData)
     21    : mData(MakeUnique<IPCClientWindowState>(aData)) {}
     22 
     23 ClientWindowState::ClientWindowState(const ClientWindowState& aRight) {
     24  operator=(aRight);
     25 }
     26 
     27 ClientWindowState::ClientWindowState(ClientWindowState&& aRight)
     28    : mData(std::move(aRight.mData)) {}
     29 
     30 ClientWindowState& ClientWindowState::operator=(
     31    const ClientWindowState& aRight) {
     32  mData.reset();
     33  mData = MakeUnique<IPCClientWindowState>(*aRight.mData);
     34  return *this;
     35 }
     36 
     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 
     45 mozilla::dom::VisibilityState ClientWindowState::VisibilityState() const {
     46  return mData->visibilityState();
     47 }
     48 
     49 const TimeStamp& ClientWindowState::LastFocusTime() const {
     50  return mData->lastFocusTime();
     51 }
     52 
     53 bool ClientWindowState::Focused() const { return mData->focused(); }
     54 
     55 StorageAccess ClientWindowState::GetStorageAccess() const {
     56  return mData->storageAccess();
     57 }
     58 
     59 const IPCClientWindowState& ClientWindowState::ToIPC() const { return *mData; }
     60 
     61 ClientWorkerState::ClientWorkerState(StorageAccess aStorageAccess)
     62    : mData(MakeUnique<IPCClientWorkerState>(aStorageAccess)) {}
     63 
     64 ClientWorkerState::ClientWorkerState(const IPCClientWorkerState& aData)
     65    : mData(MakeUnique<IPCClientWorkerState>(aData)) {}
     66 
     67 ClientWorkerState::ClientWorkerState(ClientWorkerState&& aRight)
     68    : mData(std::move(aRight.mData)) {}
     69 
     70 ClientWorkerState::ClientWorkerState(const ClientWorkerState& aRight) {
     71  operator=(aRight);
     72 }
     73 
     74 ClientWorkerState& ClientWorkerState::operator=(
     75    const ClientWorkerState& aRight) {
     76  mData.reset();
     77  mData = MakeUnique<IPCClientWorkerState>(*aRight.mData);
     78  return *this;
     79 }
     80 
     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 
     89 StorageAccess ClientWorkerState::GetStorageAccess() const {
     90  return mData->storageAccess();
     91 }
     92 
     93 const IPCClientWorkerState& ClientWorkerState::ToIPC() const { return *mData; }
     94 
     95 ClientState::ClientState() = default;
     96 
     97 ClientState::ClientState(const ClientWindowState& aWindowState) {
     98  mData.emplace(AsVariant(aWindowState));
     99 }
    100 
    101 ClientState::ClientState(const ClientWorkerState& aWorkerState) {
    102  mData.emplace(AsVariant(aWorkerState));
    103 }
    104 
    105 ClientState::ClientState(const IPCClientWindowState& aData) {
    106  mData.emplace(AsVariant(ClientWindowState(aData)));
    107 }
    108 
    109 ClientState::ClientState(const IPCClientWorkerState& aData) {
    110  mData.emplace(AsVariant(ClientWorkerState(aData)));
    111 }
    112 
    113 ClientState::ClientState(ClientState&& aRight)
    114    : mData(std::move(aRight.mData)) {}
    115 
    116 ClientState& ClientState::operator=(ClientState&& aRight) {
    117  mData = std::move(aRight.mData);
    118  return *this;
    119 }
    120 
    121 ClientState::~ClientState() = default;
    122 
    123 // static
    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 
    135 bool ClientState::IsWindowState() const {
    136  return mData.isSome() && mData.ref().is<ClientWindowState>();
    137 }
    138 
    139 const ClientWindowState& ClientState::AsWindowState() const {
    140  return mData.ref().as<ClientWindowState>();
    141 }
    142 
    143 bool ClientState::IsWorkerState() const {
    144  return mData.isSome() && mData.ref().is<ClientWorkerState>();
    145 }
    146 
    147 const ClientWorkerState& ClientState::AsWorkerState() const {
    148  return mData.ref().as<ClientWorkerState>();
    149 }
    150 
    151 StorageAccess ClientState::GetStorageAccess() const {
    152  if (IsWindowState()) {
    153    return AsWindowState().GetStorageAccess();
    154  }
    155 
    156  return AsWorkerState().GetStorageAccess();
    157 }
    158 
    159 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