summaryrefslogtreecommitdiffstats
path: root/dom/ipc/PBrowserBridge.ipdl
blob: 674a576d7b59ca96af0b99273323aeebc0d49080 (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8 -*- */
/* vim: set sw=4 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 http://mozilla.org/MPL/2.0/. */

include protocol PBrowser;
#ifdef ACCESSIBILITY
include protocol PDocAccessible;
#endif

include DOMTypes;
include PPrintingTypes;

include "mozilla/LayoutMessageUtils.h";
include "mozilla/dom/BindingIPCUtils.h";
include "mozilla/dom/DocShellMessageUtils.h";
include "mozilla/dom/TabMessageUtils.h";

using mozilla::layers::LayersObserverEpoch from "mozilla/layers/LayersTypes.h";
using class mozilla::WidgetMouseEvent from "ipc/nsGUIEventIPC.h";
using mozilla::dom::EffectsInfo from "mozilla/dom/EffectsInfo.h";
using mozilla::ScrollAxis from "mozilla/PresShellForwards.h";
using mozilla::ScrollFlags from "mozilla/PresShellForwards.h";
using struct nsRect from "nsRect.h";
using mozilla::dom::CallerType from "mozilla/dom/BindingDeclarations.h";
using nsIntRect from "nsRect.h";
using mozilla::dom::EmbedderElementEventType from "mozilla/dom/TabMessageTypes.h";
[RefCounted] using class nsDocShellLoadState from "nsDocShellLoadState.h";
using mozilla::IntrinsicSize from "nsIFrame.h";
using mozilla::AspectRatio from "mozilla/AspectRatio.h";
using mozilla::StyleImageRendering from "mozilla/ServoStyleConsts.h";

namespace mozilla {
namespace dom {

/**
 * A PBrowserBridge connects an iframe/browser in a content process to the
 * PBrowser that manages the embedded content.
 *
 * See `dom/docs/Fission-IPC-Diagram.svg` for an overview of the DOM IPC
 * actors.
 */
async protocol PBrowserBridge {
  manager PBrowser;

child:
  /**
   * Request that the IPC child / Web parent process move focus to the
   * browser's frame. If canRaise is true, the window can be raised if
   * it is inactive.
   */
  async RequestFocus(bool canRaise, CallerType aCallerType);

  /**
   * When IPC parent / Web child sends this message, the IPC child / Web parent
   * should move focus to the next or previous focusable element or document.
   */
  async MoveFocus(bool forward, bool forDocumentNavigation);

  /**
   * Called once this PBrowserBridge's OOP subdoc no longer blocks its
   * embedding element's and embedding doc's 'load' events.
   */
  async MaybeFireEmbedderLoadEvents(EmbedderElementEventType aFireEventAtEmbeddingElement);

  async ScrollRectIntoView(nsRect aRect, ScrollAxis aVertical,
                           ScrollAxis aHorizontal, ScrollFlags aScrollFlags,
                           int32_t aAppUnitsPerDevPixel);

  async SubFrameCrashed();

  async IntrinsicSizeOrRatioChanged(IntrinsicSize? aIntrinsicSize,
                                    AspectRatio? aIntrinsicRatio);

  async ImageLoadComplete(nsresult aResult);

both:

  // Destroy the remote web browser due to the nsFrameLoader going away.
  // Before initialization we sync-delete it from the child. After
  // initialization we sync-delete it from the parent after BeginDestroy().
  async __delete__();

parent:

  async BeginDestroy();

  // DocShell messaging.
  async LoadURL(nsDocShellLoadState aLoadState);
  async ResumeLoad(uint64_t aPendingSwitchID);

  // Out of process rendering.
  async Show(OwnerShowInfo info);
  async ScrollbarPreferenceChanged(ScrollbarPreference pref);
  [Compress=all] async UpdateDimensions(nsIntRect rect, ScreenIntSize size);
  async RenderLayers(bool aEnabled, LayersObserverEpoch aEpoch);

  async UpdateEffects(EffectsInfo aEffects);
  async UpdateRemotePrintSettings(PrintData aPrintData);

  /**
   * Navigate by key (Tab/Shift+Tab/F6/Shift+f6).
   */
  async NavigateByKey(bool aForward, bool aForDocumentNavigation);

  /**
   * Dispatch the given synthesized mousemove event to the child.
   */
  async DispatchSynthesizedMouseEvent(WidgetMouseEvent event);

  /**
   * Sending an activate message moves focus to the iframe.
   */
  async Activate(uint64_t aActionId);

  async Deactivate(bool aWindowLowering, uint64_t aActionId);

  async UpdateRemoteStyle(StyleImageRendering aImageRendering);

  async WillChangeProcess();

#ifdef ACCESSIBILITY
  /**
   * Tell the parent the accessible for this iframe's embedder
   * OuterDocAccessible.
   * aDoc is the actor for the containing document.
   * aID is the unique id of the embedder accessible within that document.
   */
  async SetEmbedderAccessible(nullable PDocAccessible aDoc, uint64_t aID);
#endif
};

}  // namespace dom
}  // namespace mozilla