Files
tubestation/dom/system/windows/WindowsUtilsParent.h
David Parks 48c92a9ae7 Bug 1704500: Add WindowsUtils kind of utility process on Windows r=gerard-majax,ipc-reviewers,nika
Adds a new type of utility process that is set up to handle Windows OS objects.  We are adding this process type to run Windows geolocation APIs but more services are expected to be included in it.  The ILocation APIs have a race condition that would otherwise crash the main process.  The ILocation work is in a later patch in the series.

Depends on D155017

Differential Revision: https://phabricator.services.mozilla.com/D155018
2023-01-31 21:10:26 +00:00

53 lines
1.8 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_WindowsUtilsParent_h__
#define mozilla_dom_WindowsUtilsParent_h__
#include "mozilla/dom/PWindowsUtilsParent.h"
#include "mozilla/ProcInfo.h"
#include "mozilla/ipc/Endpoint.h"
#include "mozilla/ipc/UtilityProcessParent.h"
namespace mozilla::dom {
// Main-process manager for utilities in the WindowsUtils utility process.
class WindowsUtilsParent final : public PWindowsUtilsParent {
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(WindowsUtilsParent, override);
nsresult BindToUtilityProcess(
RefPtr<mozilla::ipc::UtilityProcessParent> aUtilityParent) {
Endpoint<PWindowsUtilsParent> parentEnd;
Endpoint<PWindowsUtilsChild> childEnd;
nsresult rv = PWindowsUtils::CreateEndpoints(base::GetCurrentProcId(),
aUtilityParent->OtherPid(),
&parentEnd, &childEnd);
if (NS_FAILED(rv)) {
MOZ_ASSERT(false, "Protocol endpoints failure");
return NS_ERROR_FAILURE;
}
if (!aUtilityParent->SendStartWindowsUtilsService(std::move(childEnd))) {
MOZ_ASSERT(false, "SendStartWindowsUtilsService failed");
return NS_ERROR_FAILURE;
}
DebugOnly<bool> ok = parentEnd.Bind(this);
MOZ_ASSERT(ok);
return NS_OK;
}
UtilityActorName GetActorName() { return UtilityActorName::WindowsUtils; }
protected:
~WindowsUtilsParent() = default;
};
} // namespace mozilla::dom
#endif // mozilla_dom_WindowsUtilsParent_h__