blob: a1524d94915301853c990c5a10aed1659d744628 [file] [log] [blame]
ben76f52b242016-06-18 05:42:481// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5module content.mojom;
6
Arthur Hemery7b67a972017-12-01 15:24:497import "content/common/navigation_params.mojom";
Kinuko Yasudaba384082018-01-11 08:30:168import "content/common/service_worker/controller_service_worker.mojom";
Ken Rockotbe87ab322017-11-02 19:40:239import "content/common/url_loader_factory_bundle.mojom";
John Abd-El-Malekd4882642017-12-04 21:45:1910import "content/public/common/resource_type.mojom";
csharrison95f01e922017-04-24 18:52:3511import "content/public/common/window_container_type.mojom";
Pavel Feldman08beed7842017-10-17 19:18:1112import "mojo/common/unguessable_token.mojom";
Ken Rockot8b447d72018-02-03 20:30:4713import "mojo/public/mojom/base/string16.mojom";
John Abd-El-Malekb165dc52018-01-18 17:12:1814import "services/network/public/interfaces/url_loader.mojom";
Ken Rockot543f5e32018-02-04 02:13:5015import "services/service_manager/public/mojom/interface_provider.mojom";
Luciano Pacheco8def47f2017-12-07 06:52:3016import "third_party/WebKit/common/feature_policy/feature_policy.mojom";
csharrison95f01e922017-04-24 18:52:3517import "third_party/WebKit/public/platform/referrer.mojom";
18import "third_party/WebKit/public/web/window_features.mojom";
19import "ui/base/mojo/window_open_disposition.mojom";
Daniel Cheng7a059b02018-02-03 10:04:1320import "url/mojom/url.mojom";
Luciano Pacheco8528c16f2017-12-14 07:10:5621import "ui/gfx/geometry/mojo/geometry.mojom";
ben76f52b242016-06-18 05:42:4822
ben275a5652016-10-28 16:55:5023// The name of the InterfaceProviderSpec in service manifests used by the
24// frame tree to expose frame-specific interfaces between renderer and browser.
25const string kNavigation_FrameSpec = "navigation:frame";
26
ben76f52b242016-06-18 05:42:4827// Implemented by the frame provider (e.g. renderer processes).
28interface Frame {
rockot400ea35b2016-10-15 19:15:3229 GetInterfaceProvider(service_manager.mojom.InterfaceProvider& interfaces);
Daniel Cheng118f9e282017-11-10 03:28:4430 GetCanonicalUrlForSharing() => (url.mojom.Url? canonical_url);
Luciano Pacheco8528c16f2017-12-14 07:10:5631
32 // Samsung Galaxy Note-specific "smart clip" stylus text getter.
33 // Extracts the data at the given rect.
34 // TODO(crbug.com/676224): Only enable for OS_ANDROID.
35 ExtractSmartClipData(gfx.mojom.Rect rect)
Ken Rockot8b447d72018-02-03 20:30:4736 => (mojo_base.mojom.String16 text, mojo_base.mojom.String16 html);
ben76f52b242016-06-18 05:42:4837};
38
Ken Rockot48785452017-10-25 19:33:1439// See src/content/common/navigation_params.h
40[Native]
41struct CommonNavigationParams;
42
43// See src/content/common/navigation_params.h
44[Native]
45struct RequestNavigationParams;
46
47// Implemented by the frame provider and currently must be associated with the
48// legacy IPC channel.
49interface FrameNavigationControl {
arthursonzogni3a4ca9f2017-12-07 17:58:3450 // Tells the renderer that a navigation is ready to commit.
51 //
52 // The renderer should request |body_url| to get access to the stream
53 // containing the body of the response. When the Network Service or
54 // NavigationMojoResponse is enabled, |body_url| is not used and instead
55 // |url_loader_client_endpoints| provides a way to continue the navigation.
56 //
57 // Note: |body_url| and |url_loader_client_endpoints| will be empty iff the
58 // navigation URL wasn't handled by the network stack (i.e. JavaScript URLs,
59 // renderer debug URLs, same document navigations, about:blank, ...)
60 //
61 // When the Network Service is enabled, |subresource_loader_factories| may
62 // also be provided by the browser as a a means for the renderer to load
63 // subresources where applicable.
Pavel Feldmanf20fc9d2017-11-17 09:13:3064 //
Kinuko Yasudaba384082018-01-11 08:30:1665 // When S13nServiceWorker is enabled, |controller_service_worker_info| may
66 // also be provided by the browser if the frame that is being navigated
67 // is supposed to be controlled by a Service Worker.
68 //
Pavel Feldmanf20fc9d2017-11-17 09:13:3069 // For automation driver-initiated navigations over the devtools protocol,
70 // |devtools_navigation_token_| is used to tag the navigation. This navigation
71 // token is then sent into the renderer and lands on the DocumentLoader. That
72 // way subsequent Blink-level frame lifecycle events can be associated with
73 // the concrete navigation.
74 // - The value should not be sent back to the browser.
75 // - The value on DocumentLoader may be generated in the renderer in some
76 // cases, and thus shouldn't be trusted.
77 // TODO(crbug.com/783506): Replace devtools navigation token with the generic
78 // navigation token that can be passed from renderer to the browser.
arthursonzogni3a4ca9f2017-12-07 17:58:3479 CommitNavigation(
John Abd-El-Malekb165dc52018-01-18 17:12:1880 network.mojom.URLResponseHead head,
arthursonzogni3a4ca9f2017-12-07 17:58:3481 url.mojom.Url body_url,
82 CommonNavigationParams common_params,
83 RequestNavigationParams request_params,
John Abd-El-Malekb165dc52018-01-18 17:12:1884 network.mojom.URLLoaderClientEndpoints? url_loader_client_endpoints,
arthursonzogni3a4ca9f2017-12-07 17:58:3485 URLLoaderFactoryBundle? subresource_loader_factories,
Kinuko Yasudaba384082018-01-11 08:30:1686 ControllerServiceWorkerInfo? controller_service_worker_info,
arthursonzogni3a4ca9f2017-12-07 17:58:3487 mojo.common.mojom.UnguessableToken devtools_navigation_token);
Doug Turner84693be2017-12-19 00:18:4688
89 // Tells the renderer that a failed navigation is ready to commit.
90 //
91 // The result of this commit usually results in displaying an error page.
92 // Note |error_page_content| may contain the content of the error page
93 // (i.e. flattened HTML, JS, CSS).
94 //
95 // When the Network Service is enabled, |subresource_loader_factories| may
96 // also be provided by the browser as a a means for the renderer to load
97 // subresources where applicable.
98 CommitFailedNavigation(
99 CommonNavigationParams common_params,
100 RequestNavigationParams request_params,
101 bool has_stale_copy_in_cache,
102 int32 error_code,
103 string? error_page_content,
104 URLLoaderFactoryBundle? subresource_loader_factories);
Chong Zhang7306b0b2018-01-24 05:59:24105
clamyb1df7b962018-02-01 17:38:17106 // Asks the renderer to handle a renderer-debug URL.
107 HandleRendererDebugURL(url.mojom.Url url);
108
Chong Zhang7306b0b2018-01-24 05:59:24109 // Provides the renderer an updated |subresource_loader_factories|.
110 //
111 // This method is intended to fix broken loaders after a Network Service
112 // crash, and is only used when Network Service is enabled.
113 //
114 // The new bundle contains replacement factories for a subset of the
115 // receiver's existing bundle.
116 UpdateSubresourceLoaderFactories(
117 URLLoaderFactoryBundle subresource_loader_factories);
Ken Rockot48785452017-10-25 19:33:14118};
119
sammc7f6c6a02017-01-30 00:53:51120// Implemented by the frame (e.g. renderer processes).
121// Instances of this interface must be associated with (i.e., FIFO with) the
122// legacy IPC channel.
123interface FrameBindingsControl {
124 // Used to tell a render frame whether it should expose various bindings
125 // that allow JS content extended privileges. See BindingsPolicy for valid
126 // flag values.
127 AllowBindings(int32 enabled_bindings_flags);
128};
129
ben76f52b242016-06-18 05:42:48130// Implemented by a service that provides implementations of the Frame
131// interface. (e.g. renderer processes).
132interface FrameFactory {
Balazs Engedyba034e72017-10-27 22:26:28133 CreateFrame(int32 frame_routing_id, Frame& frame);
csharrison95f01e922017-04-24 18:52:35134};
135
csharrison95f01e922017-04-24 18:52:35136struct CreateNewWindowParams {
137 // True if this open request came in the context of a user gesture.
138 bool user_gesture;
139
140 // Type of window requested.
141 WindowContainerType window_container_type;
142
143 // The session storage namespace ID this window should use.
144 int64 session_storage_namespace_id;
145
146 // The name of the resulting frame that should be created (empty if none
147 // has been specified). UTF8 encoded string.
148 string frame_name;
149
csharrison95f01e922017-04-24 18:52:35150 // Whether the opener will be suppressed in the new window, in which case
151 // scripting the new window is not allowed.
152 bool opener_suppressed;
153
154 // Whether the window should be opened in the foreground, background, etc.
155 ui.mojom.WindowOpenDisposition disposition;
156
157 // The URL that will be loaded in the new window (empty if none has been
158 // specified).
159 url.mojom.Url target_url;
160
161 // The referrer that will be used to load |target_url| (empty if none has
162 // been specified).
163 blink.mojom.Referrer referrer;
164
165 // The window features to use for the new window.
166 blink.mojom.WindowFeatures features;
167};
168
Daniel Cheng8bb30c62017-10-23 20:40:47169// Operation result when the renderer asks the browser to create a new window.
170enum CreateNewWindowStatus {
171 // Ignore creation of the new window. This can happen because creation is
172 // blocked or because the new window should have no opener relationship.
173 kIgnore,
174 // Reuse the current window rather than creating a new window.
175 kReuse,
176 // Create a new window using the corresponding params in |reply|.
177 kSuccess,
178};
179
180// All routing IDs in this struct must be set to a valid routing ID.
csharrison95f01e922017-04-24 18:52:35181struct CreateNewWindowReply {
Daniel Cheng8bb30c62017-10-23 20:40:47182 // The ID of the view to be created.
csharrison95f01e922017-04-24 18:52:35183 int32 route_id;
184
185 // The ID of the main frame hosted in the view.
186 int32 main_frame_route_id;
187
188 // The ID of the widget for the main frame.
189 int32 main_frame_widget_route_id;
190
Balazs Engedyba034e72017-10-27 22:26:28191 // The InterfaceProvider through which the main RenderFrame can access
192 // services exposed by its RenderFrameHost.
193 service_manager.mojom.InterfaceProvider main_frame_interface_provider;
194
csharrison95f01e922017-04-24 18:52:35195 // Duplicated from CreateNewWindowParams because legacy code.
196 int64 cloned_session_storage_namespace_id;
Pavel Feldman08beed7842017-10-17 19:18:11197
198 // Used for devtools instrumentation and trace-ability. The token is
199 // propagated to Blink's LocalFrame and both Blink and content/
200 // can tag calls and requests with this instrumentation token in order to
201 // attribute them to the context frame.
202 // |devtools_frame_token| is only defined by the browser and is never
203 // sent back from the renderer in the control calls.
204 mojo.common.mojom.UnguessableToken devtools_main_frame_token;
csharrison95f01e922017-04-24 18:52:35205};
206
Yutaka Hiranof7f2f632017-09-06 10:40:08207// An opaque handle that keeps alive the associated render process even after
208// the frame is detached. Used by resource requests with "keepalive" specified.
209interface KeepAliveHandle {};
210
Balazs Engedya40712f2017-09-15 15:01:11211[Native]
212struct DidCommitProvisionalLoadParams;
213
csharrison95f01e922017-04-24 18:52:35214// Implemented by the frame server (i.e. the browser process). For messages that
215// must be associated with the IPC channel.
216interface FrameHost {
Daniel Cheng8bb30c62017-10-23 20:40:47217 // Sent by the renderer to request the browser to create a new window. |reply|
218 // is only non-null on when status == CreateNewWindowStatus::kSuccess.
csharrison95f01e922017-04-24 18:52:35219 [Sync] CreateNewWindow(CreateNewWindowParams params)
Daniel Cheng8bb30c62017-10-23 20:40:47220 => (CreateNewWindowStatus status, CreateNewWindowReply? reply);
Yutaka Hiranof7f2f632017-09-06 10:40:08221
222 // Creates and returns a KeepAliveHandle.
223 IssueKeepAliveHandle(KeepAliveHandle& keep_alive_handle);
Balazs Engedya40712f2017-09-15 15:01:11224
225 // Sent by the renderer when a navigation commits in the frame.
Balazs Engedy0c8d550b2017-12-06 21:30:23226 //
227 // If |interface_provider_request| is non-empty, the FrameHost implementation
228 // must unbind the old InterfaceProvider connection, and drop any interface
229 // requests pending on it. Then it should bind |interface_provider_request|
230 // and start servicing GetInterface messages coming in on this new connection
231 // in a security context that is appropriate for the committed navigation.
232 //
233 // The FrameHost implementation must enforce that |interface_provider_request|
234 // is set for cross-document navigations. This prevents origin confusion by
235 // ensuring that interface requests racing with navigation commit will be
236 // either ignored, or serviced correctly in the security context of the
237 // document they originated from (based on which InterfaceProvider connection
238 // the GetInterface messages arrive on).
Balazs Engedya40712f2017-09-15 15:01:11239 DidCommitProvisionalLoad(
Balazs Engedy0c8d550b2017-12-06 21:30:23240 DidCommitProvisionalLoadParams params,
241 service_manager.mojom.InterfaceProvider&? interface_provider_request);
Arthur Hemery7b67a972017-12-01 15:24:49242
Arthur Hemery7b0ae492018-02-05 16:04:45243 // Sent by the renderer to indicate that a same document navigation
244 // committed in the renderer process.
245 DidCommitSameDocumentNavigation(
246 DidCommitProvisionalLoadParams params);
247
Arthur Hemery7b67a972017-12-01 15:24:49248 // Sent by the renderer to request a navigation.
249 BeginNavigation(
250 CommonNavigationParams common_params,
251 BeginNavigationParams begin_params);
John Abd-El-Malekd4882642017-12-04 21:45:19252
253 // Sent when a subresource response has started.
254 SubresourceResponseStarted(
255 url.mojom.Url url,
256 url.mojom.Url referrer,
257 string method,
258 ResourceType resource_type,
259 string ip,
260 uint32 cert_status);
Luciano Pacheco8def47f2017-12-07 06:52:30261
262 // Sent when the frame changes its window.name.
263 DidChangeName(string name, string unique_name);
264
265 // Sent when the frame starts enforcing an insecure request policy. Sending
266 // this information in DidCommitProvisionalLoad isn't sufficient; this
267 // message is needed because, for example, a document can dynamically insert
268 // a <meta> tag that causes strict mixed content checking to be enforced.
269 //
270 // Argument |policy_bitmap| represents blink::WebInsecureRequestPolicy uint8
271 // bitfield.
272 EnforceInsecureRequestPolicy(uint8 policy_bitmap);
arthursonzogni4b62a5cb2018-01-17 14:14:26273 // Elements of |set| are hashes of hosts to upgrade.
274 EnforceInsecureNavigationsSet(array<uint32> set);
Luciano Pacheco8def47f2017-12-07 06:52:30275
276 // Notifies the browser process that HTTP headers which affect the frame
277 // polices were delivered with the document being loaded into the frame. This
278 // can be either or both of 'Feature-Policy' or 'Content-Security-Policy' (
279 // which can set sandbox flags).
280 //
281 // |parsed_header| is a list of an origin whitelist for each feature in the
282 // policy.
283 DidSetFramePolicyHeaders(
284 blink.mojom.WebSandboxFlags sandbox_flags,
285 array<blink.mojom.ParsedFeaturePolicyDeclaration> parsed_header);
Austin Tankiang10d64832017-12-20 02:43:55286
287 // If a cross-process navigation was started for the initial history load in
288 // this subframe, this tries to cancel it to allow a client redirect to happen
289 // instead.
290 CancelInitialHistoryLoad();
291
292 // Change the encoding name of the page in UI when the page has detected
293 // proper encoding name. Sent for top-level frames.
294 UpdateEncoding(string encoding_name);
ben76f52b242016-06-18 05:42:48295};