author Brian Hackett <>
Wed, 17 Oct 2018 10:16:30 -0600
changeset 500506 7f2e0b3603b4edd4b540ba394943b65e5e44fb41
parent 499313 75ed7377db616cdeb922a9ebf28e17aa7f97b492
child 500880 510599513d983a420af569a20667d09c304da91a
permissions -rw-r--r--
Bug 1488808 Part 17 - Allow paints to happen at the normal time when recording/replaying, r=nical.

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set sw=2 ts=8 et tw=80 ft=cpp : */

/* 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 */

include protocol PContent;
include protocol PHttpChannel;
include protocol PCookieService;
include protocol PBrowser;
include protocol PWyciwygChannel;
include protocol PFTPChannel;
include protocol PWebSocket;
include protocol PWebSocketEventListener;
include protocol PTCPSocket;
include protocol PTCPServerSocket;
include protocol PUDPSocket;
include protocol PDNSRequest;
include protocol PChannelDiverter;
include protocol PFileDescriptorSet;
include protocol PDataChannel;
include protocol PSimpleChannel;
include protocol PTransportProvider;
include protocol PChildToParentStream; //FIXME: bug #792908
include protocol PParentToChildStream; //FIXME: bug #792908
include protocol PStunAddrsRequest;
include protocol PFileChannel;
include protocol PTrackingDummyChannel;

include IPCStream;
include URIParams;
include NeckoChannelParams;
include PBrowserOrId;
include protocol PAltDataOutputStream;

using class IPC::SerializedLoadContext from "SerializedLoadContext.h";
using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h";
using class IPC::Principal from "mozilla/dom/PermissionMessageUtils.h";
using refcounted class nsIInputStream from "mozilla/ipc/IPCStreamUtils.h";
using refcounted class nsIURI from "mozilla/ipc/URIUtils.h";

namespace mozilla {
namespace net {

nested(upto inside_cpow) sync protocol PNecko
  manager PContent;
  manages PHttpChannel;
  manages PCookieService;
  manages PWyciwygChannel;
  manages PFTPChannel;
  manages PWebSocket;
  manages PWebSocketEventListener;
  manages PTCPSocket;
  manages PTCPServerSocket;
  manages PUDPSocket;
  manages PDNSRequest;
  manages PDataChannel;
  manages PSimpleChannel;
  manages PFileChannel;
  manages PChannelDiverter;
  manages PTransportProvider;
  manages PAltDataOutputStream;
  manages PStunAddrsRequest;
  manages PTrackingDummyChannel;

  async __delete__();

  nested(inside_cpow) async PCookieService();
  async PHttpChannel(PBrowserOrId browser,
                     SerializedLoadContext loadContext,
                     HttpChannelCreationArgs args);
  async PWyciwygChannel();
  async PFTPChannel(PBrowserOrId browser, SerializedLoadContext loadContext,
                    FTPChannelCreationArgs args);

  async PWebSocket(PBrowserOrId browser, SerializedLoadContext loadContext,
                   uint32_t aSerialID);
  async PTCPServerSocket(uint16_t localPort, uint16_t backlog, bool useArrayBuffers);
  async PUDPSocket(Principal principal, nsCString filter);

  async PDNSRequest(nsCString hostName, OriginAttributes originAttributes,
                    uint32_t flags);

  async PWebSocketEventListener(uint64_t aInnerWindowID);

  /* Predictor Methods */
  async PredPredict(OptionalURIParams targetURI, OptionalURIParams sourceURI,
                    uint32_t reason, OriginAttributes originAttributes,
                    bool hasVerifier);
  async PredLearn(URIParams targetURI, OptionalURIParams sourceURI,
                  uint32_t reason, OriginAttributes originAttributes);
  async PredReset();

  async SpeculativeConnect(URIParams uri, Principal principal, bool anonymous);
  async HTMLDNSPrefetch(nsString hostname, bool isHttps,
                        OriginAttributes originAttributes, uint16_t flags);
  async CancelHTMLDNSPrefetch(nsString hostname, bool isHttps,
                              OriginAttributes originAttributes,
                              uint16_t flags, nsresult reason);

   * channelId is used to establish a connection between redirect channels in
   * the parent and the child when we're redirecting to a data: URI.
  async PDataChannel(uint32_t channelId);
  async PSimpleChannel(uint32_t channelId);
  async PFileChannel(uint32_t channelId);

  async PChannelDiverter(ChannelDiverterArgs channel);

  async PTrackingDummyChannel(nsIURI uri, OptionalLoadInfoArgs loadInfo);

   * These are called from the child with the results of the auth prompt.
   * callbackId is the id that was passed in PBrowser::AsyncAuthPrompt,
   * corresponding to an nsIAuthPromptCallback
  async OnAuthAvailable(uint64_t callbackId, nsString user,
                        nsString password, nsString domain);
  async OnAuthCancelled(uint64_t callbackId, bool userCancel);

  async RequestContextLoadBegin(uint64_t rcid);
  async RequestContextAfterDOMContentLoaded(uint64_t rcid);
  async RemoveRequestContext(uint64_t rcid);

  async PAltDataOutputStream(nsCString type, int64_t predictedSize, PHttpChannel channel);

  async PStunAddrsRequest();

   * WebExtension-specific remote resource loading
  async GetExtensionStream(URIParams uri) returns (nsIInputStream stream);
  async GetExtensionFD(URIParams uri) returns (FileDescriptor fd);

   * Bring up the http auth prompt for a nested remote mozbrowser.
   * NestedFrameId is the id corresponding to the PBrowser.  It is the same id
   * that was passed to the PBrowserOrId param in to the PHttpChannel constructor
  async AsyncAuthPromptForNestedFrame(TabId nestedFrameId, nsCString uri,
                                      nsString realm, uint64_t callbackId);

  /* Predictor Methods */
  async PredOnPredictPrefetch(URIParams uri, uint32_t httpStatus);
  async PredOnPredictPreconnect(URIParams uri);
  async PredOnPredictDNS(URIParams uri);

  async SpeculativeConnectRequest();

  // Using high priority to deliver this notification possibly sooner than we
  // enter poll() on the child process with infinite timeout.
  prio(high) async NetworkChangeNotification(nsCString type);

  async PTransportProvider();

  // This message is sent to PNecko and triggers the creation of a new
  // HttpChannelChild that will be connected to the parent channel represented
  // by registrarId.
  async CrossProcessRedirect(uint32_t aRegistrarId,
                             nsIURI aURI,
                             uint32_t aNewLoadFlags,
                             OptionalLoadInfoArgs aLoadInfo,
                             uint64_t aChannelId,
                             nsIURI aOriginalURI,
                             uint64_t aIdentifier);

  // Actually we need PTCPSocket() for parent. But ipdl disallows us having different
  // signatures on parent and child. So when constructing the parent side object, we just
  // leave host/port unused.
  async PTCPSocket(nsString host, uint16_t port);

} // namespace net
} // namespace mozilla