blob: 18831c1d26aa29e8c775c3ca39c6e8e173a8efb5 [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";
clamyaf4bf2d92018-02-06 10:54:3618import "third_party/WebKit/public/web/commit_result.mojom";
csharrison95f01e922017-04-24 18:52:3519import "third_party/WebKit/public/web/window_features.mojom";
20import "ui/base/mojo/window_open_disposition.mojom";
Daniel Cheng7a059b02018-02-03 10:04:1321import "url/mojom/url.mojom";
Luciano Pacheco8528c16f2017-12-14 07:10:5622import "ui/gfx/geometry/mojo/geometry.mojom";
ben76f52b242016-06-18 05:42:4823
ben275a5652016-10-28 16:55:5024// The name of the InterfaceProviderSpec in service manifests used by the
25// frame tree to expose frame-specific interfaces between renderer and browser.
26const string kNavigation_FrameSpec = "navigation:frame";
27
ben76f52b242016-06-18 05:42:4828// Implemented by the frame provider (e.g. renderer processes).
29interface Frame {
rockot400ea35b2016-10-15 19:15:3230 GetInterfaceProvider(service_manager.mojom.InterfaceProvider& interfaces);
Daniel Cheng118f9e282017-11-10 03:28:4431 GetCanonicalUrlForSharing() => (url.mojom.Url? canonical_url);
Luciano Pacheco8528c16f2017-12-14 07:10:5632
33 // Samsung Galaxy Note-specific "smart clip" stylus text getter.
34 // Extracts the data at the given rect.
35 // TODO(crbug.com/676224): Only enable for OS_ANDROID.
36 ExtractSmartClipData(gfx.mojom.Rect rect)
Ken Rockot8b447d72018-02-03 20:30:4737 => (mojo_base.mojom.String16 text, mojo_base.mojom.String16 html);
ben76f52b242016-06-18 05:42:4838};
39
Ken Rockot48785452017-10-25 19:33:1440// See src/content/common/navigation_params.h
41[Native]
42struct CommonNavigationParams;
43
44// See src/content/common/navigation_params.h
45[Native]
46struct RequestNavigationParams;
47
48// Implemented by the frame provider and currently must be associated with the
49// legacy IPC channel.
50interface FrameNavigationControl {
arthursonzogni3a4ca9f2017-12-07 17:58:3451 // Tells the renderer that a navigation is ready to commit.
52 //
53 // The renderer should request |body_url| to get access to the stream
54 // containing the body of the response. When the Network Service or
55 // NavigationMojoResponse is enabled, |body_url| is not used and instead
56 // |url_loader_client_endpoints| provides a way to continue the navigation.
57 //
58 // Note: |body_url| and |url_loader_client_endpoints| will be empty iff the
59 // navigation URL wasn't handled by the network stack (i.e. JavaScript URLs,
60 // renderer debug URLs, same document navigations, about:blank, ...)
61 //
62 // When the Network Service is enabled, |subresource_loader_factories| may
63 // also be provided by the browser as a a means for the renderer to load
64 // subresources where applicable.
Pavel Feldmanf20fc9d2017-11-17 09:13:3065 //
Kinuko Yasudaba384082018-01-11 08:30:1666 // When S13nServiceWorker is enabled, |controller_service_worker_info| may
67 // also be provided by the browser if the frame that is being navigated
68 // is supposed to be controlled by a Service Worker.
69 //
Pavel Feldmanf20fc9d2017-11-17 09:13:3070 // For automation driver-initiated navigations over the devtools protocol,
71 // |devtools_navigation_token_| is used to tag the navigation. This navigation
72 // token is then sent into the renderer and lands on the DocumentLoader. That
73 // way subsequent Blink-level frame lifecycle events can be associated with
74 // the concrete navigation.
75 // - The value should not be sent back to the browser.
76 // - The value on DocumentLoader may be generated in the renderer in some
77 // cases, and thus shouldn't be trusted.
78 // TODO(crbug.com/783506): Replace devtools navigation token with the generic
79 // navigation token that can be passed from renderer to the browser.
arthursonzogni3a4ca9f2017-12-07 17:58:3480 CommitNavigation(
John Abd-El-Malekb165dc52018-01-18 17:12:1881 network.mojom.URLResponseHead head,
arthursonzogni3a4ca9f2017-12-07 17:58:3482 url.mojom.Url body_url,
83 CommonNavigationParams common_params,
84 RequestNavigationParams request_params,
John Abd-El-Malekb165dc52018-01-18 17:12:1885 network.mojom.URLLoaderClientEndpoints? url_loader_client_endpoints,
arthursonzogni3a4ca9f2017-12-07 17:58:3486 URLLoaderFactoryBundle? subresource_loader_factories,
Kinuko Yasudaba384082018-01-11 08:30:1687 ControllerServiceWorkerInfo? controller_service_worker_info,
arthursonzogni3a4ca9f2017-12-07 17:58:3488 mojo.common.mojom.UnguessableToken devtools_navigation_token);
Doug Turner84693be2017-12-19 00:18:4689
90 // Tells the renderer that a failed navigation is ready to commit.
91 //
92 // The result of this commit usually results in displaying an error page.
93 // Note |error_page_content| may contain the content of the error page
94 // (i.e. flattened HTML, JS, CSS).
95 //
96 // When the Network Service is enabled, |subresource_loader_factories| may
97 // also be provided by the browser as a a means for the renderer to load
98 // subresources where applicable.
99 CommitFailedNavigation(
100 CommonNavigationParams common_params,
101 RequestNavigationParams request_params,
102 bool has_stale_copy_in_cache,
103 int32 error_code,
104 string? error_page_content,
105 URLLoaderFactoryBundle? subresource_loader_factories);
Chong Zhang7306b0b2018-01-24 05:59:24106
clamyaf4bf2d92018-02-06 10:54:36107 // Tells the renderer that a same-document navigation should be committed.
108 // The renderer will return a status value indicating whether the commit
109 // could proceed as expected or not. In particular, it might be necessary to
110 // restart the navigation if it is no-longer same-document, which can happen
111 // if the renderer committed another navigation in the meantime.
112 CommitSameDocumentNavigation(
113 CommonNavigationParams common_params,
114 RequestNavigationParams request_params)
115 => (blink.mojom.CommitResult commit_result);
116
clamyb1df7b962018-02-01 17:38:17117 // Asks the renderer to handle a renderer-debug URL.
118 HandleRendererDebugURL(url.mojom.Url url);
119
Chong Zhang7306b0b2018-01-24 05:59:24120 // Provides the renderer an updated |subresource_loader_factories|.
121 //
122 // This method is intended to fix broken loaders after a Network Service
123 // crash, and is only used when Network Service is enabled.
124 //
125 // The new bundle contains replacement factories for a subset of the
126 // receiver's existing bundle.
127 UpdateSubresourceLoaderFactories(
128 URLLoaderFactoryBundle subresource_loader_factories);
Ken Rockot48785452017-10-25 19:33:14129};
130
sammc7f6c6a02017-01-30 00:53:51131// Implemented by the frame (e.g. renderer processes).
132// Instances of this interface must be associated with (i.e., FIFO with) the
133// legacy IPC channel.
134interface FrameBindingsControl {
135 // Used to tell a render frame whether it should expose various bindings
136 // that allow JS content extended privileges. See BindingsPolicy for valid
137 // flag values.
138 AllowBindings(int32 enabled_bindings_flags);
139};
140
ben76f52b242016-06-18 05:42:48141// Implemented by a service that provides implementations of the Frame
142// interface. (e.g. renderer processes).
143interface FrameFactory {
Balazs Engedyba034e72017-10-27 22:26:28144 CreateFrame(int32 frame_routing_id, Frame& frame);
csharrison95f01e922017-04-24 18:52:35145};
146
csharrison95f01e922017-04-24 18:52:35147struct CreateNewWindowParams {
148 // True if this open request came in the context of a user gesture.
149 bool user_gesture;
150
151 // Type of window requested.
152 WindowContainerType window_container_type;
153
154 // The session storage namespace ID this window should use.
155 int64 session_storage_namespace_id;
156
157 // The name of the resulting frame that should be created (empty if none
158 // has been specified). UTF8 encoded string.
159 string frame_name;
160
csharrison95f01e922017-04-24 18:52:35161 // Whether the opener will be suppressed in the new window, in which case
162 // scripting the new window is not allowed.
163 bool opener_suppressed;
164
165 // Whether the window should be opened in the foreground, background, etc.
166 ui.mojom.WindowOpenDisposition disposition;
167
168 // The URL that will be loaded in the new window (empty if none has been
169 // specified).
170 url.mojom.Url target_url;
171
172 // The referrer that will be used to load |target_url| (empty if none has
173 // been specified).
174 blink.mojom.Referrer referrer;
175
176 // The window features to use for the new window.
177 blink.mojom.WindowFeatures features;
178};
179
Daniel Cheng8bb30c62017-10-23 20:40:47180// Operation result when the renderer asks the browser to create a new window.
181enum CreateNewWindowStatus {
182 // Ignore creation of the new window. This can happen because creation is
183 // blocked or because the new window should have no opener relationship.
184 kIgnore,
185 // Reuse the current window rather than creating a new window.
186 kReuse,
187 // Create a new window using the corresponding params in |reply|.
188 kSuccess,
189};
190
191// All routing IDs in this struct must be set to a valid routing ID.
csharrison95f01e922017-04-24 18:52:35192struct CreateNewWindowReply {
Daniel Cheng8bb30c62017-10-23 20:40:47193 // The ID of the view to be created.
csharrison95f01e922017-04-24 18:52:35194 int32 route_id;
195
196 // The ID of the main frame hosted in the view.
197 int32 main_frame_route_id;
198
199 // The ID of the widget for the main frame.
200 int32 main_frame_widget_route_id;
201
Balazs Engedyba034e72017-10-27 22:26:28202 // The InterfaceProvider through which the main RenderFrame can access
203 // services exposed by its RenderFrameHost.
204 service_manager.mojom.InterfaceProvider main_frame_interface_provider;
205
csharrison95f01e922017-04-24 18:52:35206 // Duplicated from CreateNewWindowParams because legacy code.
207 int64 cloned_session_storage_namespace_id;
Pavel Feldman08beed7842017-10-17 19:18:11208
209 // Used for devtools instrumentation and trace-ability. The token is
210 // propagated to Blink's LocalFrame and both Blink and content/
211 // can tag calls and requests with this instrumentation token in order to
212 // attribute them to the context frame.
213 // |devtools_frame_token| is only defined by the browser and is never
214 // sent back from the renderer in the control calls.
215 mojo.common.mojom.UnguessableToken devtools_main_frame_token;
csharrison95f01e922017-04-24 18:52:35216};
217
Yutaka Hiranof7f2f632017-09-06 10:40:08218// An opaque handle that keeps alive the associated render process even after
219// the frame is detached. Used by resource requests with "keepalive" specified.
220interface KeepAliveHandle {};
221
Balazs Engedya40712f2017-09-15 15:01:11222[Native]
223struct DidCommitProvisionalLoadParams;
224
csharrison95f01e922017-04-24 18:52:35225// Implemented by the frame server (i.e. the browser process). For messages that
226// must be associated with the IPC channel.
227interface FrameHost {
Daniel Cheng8bb30c62017-10-23 20:40:47228 // Sent by the renderer to request the browser to create a new window. |reply|
229 // is only non-null on when status == CreateNewWindowStatus::kSuccess.
csharrison95f01e922017-04-24 18:52:35230 [Sync] CreateNewWindow(CreateNewWindowParams params)
Daniel Cheng8bb30c62017-10-23 20:40:47231 => (CreateNewWindowStatus status, CreateNewWindowReply? reply);
Yutaka Hiranof7f2f632017-09-06 10:40:08232
233 // Creates and returns a KeepAliveHandle.
234 IssueKeepAliveHandle(KeepAliveHandle& keep_alive_handle);
Balazs Engedya40712f2017-09-15 15:01:11235
236 // Sent by the renderer when a navigation commits in the frame.
Balazs Engedy0c8d550b2017-12-06 21:30:23237 //
238 // If |interface_provider_request| is non-empty, the FrameHost implementation
239 // must unbind the old InterfaceProvider connection, and drop any interface
240 // requests pending on it. Then it should bind |interface_provider_request|
241 // and start servicing GetInterface messages coming in on this new connection
242 // in a security context that is appropriate for the committed navigation.
243 //
244 // The FrameHost implementation must enforce that |interface_provider_request|
245 // is set for cross-document navigations. This prevents origin confusion by
246 // ensuring that interface requests racing with navigation commit will be
247 // either ignored, or serviced correctly in the security context of the
248 // document they originated from (based on which InterfaceProvider connection
249 // the GetInterface messages arrive on).
Balazs Engedya40712f2017-09-15 15:01:11250 DidCommitProvisionalLoad(
Balazs Engedy0c8d550b2017-12-06 21:30:23251 DidCommitProvisionalLoadParams params,
252 service_manager.mojom.InterfaceProvider&? interface_provider_request);
Arthur Hemery7b67a972017-12-01 15:24:49253
Arthur Hemery7b0ae492018-02-05 16:04:45254 // Sent by the renderer to indicate that a same document navigation
255 // committed in the renderer process.
256 DidCommitSameDocumentNavigation(
257 DidCommitProvisionalLoadParams params);
258
Arthur Hemery7b67a972017-12-01 15:24:49259 // Sent by the renderer to request a navigation.
260 BeginNavigation(
261 CommonNavigationParams common_params,
262 BeginNavigationParams begin_params);
John Abd-El-Malekd4882642017-12-04 21:45:19263
264 // Sent when a subresource response has started.
265 SubresourceResponseStarted(
266 url.mojom.Url url,
267 url.mojom.Url referrer,
268 string method,
269 ResourceType resource_type,
270 string ip,
271 uint32 cert_status);
Luciano Pacheco8def47f2017-12-07 06:52:30272
273 // Sent when the frame changes its window.name.
274 DidChangeName(string name, string unique_name);
275
276 // Sent when the frame starts enforcing an insecure request policy. Sending
277 // this information in DidCommitProvisionalLoad isn't sufficient; this
278 // message is needed because, for example, a document can dynamically insert
279 // a <meta> tag that causes strict mixed content checking to be enforced.
280 //
281 // Argument |policy_bitmap| represents blink::WebInsecureRequestPolicy uint8
282 // bitfield.
283 EnforceInsecureRequestPolicy(uint8 policy_bitmap);
arthursonzogni4b62a5cb2018-01-17 14:14:26284 // Elements of |set| are hashes of hosts to upgrade.
285 EnforceInsecureNavigationsSet(array<uint32> set);
Luciano Pacheco8def47f2017-12-07 06:52:30286
287 // Notifies the browser process that HTTP headers which affect the frame
288 // polices were delivered with the document being loaded into the frame. This
289 // can be either or both of 'Feature-Policy' or 'Content-Security-Policy' (
290 // which can set sandbox flags).
291 //
292 // |parsed_header| is a list of an origin whitelist for each feature in the
293 // policy.
294 DidSetFramePolicyHeaders(
295 blink.mojom.WebSandboxFlags sandbox_flags,
296 array<blink.mojom.ParsedFeaturePolicyDeclaration> parsed_header);
Austin Tankiang10d64832017-12-20 02:43:55297
298 // If a cross-process navigation was started for the initial history load in
299 // this subframe, this tries to cancel it to allow a client redirect to happen
300 // instead.
301 CancelInitialHistoryLoad();
302
303 // Change the encoding name of the page in UI when the page has detected
304 // proper encoding name. Sent for top-level frames.
305 UpdateEncoding(string encoding_name);
ben76f52b242016-06-18 05:42:48306};