summaryrefslogtreecommitdiff
path: root/chromium/content/common/renderer.mojom
blob: e73b879f20d05112ddb633d169c73b350cb333f3 (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
// Copyright 2016 The Chromium Authors. All rights reserved.
// 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 "mojo/public/mojom/base/generic_pending_receiver.mojom";
import "mojo/public/mojom/base/time.mojom";
import "services/network/public/mojom/network_types.mojom";
import "third_party/blink/public/mojom/user_agent/user_agent_metadata.mojom";
import "ui/gfx/geometry/mojom/geometry.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 is_high_contrast;
  // uint32 represents a SkColor in the map.
  map<SystemThemeColor, uint32> 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, that will
  // communicate via the pending |agent_scheduling_group_host| and
  // |agent_scheduling_group|. This will create "independent" interfaces that
  // are not associated with the IPC channel, which will not guarantee any order
  // across agent scheduling groups.
  CreateAgentSchedulingGroup(
    pending_remote<AgentSchedulingGroupHost> agent_scheduling_group_host,
    pending_receiver<AgentSchedulingGroup> agent_scheduling_group
  );

  // Tells the renderer to create a new AgentSchedulingGroup, that will
  // communicate via the pending |agent_scheduling_group_host| and
  // |agent_scheduling_group|. This will create channel-associated interfaces
  // that will preserve message ordering across agent scheduling groups.
  CreateAssociatedAgentSchedulingGroup(
    pending_associated_remote<AgentSchedulingGroupHost>
      agent_scheduling_group_host,
    pending_associated_receiver<AgentSchedulingGroup> agent_scheduling_group
  );

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

  // 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.
  SetUserAgent(string user_agent);

  // Sets the user agent metadata. This will replace `SetUserAgent()` if we
  // decide to ship https://github.com/WICG/ua-client-hints.
  SetUserAgentMetadata(blink.mojom.UserAgentMetadata metadata);

  // Sets the CORS exempt header list for sanity checking (e.g. DCHECKs).
  SetCorsExemptHeaderList(array<string> list);

  // 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 scheduler about "keep-alive" state which can be due to:
  // service workers, shared workers, or fetch keep-alive.
  // If set to true, then the scheduler should not freeze the renderer.
  SetSchedulerKeepActive(bool keep_active);

  // 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. This is called earlier than any frame commit.
  SetIsCrossOriginIsolated(bool value);
};