2016-05-28 00:54:31 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
2013-11-27 11:59:41 +04:00
|
|
|
/* 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_backgroundchild_h__
|
|
|
|
#define mozilla_ipc_backgroundchild_h__
|
|
|
|
|
|
|
|
#include "mozilla/Attributes.h"
|
|
|
|
|
2018-11-29 23:47:14 +03:00
|
|
|
class nsIEventTarget;
|
|
|
|
|
2013-11-27 11:59:41 +04:00
|
|
|
namespace mozilla {
|
|
|
|
namespace dom {
|
|
|
|
|
2015-06-17 13:44:27 +03:00
|
|
|
class BlobImpl;
|
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 23:09:14 +03:00
|
|
|
class ContentChild;
|
2013-11-27 11:59:41 +04:00
|
|
|
class ContentParent;
|
2021-09-28 22:13:15 +03:00
|
|
|
class ContentProcess;
|
2013-11-27 11:59:41 +04:00
|
|
|
|
|
|
|
} // namespace dom
|
|
|
|
|
2019-01-11 23:56:39 +03:00
|
|
|
namespace net {
|
|
|
|
|
2020-03-03 19:14:19 +03:00
|
|
|
class SocketProcessChild;
|
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 23:09:14 +03:00
|
|
|
class SocketProcessBridgeChild;
|
2019-01-11 23:56:39 +03:00
|
|
|
|
|
|
|
} // namespace net
|
|
|
|
|
2013-11-27 11:59:41 +04:00
|
|
|
namespace ipc {
|
|
|
|
|
|
|
|
class PBackgroundChild;
|
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 23:09:14 +03:00
|
|
|
class PBackgroundStarterChild;
|
2013-11-27 11:59:41 +04:00
|
|
|
|
|
|
|
// This class allows access to the PBackground protocol. PBackground allows
|
|
|
|
// communication between any thread (in the parent or a child process) and a
|
|
|
|
// single background thread in the parent process. Each PBackgroundChild
|
|
|
|
// instance is tied to the thread on which it is created and must not be shared
|
|
|
|
// across threads. Each PBackgroundChild is unique and valid as long as its
|
|
|
|
// designated thread lives.
|
|
|
|
//
|
2017-08-03 12:22:11 +03:00
|
|
|
// Creation of PBackground is synchronous. GetOrCreateForCurrentThread will
|
|
|
|
// create the actor if it doesn't exist yet. Thereafter (assuming success)
|
|
|
|
// GetForCurrentThread() will return the same actor every time.
|
2013-11-27 11:59:41 +04:00
|
|
|
//
|
2019-01-11 23:56:39 +03:00
|
|
|
// GetOrCreateSocketActorForCurrentThread, which is like
|
|
|
|
// GetOrCreateForCurrentThread, is used to get or create PBackground actor
|
|
|
|
// between child process and socket process.
|
|
|
|
//
|
2014-07-10 01:39:18 +04:00
|
|
|
// CloseForCurrentThread() will close the current PBackground actor. Subsequent
|
|
|
|
// calls to GetForCurrentThread will return null. CloseForCurrentThread() may
|
|
|
|
// only be called exactly once for each thread-specific actor. Currently it is
|
|
|
|
// illegal to call this before the PBackground actor has been created.
|
|
|
|
//
|
2013-11-27 11:59:41 +04:00
|
|
|
// The PBackgroundChild actor and all its sub-protocol actors will be
|
|
|
|
// automatically destroyed when its designated thread completes.
|
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 23:09:14 +03:00
|
|
|
//
|
|
|
|
// Init{Content,Socket,SocketBridge}Starter must be called on the main thread
|
|
|
|
// with an actor bridging to the relevant target process type before these
|
|
|
|
// methods can be used.
|
2015-03-21 19:28:04 +03:00
|
|
|
class BackgroundChild final {
|
2013-11-27 11:59:41 +04:00
|
|
|
friend class mozilla::dom::ContentParent;
|
2021-09-28 22:13:15 +03:00
|
|
|
friend class mozilla::dom::ContentProcess;
|
2020-03-03 19:14:19 +03:00
|
|
|
friend class mozilla::net::SocketProcessChild;
|
2013-11-27 11:59:41 +04:00
|
|
|
|
|
|
|
public:
|
|
|
|
// See above.
|
|
|
|
static PBackgroundChild* GetForCurrentThread();
|
|
|
|
|
2016-06-30 23:54:06 +03:00
|
|
|
// See above.
|
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 23:09:14 +03:00
|
|
|
static PBackgroundChild* GetOrCreateForCurrentThread();
|
|
|
|
|
|
|
|
// See above.
|
|
|
|
static PBackgroundChild* GetOrCreateSocketActorForCurrentThread();
|
|
|
|
|
|
|
|
// See above.
|
|
|
|
static PBackgroundChild* GetOrCreateForSocketParentBridgeForCurrentThread();
|
2016-06-30 23:54:06 +03:00
|
|
|
|
2014-07-10 01:39:18 +04:00
|
|
|
// See above.
|
|
|
|
static void CloseForCurrentThread();
|
|
|
|
|
2019-01-11 23:56:39 +03:00
|
|
|
// See above.
|
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 23:09:14 +03:00
|
|
|
static void InitContentStarter(mozilla::dom::ContentChild* aContent);
|
|
|
|
|
|
|
|
// See above.
|
|
|
|
static void InitSocketStarter(mozilla::net::SocketProcessChild* aSocket);
|
2019-01-11 23:56:39 +03:00
|
|
|
|
2020-03-03 19:14:19 +03:00
|
|
|
// See above.
|
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 23:09:14 +03:00
|
|
|
static void InitSocketBridgeStarter(
|
|
|
|
mozilla::net::SocketProcessBridgeChild* aSocketBridge);
|
2020-03-03 19:14:19 +03:00
|
|
|
|
2013-11-27 11:59:41 +04:00
|
|
|
private:
|
2021-09-28 22:13:15 +03:00
|
|
|
// Only called by this class's friends.
|
2013-11-27 11:59:41 +04:00
|
|
|
static void Startup();
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace ipc
|
|
|
|
} // namespace mozilla
|
|
|
|
|
|
|
|
#endif // mozilla_ipc_backgroundchild_h__
|