blob: 48eab9283124188fabe7b681c60569827e79a5b2 [file] [log] [blame]
// Copyright 2016 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 "components/attribution_reporting/os_support.mojom";
import "content/common/agent_scheduling_group.mojom";
import "content/common/native_types.mojom";
import "ipc/ipc.mojom";
import "mojo/public/mojom/base/generic_pending_receiver.mojom";
import "mojo/public/mojom/base/time.mojom";
import "services/network/public/mojom/network_types.mojom";
import "skia/public/mojom/skcolor.mojom";
import "third_party/blink/public/mojom/browser_interface_broker.mojom";
import "third_party/blink/public/mojom/user_agent/user_agent_metadata.mojom";
import "ui/color/color_id.mojom";
struct UpdateScrollbarThemeParams {
// TODO(avi): Update these to optional values when optional numeric types are
// allowed. (https://crbug.com/657632)
bool has_initial_button_delay;
float initial_button_delay;
bool has_autoscroll_button_delay;
float autoscroll_button_delay;
bool jump_on_track_click;
ScrollerStyle preferred_scroller_style;
bool redraw;
bool scroll_view_rubber_banding;
};
struct UpdateSystemColorInfoParams {
bool is_dark_mode;
bool forced_colors;
// uint32 represents a SkColor in the map.
// TODO(crbug.com/1251637): These colors should be consolidated into the
// renderer's ColorProviders.
map<SystemThemeColor, uint32> colors;
// Maps used to reconstruct ColorProvider instances in the renderer.
map<color.mojom.RendererColorId, skia.mojom.SkColor> light_colors;
map<color.mojom.RendererColorId, skia.mojom.SkColor> dark_colors;
};
// The background state for the render process. When backgrounded the process's
// priority will be lower (via base::Process::SetProcessBackgrounded()) if
// allowed on the current platform (as determined by
// base::Process::CanBackgroundProcesses()).
enum RenderProcessBackgroundState {
// The renderer process has not been backgrounded, a hidden renderer may still
// be foregrounded, e.g. when it is playing audio.
kForegrounded,
// The renderer process has been backgrounded, a visible renderer may still
// be backgrounded, e.g. when it is hosting only low priority frames.
kBackgrounded,
};
// The visibility state for the renderer process, indicating whether or not any
// of the frames associated with the renderer process are visible.
enum RenderProcessVisibleState {
kVisible,
kHidden,
};
// The primordial Channel-associated interface implemented by a render process.
// This should be used for implementing browser-to-renderer control messages
// which need to retain FIFO with respect to legacy IPC messages.
interface Renderer {
// Tells the renderer to create a new AgentSchedulingGroup, and initialize its
// legacy IPC Channel using the pipe provided by `bootstrap`. The channel will
// later be used to bind the mojom::AgentSchedulingGroup receiver, that
// listens to messages sent by the host.
// This will create an "independent" agent scheduling group that is not
// associated with the process-wide or other groups' IPC channels, meaning
// there is no guaranteed ordering between them.
// `broker_remote` is the BrowserInterfaceBroker bound to the newly-created
// AgentSchedulingGroup.
CreateAgentSchedulingGroup(
pending_receiver<IPC.mojom.ChannelBootstrap> bootstrap,
pending_remote<blink.mojom.BrowserInterfaceBroker> broker_remote);
// Tells the renderer to create a new AgentSchedulingGroup, that will
// listen to messages sent by the host via the pending
// |agent_scheduling_group|.
// This will create an agent scheduling group that is associated with the
// process-wide IPC channel, preserving message ordering across different
// agent scheduling groups.
// `broker_remote` is the BrowserInterfaceBroker bound to the newly-created
// AgentSchedulingGroup.
CreateAssociatedAgentSchedulingGroup(
pending_associated_receiver<AgentSchedulingGroup> agent_scheduling_group,
pending_remote<blink.mojom.BrowserInterfaceBroker> broker_remote);
// Tells the renderer that the network type has changed so that
// navigator.onLine and navigator.connection can be updated.
OnNetworkConnectionChanged(NetworkConnectionType connection_type,
double max_bandwidth_mbps);
// Tells the renderer process that the network quality estimate has changed.
// EffectiveConnectionType is the connection type whose typical performance is
// most similar to the measured performance of the network in use.
// The downstream throughput is computed in kilobits per second. If an
// estimate of the HTTP or transport RTT is unavailable, it will be set to
// net::nqe::internal::InvalidRTT(). If the throughput estimate is
// unavailable, it will be set to net::nqe::internal::INVALID_RTT_THROUGHPUT.
OnNetworkQualityChanged(
network.mojom.EffectiveConnectionType effective_connection_type,
mojo_base.mojom.TimeDelta http_rtt,
mojo_base.mojom.TimeDelta transport_rtt,
double bandwidth_kbps);
// Tells the renderer to suspend/resume the webkit timers. Only for use on
// Android.
SetWebKitSharedTimersSuspended(bool suspend);
// Tells the renderer about a scrollbar appearance change. Only for use on
// OS X.
UpdateScrollbarTheme(UpdateScrollbarThemeParams params);
// Notification that the OS X Aqua color preferences changed.
OnSystemColorsChanged(int32 aqua_color_variant, string highlight_text_color,
string highlight_color);
// Tells the renderer process the new system color info.
UpdateSystemColorInfo(UpdateSystemColorInfoParams params);
// Tells the renderer to empty its plugin list cache, optional reloading
// pages containing plugins.
PurgePluginListCache(bool reload_pages);
// Tells the renderer process of a change in visibility or background state.
SetProcessState(RenderProcessBackgroundState background_state,
RenderProcessVisibleState visible_state);
// Tells the renderer process that it has been locked to a site (i.e., a
// scheme plus eTLD+1, such as https://google.com), or to a more specific
// origin.
SetIsLockedToSite();
// Write out the accumulated code profiling profile to the configured file.
// The callback is invoked once the profile has been flushed to disk.
[EnableIf=clang_profiling_inside_sandbox]
WriteClangProfilingProfile() => ();
// Set whether this renderer process is "cross-origin isolated". This
// corresponds to agent cluster's "cross-origin isolated" concept.
// TODO(yhirano): Have the spec URL.
// This property is process global because we ensure that a renderer process
// host only cross-origin isolated agents or only non-cross-origin isolated
// agents, not both.
// This is called at most once, prior to committing a navigation.
SetIsCrossOriginIsolated(bool value);
// Set whether this renderer process is allowed to use Isolated Context APIs.
// Similarly to the `SetIsCrossOriginIsolated()` method above, this flag is
// process global, and called at most once, prior to committing a navigation.
//
// TODO(crbug.com/1206150): We need a specification for this restriction.
SetIsIsolatedContext(bool value);
// Set the OS-level support for Attribution Reporting indicating whether
// OS-level attribution is enabled.
SetOsSupportForAttributionReporting(
attribution_reporting.mojom.OsSupport os_support);
// Initialize renderer user agent string, user agent metadata and CORS exempt
// header list on renderer startup.
//
// |user_agent| sets the user-agent string. This is needed because getting the
// value in the renderer from the system leads to a wrong value due to
// sandboxing. This must be called as early as possible, during the renderer
// process initialization.
//
// |full_user_agent| sets the full user-agent with high-entropy information.
//
// |reduced_user_agent| sets a user-agent with high-entropy information
// reduced to common values.
//
// |metadata| sets the user agent metadata. This will replace `SetUserAgent()`
// if we decide to ship https://github.com/WICG/ua-client-hints.
//
// |cors_exempt_header_list| sets the CORS exempt header list for sanity
// checking (e.g. DCHECKs).
//
// |attribution_os_support| sets the OS-level support for Attribution
// Reporting.
InitializeRenderer(string user_agent,
string full_user_agent,
string reduced_user_agent,
blink.mojom.UserAgentMetadata metadata,
array<string> cors_exempt_header_list,
attribution_reporting.mojom.OsSupport attribution_os_support);
};