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)