summaryrefslogtreecommitdiffstats
path: root/dom/plugins/ipc/PPluginModule.ipdl
blob: 6d83f3a3bdf760b0fa148e5d21aafb151eb5b98a (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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
/* 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 PPluginInstance;
include protocol PPluginScriptableObject;
include protocol PContent;
include ProfilerTypes;

using NPError from "npapi.h";
using NPNVariable from "npapi.h";
using mozilla::dom::NativeThreadId from "mozilla/dom/TabMessageUtils.h";
using class mac_plugin_interposing::NSCursorInfo from "mozilla/plugins/PluginMessageUtils.h";
using struct nsID from "nsID.h";
using struct mozilla::plugins::NPAudioDeviceChangeDetailsIPC from "mozilla/plugins/PluginMessageUtils.h";

namespace mozilla {
namespace plugins {

struct PluginSettings
{
  // These settings correspond to NPNVariable. They are fetched from
  // mozilla::plugins::parent::_getvalue.
  bool javascriptEnabled;
  bool asdEnabled;
  bool isOffline;
  bool supportsXembed;
  bool supportsWindowless;

  // These settings come from elsewhere.
  nsCString userAgent;
  bool nativeCursorsSupported;
};

intr protocol PPluginModule
{
  bridges PContent, PPluginModule;

  manages PPluginInstance;

both:
  // Window-specific message which instructs the interrupt mechanism to enter
  // a nested event loop for the current interrupt call.
  async ProcessNativeEventsInInterruptCall();

child:
  async DisableFlashProtectedMode();

  // Sync query to check if a Flash library indicates it
  // supports async rendering mode.
  intr ModuleSupportsAsyncRender()
    returns (bool result);

  // Forces the child process to update its plugin function table.
  intr NP_GetEntryPoints()
    returns (NPError rv);

  intr NP_Initialize(PluginSettings settings)
    returns (NPError rv);

  async AsyncNP_Initialize(PluginSettings settings);

  async PPluginInstance(nsCString aMimeType,
                        uint16_t aMode,
                        nsCString[] aNames,
                        nsCString[] aValues);

  // Implements the synchronous version of NPP_New for when async plugin init
  // is preffed off.
  intr SyncNPP_New(PPluginInstance aActor)
    returns (NPError rv);

  // Implements the async plugin init version of NPP_New.
  async AsyncNPP_New(PPluginInstance aActor);

  intr NP_Shutdown()
    returns (NPError rv);

  intr OptionalFunctionsSupported()
    returns (bool aURLRedirectNotify, bool aClearSiteData,
             bool aGetSitesWithData);

  async NPP_ClearSiteData(nsCString site, uint64_t flags, uint64_t maxAge, uint64_t aCallbackId);

  async NPP_GetSitesWithData(uint64_t aCallbackId);

  // Windows specific message to set up an audio session in the plugin process
  async SetAudioSessionData(nsID aID,
                            nsString aDisplayName,
                            nsString aIconPath);

  async SetParentHangTimeout(uint32_t seconds);

  /**
   * Control the Gecko Profiler in the plugin process.
   */
  async StartProfiler(ProfilerInitParams params);
  async StopProfiler();

  async GatherProfile();

  async SettingChanged(PluginSettings settings);

  async NPP_SetValue_NPNVaudioDeviceChangeDetails(NPAudioDeviceChangeDetailsIPC changeDetails);

parent:
  async NP_InitializeResult(NPError aError);

  /**
   * This message is only used on X11 platforms.
   *
   * Send a dup of the plugin process's X socket to the parent
   * process.  In theory, this scheme keeps the plugin's X resources
   * around until after both the plugin process shuts down *and* the
   * parent process closes the dup fd.  This is used to prevent the
   * parent process from crashing on X errors if, e.g., the plugin
   * crashes *just before* a repaint and the parent process tries to
   * use the newly-invalid surface.
   */
  async BackUpXResources(FileDescriptor aXSocketFd);

  // Wake up and process a few native events.  Periodically called by
  // Gtk-specific code upon detecting that the plugin process has
  // entered a nested event loop.  If the browser doesn't process
  // native events, then "livelock" and some other glitches can occur.
  intr ProcessSomeEvents();

  // OS X Specific calls to manage the plugin's window
  // when interposing system calls.
  async PluginShowWindow(uint32_t aWindowId, bool aModal,
                         int32_t aX, int32_t aY,
                         size_t aWidth, size_t aHeight);
  async PluginHideWindow(uint32_t aWindowId);

  // OS X Specific calls to allow the plugin to manage the cursor.
  async SetCursor(NSCursorInfo cursorInfo);
  async ShowCursor(bool show);
  async PushCursor(NSCursorInfo cursorInfo);
  async PopCursor();

  sync NPN_SetException(nsCString message);

  async NPN_ReloadPlugins(bool aReloadPages);

  // Notifies the chrome process that a PluginModuleChild linked to a content
  // process was destroyed. The chrome process may choose to asynchronously shut
  // down the plugin process in response.
  async NotifyContentModuleDestroyed();

  async Profile(nsCString aProfile);

  // Answers to request about site data
  async ReturnClearSiteData(NPError aRv, uint64_t aCallbackId);

  async ReturnSitesWithData(nsCString[] aSites, uint64_t aCallbackId);

  intr GetKeyState(int32_t aVirtKey)
    returns (int16_t aState);

  intr NPN_SetValue_NPPVpluginRequiresAudioDeviceChanges(bool shouldRegister)
    returns (NPError result);
};

} // namespace plugins
} // namespace mozilla