tor-browser

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

FileSystemMocks.cpp (3370B)


      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 file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "FileSystemMocks.h"
      8 
      9 #include "ErrorList.h"
     10 #include "gtest/gtest-assertion-result.h"
     11 #include "js/RootingAPI.h"
     12 #include "jsapi.h"
     13 #include "mozilla/dom/FileSystemManager.h"
     14 #include "nsContentUtils.h"
     15 #include "nsISupports.h"
     16 
     17 namespace mozilla::dom::fs::test {
     18 
     19 nsIGlobalObject* GetGlobal() {
     20  AutoJSAPI jsapi;
     21  DebugOnly<bool> ok = jsapi.Init(xpc::PrivilegedJunkScope());
     22  MOZ_ASSERT(ok);
     23 
     24  JSContext* cx = jsapi.cx();
     25  mozilla::dom::GlobalObject globalObject(cx, JS::CurrentGlobalOrNull(cx));
     26  nsCOMPtr<nsIGlobalObject> global =
     27      do_QueryInterface(globalObject.GetAsSupports());
     28  MOZ_ASSERT(global);
     29 
     30  return global.get();
     31 }
     32 
     33 MockGlobalObject* GetMockGlobal() {
     34  nsCOMPtr<nsIGlobalObject> global = GetGlobal();
     35  MockGlobalObject* mock = new MockGlobalObject(std::move(global));
     36 
     37  return mock;
     38 }
     39 
     40 nsresult GetAsString(const RefPtr<Promise>& aPromise, nsAString& aString) {
     41  AutoJSAPI jsapi;
     42  DebugOnly<bool> ok = jsapi.Init(xpc::PrivilegedJunkScope());
     43  MOZ_ASSERT(ok);
     44 
     45  JSContext* cx = jsapi.cx();
     46 
     47  JS::Rooted<JSObject*> promiseObj(cx, aPromise->PromiseObj());
     48  JS::Rooted<JS::Value> vp(cx, JS::GetPromiseResult(promiseObj));
     49 
     50  switch (aPromise->State()) {
     51    case Promise::PromiseState::Pending: {
     52      return NS_ERROR_DOM_INVALID_STATE_ERR;
     53    }
     54 
     55    case Promise::PromiseState::Resolved: {
     56      if (nsContentUtils::StringifyJSON(cx, vp, aString,
     57                                        UndefinedIsNullStringLiteral)) {
     58        return NS_OK;
     59      }
     60 
     61      return NS_ERROR_UNEXPECTED;
     62    }
     63 
     64    case Promise::PromiseState::Rejected: {
     65      if (vp.isInt32()) {
     66        int32_t errorCode = vp.toInt32();
     67        aString.AppendInt(errorCode);
     68 
     69        return NS_OK;
     70      }
     71 
     72      if (!vp.isObject()) {
     73        return NS_ERROR_UNEXPECTED;
     74      }
     75 
     76      RefPtr<Exception> exception;
     77      UNWRAP_OBJECT(Exception, &vp, exception);
     78      if (!exception) {
     79        return NS_ERROR_UNEXPECTED;
     80      }
     81 
     82      aString.Append(NS_ConvertUTF8toUTF16(
     83          GetStaticErrorName(static_cast<nsresult>(exception->Result()))));
     84 
     85      return NS_OK;
     86    }
     87 
     88    default:
     89      break;
     90  }
     91 
     92  return NS_ERROR_FAILURE;
     93 }
     94 
     95 mozilla::ipc::PrincipalInfo GetPrincipalInfo() {
     96  return mozilla::ipc::PrincipalInfo{mozilla::ipc::SystemPrincipalInfo{}};
     97 }
     98 
     99 }  // namespace mozilla::dom::fs::test
    100 
    101 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MockGlobalObject)
    102 
    103 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(MockGlobalObject)
    104  NS_IMPL_CYCLE_COLLECTION_UNLINK(mGlobal)
    105  NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
    106 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
    107 
    108 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(MockGlobalObject)
    109  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGlobal)
    110 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
    111 
    112 NS_INTERFACE_TABLE_HEAD(MockGlobalObject)
    113  NS_WRAPPERCACHE_INTERFACE_TABLE_ENTRY
    114  NS_INTERFACE_TABLE(MockGlobalObject, nsIGlobalObject)
    115  NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(MockGlobalObject)
    116 NS_INTERFACE_MAP_END
    117 
    118 NS_IMPL_CYCLE_COLLECTING_ADDREF(MockGlobalObject)
    119 NS_IMPL_CYCLE_COLLECTING_RELEASE(MockGlobalObject)