summaryrefslogtreecommitdiffstats
path: root/netwerk/base/nsIRedirectChannelRegistrar.idl
blob: 26dfdf3c6f1af00a7f74bbd0fb63b6ec82a29f27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/* 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/. */

#include "nsISupports.idl"

interface nsIChannel;
interface nsIParentChannel;

/**
 * Used on the chrome process as a service to join channel implementation
 * and parent IPC protocol side under a unique id.  Provides this way a generic
 * communication while redirecting to various protocols.
 *
 * See also nsIChildChannel and nsIParentChannel.
 */

[scriptable, uuid (efa36ea2-5b07-46fc-9534-a5acb8b77b72)]
interface nsIRedirectChannelRegistrar : nsISupports
{
  /**
   * Register the redirect target channel. The passed id needs to be a
   * unique ID for that channel (see `nsContentUtils::GenerateLoadIdentifier`).
   *
   * Primarily used in ParentChannelListener::AsyncOnChannelRedirect to get
   * a channel id sent to the HttpChannelChild being redirected.
   */
  void registerChannel(in nsIChannel channel, in uint64_t id);

  /**
   * First, search for the channel registered under the id.  If found return
   * it.  Then, register under the same id the parent side of IPC protocol
   * to let it be later grabbed back by the originator of the redirect and
   * notifications from the real channel could be forwarded to this parent
   * channel.
   *
   * Primarily used in parent side of an IPC protocol implementation
   * in reaction to nsIChildChannel.connectParent(id) called from the child
   * process.
   */
  nsIChannel linkChannels(in uint64_t id, in nsIParentChannel channel);

  /**
   * Returns back the channel previously registered under the ID with
   * registerChannel method.
   *
   * Primarilly used in chrome IPC side of protocols when attaching a redirect
   * target channel to an existing 'real' channel implementation.
   */
  nsIChannel getRegisteredChannel(in uint64_t id);

  /**
   * Returns the stream listener that shall be attached to the redirect target
   * channel, all notification from the redirect target channel will be
   * forwarded to this stream listener.
   *
   * Primarilly used in HttpChannelParent::OnRedirectResult callback to grab
   * the created parent side of the channel and forward notifications to it.
   */
  nsIParentChannel getParentChannel(in uint64_t id);

  /**
   * To not force all channel implementations to support weak reference
   * consumers of this service must ensure release of registered channels them
   * self.  This releases both the real and parent channel registered under
   * the id.
   *
   * Primarilly used in HttpChannelParent::OnRedirectResult callback.
   */
  void deregisterChannels(in uint64_t id);
};