tor-browser

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

RemoteWorkerDebuggerParent.cpp (7012B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include "RemoteWorkerDebuggerParent.h"
      6 
      7 #include "mozilla/dom/WorkerDebuggerManager.h"
      8 #include "mozilla/dom/WorkerPrivate.h"
      9 
     10 namespace mozilla::dom {
     11 
     12 RemoteWorkerDebuggerParent::RemoteWorkerDebuggerParent(
     13    const RemoteWorkerDebuggerInfo& aWorkerDebuggerInfo,
     14    Endpoint<PRemoteWorkerDebuggerParent>&& aParentEp)
     15    : mWorkerDebuggerInfo(std::move(aWorkerDebuggerInfo)) {
     16  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     17  MOZ_ASSERT_DEBUG_OR_FUZZING(aParentEp.IsValid());
     18  aParentEp.Bind(this);
     19  if (mWorkerDebuggerInfo.type() == WorkerKindDedicated) {
     20    mWindowIDs.AppendElement(mWorkerDebuggerInfo.windowID());
     21  }
     22 }
     23 
     24 RemoteWorkerDebuggerParent::~RemoteWorkerDebuggerParent() {
     25  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     26 }
     27 
     28 // PRemoteWorkerDebugger IPC interface
     29 mozilla::ipc::IPCResult RemoteWorkerDebuggerParent::RecvUnregister() {
     30  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     31 
     32  RefPtr<WorkerDebuggerManager> manager = WorkerDebuggerManager::Get();
     33 
     34  MOZ_ASSERT_DEBUG_OR_FUZZING(manager);
     35  manager->UnregisterDebugger(this);
     36  for (const auto& listener : mListeners.Clone()) {
     37    listener->OnClose();
     38  }
     39 
     40  if (CanSend()) {
     41    (void)SendUnregisterDone();
     42  }
     43 
     44  return IPC_OK();
     45 }
     46 
     47 mozilla::ipc::IPCResult RemoteWorkerDebuggerParent::RecvReportErrorToDebugger(
     48    const RemoteWorkerDebuggerErrorInfo& aErrorInfo) {
     49  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     50 
     51  for (const auto& listener : mListeners.Clone()) {
     52    listener->OnError(aErrorInfo.fileName(), aErrorInfo.lineNo(),
     53                      aErrorInfo.message());
     54  }
     55  return IPC_OK();
     56 }
     57 
     58 mozilla::ipc::IPCResult RemoteWorkerDebuggerParent::RecvPostMessageToDebugger(
     59    const nsString& aMessage) {
     60  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     61  for (const auto& listener : mListeners.Clone()) {
     62    listener->OnMessage(aMessage);
     63  }
     64  return IPC_OK();
     65 }
     66 
     67 mozilla::ipc::IPCResult RemoteWorkerDebuggerParent::RecvSetAsInitialized() {
     68  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     69  mIsInitialized = true;
     70  return IPC_OK();
     71 }
     72 
     73 mozilla::ipc::IPCResult RemoteWorkerDebuggerParent::RecvSetAsClosed() {
     74  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     75  mIsClosed = true;
     76  return IPC_OK();
     77 }
     78 
     79 mozilla::ipc::IPCResult RemoteWorkerDebuggerParent::RecvAddWindowID(
     80    const uint64_t& aWindowID) {
     81  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     82  mWindowIDs.AppendElement(aWindowID);
     83  return IPC_OK();
     84 }
     85 
     86 mozilla::ipc::IPCResult RemoteWorkerDebuggerParent::RecvRemoveWindowID(
     87    const uint64_t& aWindowID) {
     88  MOZ_ASSERT_DEBUG_OR_FUZZING(XRE_IsParentProcess() && NS_IsMainThread());
     89  mWindowIDs.RemoveElement(aWindowID);
     90  return IPC_OK();
     91 }
     92 
     93 // nsIWorkerDebugger interface
     94 NS_IMPL_ISUPPORTS(RemoteWorkerDebuggerParent, nsIWorkerDebugger)
     95 
     96 NS_IMETHODIMP
     97 RemoteWorkerDebuggerParent::GetIsClosed(bool* aResult) {
     98  AssertIsOnMainThread();
     99  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    100 
    101  *aResult = mIsClosed;
    102  return NS_OK;
    103 }
    104 
    105 NS_IMETHODIMP
    106 RemoteWorkerDebuggerParent::GetIsChrome(bool* aResult) {
    107  AssertIsOnMainThread();
    108  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    109 
    110  *aResult = mWorkerDebuggerInfo.isChrome();
    111  return NS_OK;
    112 }
    113 
    114 NS_IMETHODIMP
    115 RemoteWorkerDebuggerParent::GetIsRemote(bool* aResult) {
    116  AssertIsOnMainThread();
    117  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    118 
    119  *aResult = true;
    120  return NS_OK;
    121 }
    122 
    123 NS_IMETHODIMP
    124 RemoteWorkerDebuggerParent::GetIsInitialized(bool* aResult) {
    125  AssertIsOnMainThread();
    126  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    127 
    128  *aResult = mIsInitialized;
    129  return NS_OK;
    130 }
    131 
    132 NS_IMETHODIMP
    133 RemoteWorkerDebuggerParent::GetParent(nsIWorkerDebugger** aResult) {
    134  AssertIsOnMainThread();
    135  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    136 
    137  nsCOMPtr<nsIWorkerDebugger> parent;
    138  if (!mWorkerDebuggerInfo.parentId().IsEmpty()) {
    139    RefPtr<WorkerDebuggerManager> manager = WorkerDebuggerManager::Get();
    140    MOZ_ASSERT_DEBUG_OR_FUZZING(manager);
    141 
    142    parent = manager->GetDebuggerById(mWorkerDebuggerInfo.parentId());
    143  }
    144  parent.forget(aResult);
    145  return NS_OK;
    146 }
    147 
    148 NS_IMETHODIMP
    149 RemoteWorkerDebuggerParent::GetType(uint32_t* aResult) {
    150  AssertIsOnMainThread();
    151  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    152 
    153  *aResult = mWorkerDebuggerInfo.type();
    154  return NS_OK;
    155 }
    156 
    157 NS_IMETHODIMP
    158 RemoteWorkerDebuggerParent::GetUrl(nsAString& aResult) {
    159  AssertIsOnMainThread();
    160 
    161  aResult = mWorkerDebuggerInfo.url();
    162  return NS_OK;
    163 }
    164 
    165 NS_IMETHODIMP
    166 RemoteWorkerDebuggerParent::GetWindow(mozIDOMWindow** aResult) {
    167  AssertIsOnMainThread();
    168  return NS_ERROR_NOT_IMPLEMENTED;
    169 }
    170 
    171 NS_IMETHODIMP
    172 RemoteWorkerDebuggerParent::GetWindowIDs(nsTArray<uint64_t>& aResult) {
    173  AssertIsOnMainThread();
    174 
    175  aResult = mWindowIDs.Clone();
    176  return NS_OK;
    177 }
    178 
    179 NS_IMETHODIMP
    180 RemoteWorkerDebuggerParent::GetPrincipal(nsIPrincipal** aResult) {
    181  AssertIsOnMainThread();
    182  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    183 
    184  nsCOMPtr<nsIPrincipal> principal = mWorkerDebuggerInfo.principal();
    185  principal.forget(aResult);
    186 
    187  return NS_OK;
    188 }
    189 
    190 NS_IMETHODIMP
    191 RemoteWorkerDebuggerParent::GetServiceWorkerID(uint32_t* aResult) {
    192  AssertIsOnMainThread();
    193  MOZ_ASSERT_DEBUG_OR_FUZZING(aResult);
    194 
    195  *aResult = mWorkerDebuggerInfo.serviceWorkerID();
    196  return NS_OK;
    197 }
    198 
    199 NS_IMETHODIMP
    200 RemoteWorkerDebuggerParent::GetId(nsAString& aResult) {
    201  AssertIsOnMainThread();
    202 
    203  aResult = mWorkerDebuggerInfo.Id();
    204  return NS_OK;
    205 }
    206 
    207 NS_IMETHODIMP
    208 RemoteWorkerDebuggerParent::GetName(nsAString& aResult) {
    209  AssertIsOnMainThread();
    210 
    211  aResult = mWorkerDebuggerInfo.name();
    212  return NS_OK;
    213 }
    214 
    215 NS_IMETHODIMP
    216 RemoteWorkerDebuggerParent::Initialize(const nsAString& aURL) {
    217  AssertIsOnMainThread();
    218  if (CanSend()) {
    219    nsAutoString url(aURL);
    220    (void)SendInitialize(url);
    221  }
    222  return NS_OK;
    223 }
    224 
    225 NS_IMETHODIMP
    226 RemoteWorkerDebuggerParent::PostMessageMoz(const nsAString& aMessage) {
    227  AssertIsOnMainThread();
    228  if (CanSend()) {
    229    nsAutoString message(aMessage);
    230    (void)SendPostMessage(message);
    231  }
    232  return NS_OK;
    233 }
    234 
    235 NS_IMETHODIMP
    236 RemoteWorkerDebuggerParent::AddListener(nsIWorkerDebuggerListener* aListener) {
    237  AssertIsOnMainThread();
    238 
    239  if (mListeners.Contains(aListener)) {
    240    return NS_ERROR_INVALID_ARG;
    241  }
    242  mListeners.AppendElement(aListener);
    243  return NS_OK;
    244 }
    245 
    246 NS_IMETHODIMP
    247 RemoteWorkerDebuggerParent::RemoveListener(
    248    nsIWorkerDebuggerListener* aListener) {
    249  AssertIsOnMainThread();
    250 
    251  if (!mListeners.Contains(aListener)) {
    252    return NS_ERROR_INVALID_ARG;
    253  }
    254  mListeners.RemoveElement(aListener);
    255  return NS_OK;
    256 }
    257 
    258 NS_IMETHODIMP
    259 RemoteWorkerDebuggerParent::SetDebuggerReady(bool aReady) {
    260  AssertIsOnMainThread();
    261  if (CanSend()) {
    262    (void)SendSetDebuggerReady(aReady);
    263  }
    264  return NS_OK;
    265 }
    266 
    267 }  // namespace mozilla::dom