gecko-dev/ipc/glue/BackgroundStarterChild.h
Nika Layzell 2e25ca863b Bug 1749744 - Handle re-creating PBackgroundStarter, r=handyman,kershaw
This is possible if the socket process bridge ends up being restarted,
so needs to be handled as an edge-case. The approach taken here is to
tightly couple the task queue, pid, and BackgroundStarterChild instances
so that they can be swapped out at runtime whenever InitStarter is
called.

There is no test in the current patch as it is apparently still
unsupported to restart the socket process after a crash.

Differential Revision: https://phabricator.services.mozilla.com/D135746
2022-01-13 23:58:46 +00:00

36 lines
1.2 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_ipc_BackgroundStarterChild_h
#define mozilla_ipc_BackgroundStarterChild_h
#include "mozilla/ipc/PBackgroundStarterChild.h"
#include "mozilla/dom/ContentChild.h"
namespace mozilla::ipc {
class BackgroundStarterChild final : public PBackgroundStarterChild {
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(BackgroundStarterChild, override)
BackgroundStarterChild(base::ProcessId aOtherPid,
nsISerialEventTarget* aTaskQueue)
: mOtherPid(aOtherPid), mTaskQueue(aTaskQueue) {}
// Unlike the methods on `IToplevelProtocol`, may be accessed on any thread
// and will not be modified after construction.
const base::ProcessId mOtherPid;
const nsCOMPtr<nsISerialEventTarget> mTaskQueue;
private:
friend class PBackgroundStarterChild;
~BackgroundStarterChild() = default;
};
} // namespace mozilla::ipc
#endif // mozilla_ipc_BackgroundStarterChild_h