/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=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/. */ include protocol PBrowser; include protocol PContent; include protocol PJavaScript; include protocol PFileDescriptorSet; include protocol PChildToParentStream; include protocol PParentToChildStream; include protocol PIPCBlobInputStream; include DOMTypes; include JavaScriptTypes; include ProtocolTypes; include PTabContext; using class IPC::Principal from "mozilla/dom/PermissionMessageUtils.h"; using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h"; using mozilla::dom::ContentParentId from "mozilla/dom/ipc/IdType.h"; using class mozilla::dom::MessagePort from "mozilla/dom/MessagePort.h"; using class mozilla::dom::ipc::StructuredCloneData from "mozilla/dom/ipc/StructuredCloneData.h"; namespace mozilla { namespace dom { /* * PContentBridge allows us to represent a parent/child relationship between two * child processes. When a child process wants to open its own child, it asks * the root process to create a new process and then bridge them. The first * child will allocate the PContentBridgeParent, and the newly opened child will * allocate the PContentBridgeChild. This protocol allows these processes to * share PBrowsers and send messages to each other. */ nested(upto inside_cpow) sync protocol PContentBridge { manages PBrowser; manages PFileDescriptorSet; manages PJavaScript; manages PChildToParentStream; manages PParentToChildStream; manages PIPCBlobInputStream; child: async PParentToChildStream(); child: /** * Sending an activate message moves focus to the child. */ async Activate(PBrowser aTab); async Deactivate(PBrowser aTab); async PIPCBlobInputStream(nsID aID, uint64_t aSize); parent: sync SyncMessage(nsString aMessage, ClonedMessageData aData, CpowEntry[] aCpows, Principal aPrincipal) returns (StructuredCloneData[] retval); async PJavaScript(); async PChildToParentStream(); both: // Both the parent and the child can construct the PBrowser. // See the comment in PContent::PBrowser(). async PBrowser(TabId tabId, TabId sameTabGroupAs, IPCTabContext context, uint32_t chromeFlags, ContentParentId cpId, bool isForBrowser); async PFileDescriptorSet(FileDescriptor fd); async AsyncMessage(nsString aMessage, CpowEntry[] aCpows, Principal aPrincipal, ClonedMessageData aData); }; } }