gecko-dev/netwerk/ipc/SocketProcessBridgeParent.h
Nika Layzell f2916bb759 Bug 1737828 - Avoid the main thread when starting PBackground, r=asuth,ipc-reviewers,necko-reviewers,kershaw,handyman
This patch avoids requiring the main thread to create PBackground instances by
instead using a background starter TaskQueue, and sending messages from a
PBackgroundStarter actor hosted on that thread to the target background thread
directly. On the background thread, the relevant metadata is already registered
and present in the BackgroundStarterParent actor allowing the main thread in
both processes to be bypassed completely.

Various tasks remain bound to the main thread, such as PBackground cleanup and
async steps involved in PBackground creation.

This patch also unifies the in-process and cross-process PBackground codepaths,
allowing in-process PBackground creation to bypass the main thread as well, and
removing the need for a main thread event target from
GetOrCreateForCurrentThread().

Differential Revision: https://phabricator.services.mozilla.com/D129705
2022-01-10 20:09:14 +00:00

45 lines
1.4 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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_net_SocketProcessBridgeParent_h
#define mozilla_net_SocketProcessBridgeParent_h
#include "mozilla/net/PSocketProcessBridgeParent.h"
namespace mozilla {
namespace net {
// The IPC actor implements PSocketProcessBridgeParent in socket process.
// This is allocated and kept alive by SocketProcessChild. When |ActorDestroy|
// is called, |SocketProcessChild::DestroySocketProcessBridgeParent| will be
// called to destroy this actor.
class SocketProcessBridgeParent final : public PSocketProcessBridgeParent {
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(SocketProcessBridgeParent)
explicit SocketProcessBridgeParent(
ProcessId aId, Endpoint<PSocketProcessBridgeParent>&& aEndpoint);
mozilla::ipc::IPCResult RecvTest();
mozilla::ipc::IPCResult RecvInitBackground(
Endpoint<PBackgroundStarterParent>&& aEndpoint);
void ActorDestroy(ActorDestroyReason aWhy) override;
void DeferredDestroy();
bool Closed() const { return mClosed; }
private:
~SocketProcessBridgeParent();
ProcessId mId;
bool mClosed;
};
} // namespace net
} // namespace mozilla
#endif // mozilla_net_SocketProcessBridgeParent_h