// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module content.mojom;
import "content/public/common/webplugininfo.mojom";
import "mojo/public/mojom/base/file_path.mojom";
import "mojo/public/mojom/base/process_id.mojom";
import "url/mojom/origin.mojom";
import "url/mojom/url.mojom";
// Generic Pepper messages. Implemented by the browser.
interface PepperHost {
// Notification that a Pepper plugin instance is created in the DOM.
InstanceCreated(int32 instance_id,
pending_associated_remote<PepperPluginInstance> instance,
pending_associated_receiver<PepperPluginInstanceHost> host);
// Bind a PepperHungDetectorHost. The interface will be used to inform the
// browser that a renderer's plugin module has been blocked for too long.
BindHungDetectorHost(pending_receiver<PepperHungDetectorHost> host,
int32 plugin_child_id,
mojo_base.mojom.FilePath plugin_path);
// Return information about a plugin for the given URL and MIME
// type. If there is no matching plugin, |found| is false.
// |actual_mime_type| is the actual mime type supported by the
// found plugin.
[Sync]
GetPluginInfo(url.mojom.Url url,
string mime_type) =>
(bool found,
content.mojom.WebPluginInfo plugin_info,
string actual_mime_type);
// Notification an in-process instance has been created.
DidCreateInProcessInstance(int32 instance_id,
int32 frame_routing_id,
url.mojom.Url document_url,
url.mojom.Url plugin_url);
// Notification that an in-process instance has been destroyed.
DidDeleteInProcessInstance(int32 instance_id);
// Notification that a plugin has created a new plugin instance. The
// parameters indicate:
// - The plugin process ID that we're creating the instance for.
// - The instance ID of the instance being created.
// - A PepperRendererInstanceData struct which contains properties from the
// renderer which are associated with the plugin instance. This includes
// the routing ID of the associated RenderFrame and the URL of plugin.
// - Whether the plugin we're creating an instance for is external or
// internal.
//
// This message must be sync even though it returns no parameters to avoid
// a race condition with the plugin process. The plugin process sends messages
// to the browser that assume the browser knows about the instance. We need to
// make sure that the browser actually knows about the instance before we tell
// the plugin to run.
[Sync]
DidCreateOutOfProcessPepperInstance(int32 plugin_child_id,
int32 pp_instance,
bool is_external,
int32 frame_routing_id,
url.mojom.Url document_url,
url.mojom.Url plugin_url,
bool is_privileged_context) => ();
// Notification that a plugin has destroyed an instance.
DidDeleteOutOfProcessPepperInstance(int32 plugin_child_id,
int32 pp_instance,
bool is_external);
// A renderer sends this to the browser process when it wants to create a
// ppapi plugin. The browser will create the plugin process if necessary,
// and will return a handle to the channel on success.
//
// The plugin_child_id is the ChildProcessHost ID assigned in the browser
// process. This ID is valid only in the context of the browser process and is
// used to identify the proper process when the renderer notifies it that the
// plugin is hung.
//
// |embedder_origin| provides the origin of the frame that embeds the plugin
// (i.e. the origin of the document that contains the <embed> html tag).
// |embedder_origin| needs to be included in the message payload, because the
// message is received and handled on the IO thread in the browser process
// (where it is not possible to consult
// RenderFrameHostImpl::GetLastCommittedOrigin).
//
// On error null handles are returned.
[Sync]
OpenChannelToPepperPlugin(url.mojom.Origin embedder_origin,
mojo_base.mojom.FilePath path,
url.mojom.Origin? origin_lock) =>
(handle<message_pipe>? handle_to_channel,
mojo_base.mojom.ProcessId plugin_pid,
int32 plugin_child_id);
};
// This interface is used on the renderer IO thread and is received on the
// browser UI thread for determining an out of process pepper plugin container
// has not responded to the renderer for too long.
interface PepperHungDetectorHost {
// Sent to the browser when the renderer detects it is blocked on a pepper
// plugin message for too long. This is also sent when it becomes unhung
// (according to the value of is_hung). The browser can give the user the
// option of killing the plugin.
PluginHung(bool is_hung);
};
// Plugin instance specific host messages that are sent from the renderer
// main thread and dispatched on the UI thread of the browser. Implemented by
// the browser.
interface PepperPluginInstanceHost {
// Notification a plugin instance has started playback.
StartsPlayback();
// Notification a plugin instance has stopped playback.
StopsPlayback();
// Notification that a plugin instance has crashed.
// Note: |plugin_pid| should not be trusted. The corresponding process has
// probably died. Moreover, the ID may have been reused by a new process. Any
// usage other than displaying it in a prompt to the user is very likely to be
// wrong.
InstanceCrashed(mojo_base.mojom.FilePath plugin_path,
mojo_base.mojom.ProcessId plugin_pid);
};
// Plugin instance specific messages. Implemented by the renderer.
interface PepperPluginInstance {
// Set the volume of a plugin. |volume| should be in the [0, 1] range.
SetVolume(double volume);
};