RddProcessTest.cpp (2041B)
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 #if defined(ENABLE_TESTS) 8 # include "mozilla/RddProcessTest.h" 9 10 # include "mozilla/RDDChild.h" 11 # include "mozilla/RDDProcessManager.h" 12 # include "mozilla/dom/Promise.h" 13 14 namespace mozilla { 15 16 NS_IMETHODIMP 17 RddProcessTest::TestTelemetryProbes(JSContext* aCx, 18 mozilla::dom::Promise** aOutPromise) { 19 NS_ENSURE_ARG(aOutPromise); 20 *aOutPromise = nullptr; 21 nsIGlobalObject* global = xpc::CurrentNativeGlobal(aCx); 22 if (NS_WARN_IF(!global)) { 23 return NS_ERROR_FAILURE; 24 } 25 26 ErrorResult erv; 27 RefPtr<dom::Promise> promise = dom::Promise::Create(global, erv); 28 if (NS_WARN_IF(erv.Failed())) { 29 return erv.StealNSResult(); 30 } 31 32 RDDProcessManager* rddProc = RDDProcessManager::Get(); 33 MOZ_ASSERT(rddProc, "No RddProcessManager?"); 34 35 rddProc->LaunchRDDProcess()->Then( 36 GetMainThreadSerialEventTarget(), __func__, 37 [promise, rddProc]() { 38 RDDChild* child = rddProc->GetRDDChild(); 39 if (!rddProc) { 40 promise->MaybeReject(NS_ERROR_NOT_AVAILABLE); 41 } 42 MOZ_ASSERT(rddProc, "No RDD Proc?"); 43 44 if (!child) { 45 promise->MaybeReject(NS_ERROR_NOT_AVAILABLE); 46 } 47 MOZ_ASSERT(child, "No RDD Child?"); 48 49 (void)child->SendTestTelemetryProbes(); 50 promise->MaybeResolve((int32_t)rddProc->RDDProcessPid()); 51 }, 52 [promise](nsresult aError) { 53 MOZ_CRASH("RddProcessTest; failure to get RDD child"); 54 }); 55 56 promise.forget(aOutPromise); 57 return NS_OK; 58 } 59 60 NS_IMETHODIMP 61 RddProcessTest::StopProcess() { 62 RDDProcessManager::RDDProcessShutdown(); 63 return NS_OK; 64 } 65 66 NS_IMPL_ISUPPORTS(RddProcessTest, nsIRddProcessTest) 67 68 } // namespace mozilla 69 #endif // defined(ENABLE_TESTS)