chromium/content/common/renderer.mojom

// 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 "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/process_priority.mojom";
import "mojo/public/mojom/base/shared_memory.mojom";
import "mojo/public/mojom/base/time.mojom";
import "services/network/public/mojom/network_types.mojom";
import "third_party/blink/public/mojom/browser_interface_broker.mojom";
import "third_party/blink/public/mojom/origin_trials/origin_trials_settings.mojom";
import "third_party/blink/public/mojom/user_agent/user_agent_metadata.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 {
  // Accent color used by the system. Currently only set on ChromeOS.
  uint32? accent_color;
};

// 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.
  CreateAgentSchedulingGroup(
    pending_receiver<IPC.mojom.ChannelBootstrap> bootstrap);

  // 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.
  CreateAssociatedAgentSchedulingGroup(
    pending_associated_receiver<AgentSchedulingGroup> agent_scheduling_group);

  // Transfers the ReadOnlySharedMemoryRegion which is used to communicate the
  // `std::atomic<base::TimeTicks>` representing the time at which this renderer
  // was last upgraded to run at foreground priority or a null TimeTicks if it's
  // currently running at best-effort priority.
  TransferSharedLastForegroundTime(
      mojo_base.mojom.ReadOnlySharedMemoryRegion last_foreground_time_region);

  // 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);

  // 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 to purge its in-memory resource cache.
  PurgeResourceCache() => ();

  // Tells the renderer process of a change in visibility or priority state.
  SetProcessState(mojo_base.mojom.ProcessPriority process_priority,
                  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);

  // Sets whether `--disable-web-security` has been set.
  //
  // This is called at most once on process startup.
  SetIsWebSecurityDisabled(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/40180791): We need a specification for this restriction.
  SetIsIsolatedContext(bool value);

  // Initialize renderer user agent string, user agent metadata, CORS exempt
  // header list and origin trials settings 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.
  //
  // |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).
  //
  // |origin_trials_settings| sets the settings used to build a
  // blink::OriginTrialPolicy for the renderer. It can be null if the embedder
  // does not support origin trials.
  InitializeRenderer(string user_agent,
                     blink.mojom.UserAgentMetadata metadata,
                     array<string> cors_exempt_header_list,
                     blink.mojom.OriginTrialsSettings? origin_trials_settings);
};