ben | 76f52b24 | 2016-06-18 05:42:48 | [diff] [blame] | 1 | // 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 | |
| 5 | module content.mojom; |
| 6 | |
Oksana Zhuravlova | 8b88e57 | 2019-01-07 21:54:00 | [diff] [blame] | 7 | import "content/common/document_scoped_interface_bundle.mojom"; |
Arthur Hemery | 9c03573 | 2019-01-07 16:12:41 | [diff] [blame] | 8 | import "content/common/frame_messages.mojom"; |
Arthur Hemery | d3011f6 | 2018-05-30 10:38:44 | [diff] [blame] | 9 | import "content/common/navigation_client.mojom"; |
Arthur Hemery | 7b67a97 | 2017-12-01 15:24:49 | [diff] [blame] | 10 | import "content/common/navigation_params.mojom"; |
John Abd-El-Malek | d488264 | 2017-12-04 21:45:19 | [diff] [blame] | 11 | import "content/public/common/resource_type.mojom"; |
Jay Civelli | 116683f | 2018-03-27 19:56:23 | [diff] [blame] | 12 | import "content/public/common/resource_load_info.mojom"; |
John Abd-El-Malek | ecc6f5f | 2018-03-02 18:47:39 | [diff] [blame] | 13 | import "content/public/common/transferrable_url_loader.mojom"; |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 14 | import "content/public/common/window_container_type.mojom"; |
Ken Rockot | 8b447d7 | 2018-02-03 20:30:47 | [diff] [blame] | 15 | import "mojo/public/mojom/base/string16.mojom"; |
Oksana Zhuravlova | 34579e91 | 2018-03-23 00:18:49 | [diff] [blame] | 16 | import "mojo/public/mojom/base/unguessable_token.mojom"; |
Hajime Hoshi | 35ad74f | 2019-03-07 08:38:05 | [diff] [blame] | 17 | import "mojo/public/mojom/base/values.mojom"; |
Ken Rockot | 54311e6 | 2018-02-10 19:01:52 | [diff] [blame] | 18 | import "services/network/public/mojom/url_loader.mojom"; |
Kinuko Yasuda | d795ac7 | 2018-07-11 08:07:53 | [diff] [blame] | 19 | import "services/network/public/mojom/url_loader_factory.mojom"; |
Ken Rockot | 543f5e3 | 2018-02-04 02:13:50 | [diff] [blame] | 20 | import "services/service_manager/public/mojom/interface_provider.mojom"; |
Jennifer Apacible | c45fd05 | 2018-02-25 12:04:55 | [diff] [blame] | 21 | import "services/viz/public/interfaces/compositing/surface_id.mojom"; |
Blink Reformat | a30d423 | 2018-04-07 15:31:06 | [diff] [blame] | 22 | import "third_party/blink/public/mojom/blob/blob_url_store.mojom"; |
Julie Jeongeun Kim | 42a90df | 2019-03-20 23:13:10 | [diff] [blame] | 23 | import "third_party/blink/public/mojom/commit_result/commit_result.mojom"; |
Blink Reformat | a30d423 | 2018-04-07 15:31:06 | [diff] [blame] | 24 | import "third_party/blink/public/mojom/feature_policy/feature_policy.mojom"; |
Dave Tapuska | d6703f91 | 2019-01-31 23:13:11 | [diff] [blame] | 25 | import "third_party/blink/public/mojom/frame/lifecycle.mojom"; |
Andy Paicu | c93d3086 | 2018-10-10 15:33:45 | [diff] [blame] | 26 | import "third_party/blink/public/mojom/frame/navigation_initiator.mojom"; |
Jeremy Roman | 3c83b16 | 2019-03-12 16:55:52 | [diff] [blame] | 27 | import "third_party/blink/public/mojom/messaging/transferable_message.mojom"; |
Hiroki Nakagawa | 75375834 | 2018-12-27 04:13:49 | [diff] [blame] | 28 | import "third_party/blink/public/mojom/loader/url_loader_factory_bundle.mojom"; |
Yuzu Saijo | aae9170 | 2019-03-13 07:38:05 | [diff] [blame] | 29 | import "third_party/blink/public/mojom/messaging/transferable_message.mojom"; |
Lucas Furukawa Gadani | 89a7418 | 2019-01-10 19:33:22 | [diff] [blame] | 30 | import "third_party/blink/public/mojom/portal/portal.mojom"; |
Leon Han | 075e0b3 | 2018-11-06 07:59:44 | [diff] [blame] | 31 | import "third_party/blink/public/mojom/referrer.mojom"; |
Hiroki Nakagawa | cdbc791 | 2018-11-30 11:30:05 | [diff] [blame] | 32 | import "third_party/blink/public/mojom/service_worker/controller_service_worker.mojom"; |
Leon Han | 49c3ff6 | 2019-03-13 00:08:01 | [diff] [blame] | 33 | import "third_party/blink/public/mojom/service_worker/service_worker_provider.mojom"; |
Hiroki Nakagawa | 7c0a7e7 | 2018-12-10 04:31:29 | [diff] [blame] | 34 | import "third_party/blink/public/mojom/devtools/devtools_agent.mojom"; |
Lucas Furukawa Gadani | 9912582 | 2019-01-03 15:41:49 | [diff] [blame] | 35 | import "third_party/blink/public/mojom/portal/portal.mojom"; |
Julie Jeongeun Kim | 42a90df | 2019-03-20 23:13:10 | [diff] [blame] | 36 | import "third_party/blink/public/mojom/window_features/window_features.mojom"; |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 37 | import "ui/base/mojo/window_open_disposition.mojom"; |
Daniel Cheng | 7a059b0 | 2018-02-03 10:04:13 | [diff] [blame] | 38 | import "url/mojom/url.mojom"; |
Adithya Srinivasan | 57f44d0d | 2019-03-22 15:36:02 | [diff] [blame] | 39 | import "url/mojom/origin.mojom"; |
Luciano Pacheco | 8528c16f | 2017-12-14 07:10:56 | [diff] [blame] | 40 | import "ui/gfx/geometry/mojo/geometry.mojom"; |
ben | 76f52b24 | 2016-06-18 05:42:48 | [diff] [blame] | 41 | |
ben | 275a565 | 2016-10-28 16:55:50 | [diff] [blame] | 42 | // The name of the InterfaceProviderSpec in service manifests used by the |
| 43 | // frame tree to expose frame-specific interfaces between renderer and browser. |
| 44 | const string kNavigation_FrameSpec = "navigation:frame"; |
| 45 | |
ben | 76f52b24 | 2016-06-18 05:42:48 | [diff] [blame] | 46 | // Implemented by the frame provider (e.g. renderer processes). |
| 47 | interface Frame { |
rockot | 400ea35b | 2016-10-15 19:15:32 | [diff] [blame] | 48 | GetInterfaceProvider(service_manager.mojom.InterfaceProvider& interfaces); |
Daniel Cheng | 118f9e28 | 2017-11-10 03:28:44 | [diff] [blame] | 49 | GetCanonicalUrlForSharing() => (url.mojom.Url? canonical_url); |
Luciano Pacheco | 8528c16f | 2017-12-14 07:10:56 | [diff] [blame] | 50 | |
John Abd-El-Malek | 9405d80e | 2018-08-08 16:50:21 | [diff] [blame] | 51 | // Causes all new subresource requests to be blocked (not being started) until |
| 52 | // ResumeBlockedRequests is called. |
| 53 | BlockRequests(); |
| 54 | |
| 55 | // Resumes blocked requests. |
| 56 | // It is safe to call this without calling BlockRequests. |
| 57 | ResumeBlockedRequests(); |
| 58 | |
| 59 | // Cancels blocked requests. BlockRequests must have been called before. |
| 60 | CancelBlockedRequests(); |
| 61 | |
Dave Tapuska | 1dd5774 | 2019-02-07 01:07:37 | [diff] [blame] | 62 | // Set the lifecycle state. |
| 63 | SetLifecycleState(blink.mojom.FrameLifecycleState state); |
| 64 | |
Luciano Pacheco | 8528c16f | 2017-12-14 07:10:56 | [diff] [blame] | 65 | // Samsung Galaxy Note-specific "smart clip" stylus text getter. |
| 66 | // Extracts the data at the given rect. |
Eve Martin-Jones | 40f552c | 2018-02-14 22:47:32 | [diff] [blame] | 67 | [EnableIf=is_android] |
Luciano Pacheco | 8528c16f | 2017-12-14 07:10:56 | [diff] [blame] | 68 | ExtractSmartClipData(gfx.mojom.Rect rect) |
Mahesh Machavolu | 346cd266 | 2018-05-24 12:40:11 | [diff] [blame] | 69 | => (mojo_base.mojom.String16 text, mojo_base.mojom.String16 html, |
| 70 | gfx.mojom.Rect clip_rect); |
ben | 76f52b24 | 2016-06-18 05:42:48 | [diff] [blame] | 71 | }; |
| 72 | |
Ken Rockot | 4878545 | 2017-10-25 19:33:14 | [diff] [blame] | 73 | // See src/content/common/navigation_params.h |
| 74 | [Native] |
| 75 | struct CommonNavigationParams; |
| 76 | |
| 77 | // See src/content/common/navigation_params.h |
| 78 | [Native] |
Nasko Oskov | c36327d | 2019-01-03 23:23:04 | [diff] [blame] | 79 | struct CommitNavigationParams; |
Ken Rockot | 4878545 | 2017-10-25 19:33:14 | [diff] [blame] | 80 | |
| 81 | // Implemented by the frame provider and currently must be associated with the |
| 82 | // legacy IPC channel. |
Arthur Hemery | d3011f6 | 2018-05-30 10:38:44 | [diff] [blame] | 83 | // KEEP THE COMMIT FUNCTIONS IN SYNC in content/common/navigation_client.mojom. |
| 84 | // These will eventually be removed from FrameNavigationControl. |
Ken Rockot | 4878545 | 2017-10-25 19:33:14 | [diff] [blame] | 85 | interface FrameNavigationControl { |
arthursonzogni | 3a4ca9f | 2017-12-07 17:58:34 | [diff] [blame] | 86 | // Tells the renderer that a navigation is ready to commit. |
| 87 | // |
arthursonzogni | f34adf09 | 2018-04-24 17:06:13 | [diff] [blame] | 88 | // The renderer should bind the |url_loader_client_endpoints| to an |
| 89 | // URLLoaderClient implementation to continue loading the document that will |
| 90 | // be the result of the committed navigation. |
arthursonzogni | 3a4ca9f | 2017-12-07 17:58:34 | [diff] [blame] | 91 | // |
arthursonzogni | f34adf09 | 2018-04-24 17:06:13 | [diff] [blame] | 92 | // Note: |url_loader_client_endpoints| will be empty iff the navigation URL |
Arthur Hemery | d3011f6 | 2018-05-30 10:38:44 | [diff] [blame] | 93 | // wasn't handled by the network stack (i.e. about:blank, ...) |
arthursonzogni | 3a4ca9f | 2017-12-07 17:58:34 | [diff] [blame] | 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. |
Pavel Feldman | f20fc9d | 2017-11-17 09:13:30 | [diff] [blame] | 98 | // |
arthursonzogni | b950d90 | 2018-02-08 09:27:13 | [diff] [blame] | 99 | // |controller_service_worker_info| may also be provided by the browser if the |
| 100 | // frame that is being navigated is supposed to be controlled by a Service |
| 101 | // Worker. |
Leon Han | 49c3ff6 | 2019-03-13 00:08:01 | [diff] [blame] | 102 | // |provider_info| may also be provided if the browser has created a |
| 103 | // ServiceWorkerProviderHost for this navigation. |
Kinuko Yasuda | d795ac7 | 2018-07-11 08:07:53 | [diff] [blame] | 104 | // |prefetch_loader_factory| is populated only when Network Service is |
| 105 | // enabled. The pointer is used to start a prefetch loading via the browser |
| 106 | // process. |
Kinuko Yasuda | ba38408 | 2018-01-11 08:30:16 | [diff] [blame] | 107 | // |
Pavel Feldman | f20fc9d | 2017-11-17 09:13:30 | [diff] [blame] | 108 | // For automation driver-initiated navigations over the devtools protocol, |
| 109 | // |devtools_navigation_token_| is used to tag the navigation. This navigation |
| 110 | // token is then sent into the renderer and lands on the DocumentLoader. That |
| 111 | // way subsequent Blink-level frame lifecycle events can be associated with |
| 112 | // the concrete navigation. |
| 113 | // - The value should not be sent back to the browser. |
| 114 | // - The value on DocumentLoader may be generated in the renderer in some |
| 115 | // cases, and thus shouldn't be trusted. |
| 116 | // TODO(crbug.com/783506): Replace devtools navigation token with the generic |
| 117 | // navigation token that can be passed from renderer to the browser. |
arthursonzogni | 3a4ca9f | 2017-12-07 17:58:34 | [diff] [blame] | 118 | CommitNavigation( |
John Abd-El-Malek | b165dc5 | 2018-01-18 17:12:18 | [diff] [blame] | 119 | network.mojom.URLResponseHead head, |
arthursonzogni | 3a4ca9f | 2017-12-07 17:58:34 | [diff] [blame] | 120 | CommonNavigationParams common_params, |
Nasko Oskov | c36327d | 2019-01-03 23:23:04 | [diff] [blame] | 121 | CommitNavigationParams request_params, |
John Abd-El-Malek | b165dc5 | 2018-01-18 17:12:18 | [diff] [blame] | 122 | network.mojom.URLLoaderClientEndpoints? url_loader_client_endpoints, |
Hiroki Nakagawa | 75375834 | 2018-12-27 04:13:49 | [diff] [blame] | 123 | blink.mojom.URLLoaderFactoryBundle? subresource_loader_factories, |
John Abd-El-Malek | ecc6f5f | 2018-03-02 18:47:39 | [diff] [blame] | 124 | array<TransferrableURLLoader>? subresource_overrides, |
Hiroki Nakagawa | cdbc791 | 2018-11-30 11:30:05 | [diff] [blame] | 125 | blink.mojom.ControllerServiceWorkerInfo? controller_service_worker_info, |
Leon Han | 49c3ff6 | 2019-03-13 00:08:01 | [diff] [blame] | 126 | blink.mojom.ServiceWorkerProviderInfoForWindow? provider_info, |
Kinuko Yasuda | d795ac7 | 2018-07-11 08:07:53 | [diff] [blame] | 127 | network.mojom.URLLoaderFactory? prefetch_loader_factory, |
clamy | 6b92fcf | 2018-06-01 13:51:37 | [diff] [blame] | 128 | mojo_base.mojom.UnguessableToken devtools_navigation_token) |
| 129 | => (blink.mojom.CommitResult commit_result); |
Doug Turner | 84693be | 2017-12-19 00:18:46 | [diff] [blame] | 130 | |
| 131 | // Tells the renderer that a failed navigation is ready to commit. |
| 132 | // |
| 133 | // The result of this commit usually results in displaying an error page. |
| 134 | // Note |error_page_content| may contain the content of the error page |
| 135 | // (i.e. flattened HTML, JS, CSS). |
| 136 | // |
| 137 | // When the Network Service is enabled, |subresource_loader_factories| may |
Conley Owens | 7a78fab | 2018-03-10 06:27:49 | [diff] [blame] | 138 | // also be provided by the browser as a means for the renderer to load |
Doug Turner | 84693be | 2017-12-19 00:18:46 | [diff] [blame] | 139 | // subresources where applicable. |
| 140 | CommitFailedNavigation( |
| 141 | CommonNavigationParams common_params, |
Nasko Oskov | c36327d | 2019-01-03 23:23:04 | [diff] [blame] | 142 | CommitNavigationParams request_params, |
Doug Turner | 84693be | 2017-12-19 00:18:46 | [diff] [blame] | 143 | bool has_stale_copy_in_cache, |
| 144 | int32 error_code, |
| 145 | string? error_page_content, |
Hiroki Nakagawa | 75375834 | 2018-12-27 04:13:49 | [diff] [blame] | 146 | blink.mojom.URLLoaderFactoryBundle? subresource_loader_factories) |
clamy | 6b92fcf | 2018-06-01 13:51:37 | [diff] [blame] | 147 | => (blink.mojom.CommitResult commit_result); |
Chong Zhang | 7306b0b | 2018-01-24 05:59:24 | [diff] [blame] | 148 | |
clamy | af4bf2d9 | 2018-02-06 10:54:36 | [diff] [blame] | 149 | // Tells the renderer that a same-document navigation should be committed. |
| 150 | // The renderer will return a status value indicating whether the commit |
| 151 | // could proceed as expected or not. In particular, it might be necessary to |
| 152 | // restart the navigation if it is no-longer same-document, which can happen |
| 153 | // if the renderer committed another navigation in the meantime. |
| 154 | CommitSameDocumentNavigation( |
| 155 | CommonNavigationParams common_params, |
Nasko Oskov | c36327d | 2019-01-03 23:23:04 | [diff] [blame] | 156 | CommitNavigationParams request_params) |
clamy | af4bf2d9 | 2018-02-06 10:54:36 | [diff] [blame] | 157 | => (blink.mojom.CommitResult commit_result); |
| 158 | |
clamy | b1df7b96 | 2018-02-01 17:38:17 | [diff] [blame] | 159 | // Asks the renderer to handle a renderer-debug URL. |
| 160 | HandleRendererDebugURL(url.mojom.Url url); |
| 161 | |
Chong Zhang | 7306b0b | 2018-01-24 05:59:24 | [diff] [blame] | 162 | // Provides the renderer an updated |subresource_loader_factories|. |
| 163 | // |
| 164 | // This method is intended to fix broken loaders after a Network Service |
| 165 | // crash, and is only used when Network Service is enabled. |
| 166 | // |
| 167 | // The new bundle contains replacement factories for a subset of the |
| 168 | // receiver's existing bundle. |
| 169 | UpdateSubresourceLoaderFactories( |
Hiroki Nakagawa | 75375834 | 2018-12-27 04:13:49 | [diff] [blame] | 170 | blink.mojom.URLLoaderFactoryBundle subresource_loader_factories); |
Dmitry Gozman | 6adf95b | 2018-10-10 22:12:19 | [diff] [blame] | 171 | |
| 172 | // Returns a DevToolsAgent interface for this frame, used for |
| 173 | // remote debugging. See DevToolsAgent for details. |
| 174 | // Returned DevToolsAgent must be associated with navigation control, |
| 175 | // due to various ordering dependencies between DevTools protocol and |
| 176 | // navigation. |
| 177 | BindDevToolsAgent(associated blink.mojom.DevToolsAgentHost agent_host, |
| 178 | associated blink.mojom.DevToolsAgent& agent); |
Hajime Hoshi | 35ad74f | 2019-03-07 08:38:05 | [diff] [blame] | 179 | |
| 180 | // Request for the renderer to execute JavaScript in the frame's context. |
| 181 | // |
| 182 | // |javascript| is the string containing the JavaScript to be executed in the |
| 183 | // target frame's context. |
| 184 | // |
Hajime Hoshi | 35ad74f | 2019-03-07 08:38:05 | [diff] [blame] | 185 | // TODO(hajimehoshi): This requires navigate association to keep the message |
| 186 | // order with other navigation-related messages. Fix this and move this to a |
| 187 | // non-navigate-related interface if possible. |
Avi Drissman | 4544828f | 2019-03-11 20:37:32 | [diff] [blame] | 188 | JavaScriptExecuteRequest( |
| 189 | mojo_base.mojom.String16 javascript) => (mojo_base.mojom.Value result); |
Hajime Hoshi | 35ad74f | 2019-03-07 08:38:05 | [diff] [blame] | 190 | |
Avi Drissman | 4544828f | 2019-03-11 20:37:32 | [diff] [blame] | 191 | // ONLY FOR TESTS: Same as above but adds a fake UserGestureIndicator around |
Hajime Hoshi | 35ad74f | 2019-03-07 08:38:05 | [diff] [blame] | 192 | // execution. (crbug.com/408426) |
Avi Drissman | 4544828f | 2019-03-11 20:37:32 | [diff] [blame] | 193 | JavaScriptExecuteRequestForTests( |
| 194 | mojo_base.mojom.String16 javascript, |
| 195 | bool has_user_gesture) |
| 196 | => (mojo_base.mojom.Value result); |
Hajime Hoshi | 35ad74f | 2019-03-07 08:38:05 | [diff] [blame] | 197 | |
| 198 | // Same as JavaScriptExecuteRequest above except the script is run in the |
| 199 | // isolated world specified by the fourth parameter. |
Avi Drissman | 4544828f | 2019-03-11 20:37:32 | [diff] [blame] | 200 | JavaScriptExecuteRequestInIsolatedWorld( |
| 201 | mojo_base.mojom.String16 javascript, |
| 202 | int32 world_id) => (mojo_base.mojom.Value result); |
Yuzu Saijo | aae9170 | 2019-03-13 07:38:05 | [diff] [blame] | 203 | |
| 204 | // Posts a message from a frame in another process to the current renderer. |
| 205 | // |source_routing_id| is the routing ID of the source frame in the source |
| 206 | // process when sent to the browser. The browser replaces it with the routing |
| 207 | // ID of the equivalent frame proxy in the destination process. |
| 208 | // |source_origin| is the origin of the source frame when the message was |
| 209 | // sent, and |target_origin| specifies what the origin of the target frame |
| 210 | // must be for the message to be dispatched. An empty string allows the |
| 211 | // message to be dispatched to any origin. |
| 212 | // |message| is the encoded data, and any extra properties such as |
| 213 | // transferred ports or blobs. |
| 214 | PostMessageEvent(int32 source_routing_id, |
| 215 | mojo_base.mojom.String16 source_origin, |
| 216 | mojo_base.mojom.String16 target_origin, |
| 217 | blink.mojom.TransferableMessage message); |
Lucas Furukawa Gadani | 56dd545 | 2019-03-22 18:23:12 | [diff] [blame] | 218 | |
Adithya Srinivasan | 324086b | 2019-03-26 17:06:58 | [diff] [blame] | 219 | // Forwards message to the portal's main frame. |
Adithya Srinivasan | 274cb1c | 2019-04-04 14:46:00 | [diff] [blame] | 220 | ForwardMessageToPortalHost(blink.mojom.TransferableMessage message, |
Adithya Srinivasan | 324086b | 2019-03-26 17:06:58 | [diff] [blame] | 221 | url.mojom.Origin source_origin, |
| 222 | url.mojom.Origin? target_origin); |
| 223 | |
Lucas Furukawa Gadani | 56dd545 | 2019-03-22 18:23:12 | [diff] [blame] | 224 | // Called on the main frame of a page embedded in a Portal when it is |
| 225 | // activated. The frame has the option to adopt the previous page as a portal |
| 226 | // identified by |portal_token| with the interface |portal|. The activation |
| 227 | // can optionally include a message |data| dispatched with the |
| 228 | // PortalActivateEvent. |
| 229 | OnPortalActivated(mojo_base.mojom.UnguessableToken portal_token, |
| 230 | associated blink.mojom.Portal portal, |
| 231 | blink.mojom.TransferableMessage data); |
Ken Rockot | 4878545 | 2017-10-25 19:33:14 | [diff] [blame] | 232 | }; |
| 233 | |
sammc | 7f6c6a0 | 2017-01-30 00:53:51 | [diff] [blame] | 234 | // Implemented by the frame (e.g. renderer processes). |
| 235 | // Instances of this interface must be associated with (i.e., FIFO with) the |
| 236 | // legacy IPC channel. |
| 237 | interface FrameBindingsControl { |
| 238 | // Used to tell a render frame whether it should expose various bindings |
| 239 | // that allow JS content extended privileges. See BindingsPolicy for valid |
| 240 | // flag values. |
| 241 | AllowBindings(int32 enabled_bindings_flags); |
| 242 | }; |
| 243 | |
ben | 76f52b24 | 2016-06-18 05:42:48 | [diff] [blame] | 244 | // Implemented by a service that provides implementations of the Frame |
| 245 | // interface. (e.g. renderer processes). |
| 246 | interface FrameFactory { |
Balazs Engedy | ba034e7 | 2017-10-27 22:26:28 | [diff] [blame] | 247 | CreateFrame(int32 frame_routing_id, Frame& frame); |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 248 | }; |
| 249 | |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 250 | struct CreateNewWindowParams { |
| 251 | // True if this open request came in the context of a user gesture. |
Mustaq Ahmed | c4cb716 | 2018-06-05 16:28:36 | [diff] [blame] | 252 | // |
| 253 | // TODO(mustaq): We have cases where a user gesture is assumed to be |
| 254 | // there even when it's not the case. See https://crbug.com/843233. |
| 255 | bool mimic_user_gesture; |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 256 | |
| 257 | // Type of window requested. |
| 258 | WindowContainerType window_container_type; |
| 259 | |
| 260 | // The session storage namespace ID this window should use. |
Daniel Murphy | 31bbb8b1 | 2018-02-07 21:44:10 | [diff] [blame] | 261 | string session_storage_namespace_id; |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 262 | |
Daniel Murphy | e3eec92c | 2018-02-23 19:09:15 | [diff] [blame] | 263 | // The session storage namespace ID this window should clone from. |
| 264 | // TODO(dmurph): Remove this once session storage is fully mojo'd, as the |
| 265 | // clone call happens on a different interface. https://crbug.com/716490 |
| 266 | string clone_from_session_storage_namespace_id; |
| 267 | |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 268 | // The name of the resulting frame that should be created (empty if none |
| 269 | // has been specified). UTF8 encoded string. |
| 270 | string frame_name; |
| 271 | |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 272 | // Whether the opener will be suppressed in the new window, in which case |
| 273 | // scripting the new window is not allowed. |
| 274 | bool opener_suppressed; |
| 275 | |
| 276 | // Whether the window should be opened in the foreground, background, etc. |
| 277 | ui.mojom.WindowOpenDisposition disposition; |
| 278 | |
| 279 | // The URL that will be loaded in the new window (empty if none has been |
| 280 | // specified). |
| 281 | url.mojom.Url target_url; |
| 282 | |
| 283 | // The referrer that will be used to load |target_url| (empty if none has |
| 284 | // been specified). |
| 285 | blink.mojom.Referrer referrer; |
| 286 | |
| 287 | // The window features to use for the new window. |
| 288 | blink.mojom.WindowFeatures features; |
| 289 | }; |
| 290 | |
Daniel Cheng | 8bb30c6 | 2017-10-23 20:40:47 | [diff] [blame] | 291 | // Operation result when the renderer asks the browser to create a new window. |
| 292 | enum CreateNewWindowStatus { |
| 293 | // Ignore creation of the new window. This can happen because creation is |
| 294 | // blocked or because the new window should have no opener relationship. |
| 295 | kIgnore, |
| 296 | // Reuse the current window rather than creating a new window. |
| 297 | kReuse, |
| 298 | // Create a new window using the corresponding params in |reply|. |
| 299 | kSuccess, |
| 300 | }; |
| 301 | |
| 302 | // All routing IDs in this struct must be set to a valid routing ID. |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 303 | struct CreateNewWindowReply { |
Daniel Cheng | 8bb30c6 | 2017-10-23 20:40:47 | [diff] [blame] | 304 | // The ID of the view to be created. |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 305 | int32 route_id; |
| 306 | |
| 307 | // The ID of the main frame hosted in the view. |
| 308 | int32 main_frame_route_id; |
| 309 | |
| 310 | // The ID of the widget for the main frame. |
| 311 | int32 main_frame_widget_route_id; |
| 312 | |
Oksana Zhuravlova | 8b88e57 | 2019-01-07 21:54:00 | [diff] [blame] | 313 | DocumentScopedInterfaceBundle main_frame_interface_bundle; |
Balazs Engedy | ba034e7 | 2017-10-27 22:26:28 | [diff] [blame] | 314 | |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 315 | // Duplicated from CreateNewWindowParams because legacy code. |
Daniel Murphy | 31bbb8b1 | 2018-02-07 21:44:10 | [diff] [blame] | 316 | string cloned_session_storage_namespace_id; |
Pavel Feldman | 08beed784 | 2017-10-17 19:18:11 | [diff] [blame] | 317 | |
| 318 | // Used for devtools instrumentation and trace-ability. The token is |
| 319 | // propagated to Blink's LocalFrame and both Blink and content/ |
| 320 | // can tag calls and requests with this instrumentation token in order to |
| 321 | // attribute them to the context frame. |
| 322 | // |devtools_frame_token| is only defined by the browser and is never |
| 323 | // sent back from the renderer in the control calls. |
Oksana Zhuravlova | 34579e91 | 2018-03-23 00:18:49 | [diff] [blame] | 324 | mojo_base.mojom.UnguessableToken devtools_main_frame_token; |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 325 | }; |
| 326 | |
Yutaka Hirano | f7f2f63 | 2017-09-06 10:40:08 | [diff] [blame] | 327 | // An opaque handle that keeps alive the associated render process even after |
| 328 | // the frame is detached. Used by resource requests with "keepalive" specified. |
| 329 | interface KeepAliveHandle {}; |
| 330 | |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 331 | // Implemented by the frame server (i.e. the browser process). For messages that |
| 332 | // must be associated with the IPC channel. |
| 333 | interface FrameHost { |
Daniel Cheng | 8bb30c6 | 2017-10-23 20:40:47 | [diff] [blame] | 334 | // Sent by the renderer to request the browser to create a new window. |reply| |
| 335 | // is only non-null on when status == CreateNewWindowStatus::kSuccess. |
csharrison | 95f01e92 | 2017-04-24 18:52:35 | [diff] [blame] | 336 | [Sync] CreateNewWindow(CreateNewWindowParams params) |
Daniel Cheng | 8bb30c6 | 2017-10-23 20:40:47 | [diff] [blame] | 337 | => (CreateNewWindowStatus status, CreateNewWindowReply? reply); |
Yutaka Hirano | f7f2f63 | 2017-09-06 10:40:08 | [diff] [blame] | 338 | |
Lucas Furukawa Gadani | 9912582 | 2019-01-03 15:41:49 | [diff] [blame] | 339 | // Sent by the renderer process to request the creation of a new portal. |
Lucas Furukawa Gadani | 56dd545 | 2019-03-22 18:23:12 | [diff] [blame] | 340 | // |portal| is the interface to be used for the Portal object. Returns |
Lucas Furukawa Gadani | 9912582 | 2019-01-03 15:41:49 | [diff] [blame] | 341 | // |proxy_routing_id|, which is the routing id of the RenderFrameProxy and |
| 342 | // |portal_token|, which is the unique identifier for the portal. |
Adithya Srinivasan | ca9f7ce | 2019-03-22 13:53:36 | [diff] [blame] | 343 | [Sync] CreatePortal(associated blink.mojom.Portal& portal) |
Lucas Furukawa Gadani | 9912582 | 2019-01-03 15:41:49 | [diff] [blame] | 344 | => (int32 proxy_routing_id, |
| 345 | mojo_base.mojom.UnguessableToken portal_token); |
| 346 | |
Lucas Furukawa Gadani | 56dd545 | 2019-03-22 18:23:12 | [diff] [blame] | 347 | // Requests that this frame adopts the portal identified by |portal_token|. |
| 348 | // Returns |proxy_routing_id|, which is the routing id of the portal's |
| 349 | // RenderFrameProxy. |
| 350 | [Sync] AdoptPortal(mojo_base.mojom.UnguessableToken portal_token) |
| 351 | => (int32 proxy_routing_id); |
| 352 | |
Yutaka Hirano | f7f2f63 | 2017-09-06 10:40:08 | [diff] [blame] | 353 | // Creates and returns a KeepAliveHandle. |
| 354 | IssueKeepAliveHandle(KeepAliveHandle& keep_alive_handle); |
Balazs Engedy | a40712f | 2017-09-15 15:01:11 | [diff] [blame] | 355 | |
| 356 | // Sent by the renderer when a navigation commits in the frame. |
Oksana Zhuravlova | 8b88e57 | 2019-01-07 21:54:00 | [diff] [blame] | 357 | |
| 358 | // If |interface_params| is non-empty, the FrameHost implementation |
| 359 | // must unbind the old InterfaceProvider and DocumentInterfaceBroker |
| 360 | // connections, and drop any interface requests pending on them. |
| 361 | // Then it should bind the appropriate requests and start servicing |
| 362 | // GetInterface messages coming in on these new connections |
Balazs Engedy | 0c8d550b | 2017-12-06 21:30:23 | [diff] [blame] | 363 | // in a security context that is appropriate for the committed navigation. |
| 364 | // |
Oksana Zhuravlova | 8b88e57 | 2019-01-07 21:54:00 | [diff] [blame] | 365 | // The FrameHost implementation must enforce that |interface_params| |
Balazs Engedy | 0c8d550b | 2017-12-06 21:30:23 | [diff] [blame] | 366 | // is set for cross-document navigations. This prevents origin confusion by |
| 367 | // ensuring that interface requests racing with navigation commit will be |
| 368 | // either ignored, or serviced correctly in the security context of the |
| 369 | // document they originated from (based on which InterfaceProvider connection |
Oksana Zhuravlova | 8b88e57 | 2019-01-07 21:54:00 | [diff] [blame] | 370 | // the GetInterface messages arrive on or DocumentInterfaceBroker |
| 371 | // connection the Get<interface> messages arrive on). |
Balazs Engedy | a40712f | 2017-09-15 15:01:11 | [diff] [blame] | 372 | DidCommitProvisionalLoad( |
Balazs Engedy | 0c8d550b | 2017-12-06 21:30:23 | [diff] [blame] | 373 | DidCommitProvisionalLoadParams params, |
Oksana Zhuravlova | 8b88e57 | 2019-01-07 21:54:00 | [diff] [blame] | 374 | DidCommitProvisionalLoadInterfaceParams? interface_params); |
Arthur Hemery | 7b67a97 | 2017-12-01 15:24:49 | [diff] [blame] | 375 | |
Arthur Hemery | 7b0ae49 | 2018-02-05 16:04:45 | [diff] [blame] | 376 | // Sent by the renderer to indicate that a same document navigation |
| 377 | // committed in the renderer process. |
| 378 | DidCommitSameDocumentNavigation( |
| 379 | DidCommitProvisionalLoadParams params); |
| 380 | |
Arthur Hemery | 7b67a97 | 2017-12-01 15:24:49 | [diff] [blame] | 381 | // Sent by the renderer to request a navigation. |
Marijn Kruisselbrink | 07bf59d5 | 2018-04-03 21:50:25 | [diff] [blame] | 382 | // |blob_url_token| should be non-null when this is a navigation to a blob: |
| 383 | // URL. The token will then be used to look up the blob associated with the |
| 384 | // blob URL. Without this by the time the navigation code starts fetching |
| 385 | // the URL the blob URL might no longer be valid. |blob_url_token| is |
| 386 | // not part of BeginNavigationParams because that struct needs to be |
| 387 | // cloneable, and thus can't contain mojo interfaces. |
| 388 | // If an invalid BlobURLToken is passed in, or if the token doesn't match the |
| 389 | // url in |common_params|, the navigation will result in a network error. |
Arthur Hemery | d3011f6 | 2018-05-30 10:38:44 | [diff] [blame] | 390 | // |navigation_client| is passed to the renderer to allow for further control |
| 391 | // of the navigation. Allows for Commit and Cancels/Aborts. It is only valid |
| 392 | // when PerNavigationMojoInterface is enabled. |
| 393 | // TODO(ahemery): |navigation_client| should not be optional. Make it |
| 394 | // mandatory when removing PerNavigationMojoInterface feature flag. |
Arthur Hemery | 7b67a97 | 2017-12-01 15:24:49 | [diff] [blame] | 395 | BeginNavigation( |
| 396 | CommonNavigationParams common_params, |
Marijn Kruisselbrink | 07bf59d5 | 2018-04-03 21:50:25 | [diff] [blame] | 397 | BeginNavigationParams begin_params, |
Arthur Hemery | d3011f6 | 2018-05-30 10:38:44 | [diff] [blame] | 398 | blink.mojom.BlobURLToken? blob_url_token, |
Andy Paicu | c93d3086 | 2018-10-10 15:33:45 | [diff] [blame] | 399 | associated NavigationClient? navigation_client, |
| 400 | blink.mojom.NavigationInitiator? navigation_initiator); |
John Abd-El-Malek | d488264 | 2017-12-04 21:45:19 | [diff] [blame] | 401 | |
| 402 | // Sent when a subresource response has started. |
Jay Civelli | d5904f0 | 2018-03-23 19:43:57 | [diff] [blame] | 403 | // |cert_status| is the bitmask of status info of the SSL certificate. (see |
| 404 | // net/cert/cert_status_flags.h). |
| 405 | SubresourceResponseStarted(url.mojom.Url url, uint32 cert_status); |
| 406 | |
Jay Civelli | 116683f | 2018-03-27 19:56:23 | [diff] [blame] | 407 | // Sent when a resource load finished, successfully or not. |
| 408 | ResourceLoadComplete(ResourceLoadInfo url_load_info); |
Luciano Pacheco | 8def47f | 2017-12-07 06:52:30 | [diff] [blame] | 409 | |
| 410 | // Sent when the frame changes its window.name. |
| 411 | DidChangeName(string name, string unique_name); |
| 412 | |
| 413 | // Sent when the frame starts enforcing an insecure request policy. Sending |
| 414 | // this information in DidCommitProvisionalLoad isn't sufficient; this |
| 415 | // message is needed because, for example, a document can dynamically insert |
| 416 | // a <meta> tag that causes strict mixed content checking to be enforced. |
| 417 | // |
| 418 | // Argument |policy_bitmap| represents blink::WebInsecureRequestPolicy uint8 |
| 419 | // bitfield. |
| 420 | EnforceInsecureRequestPolicy(uint8 policy_bitmap); |
arthursonzogni | 4b62a5cb | 2018-01-17 14:14:26 | [diff] [blame] | 421 | // Elements of |set| are hashes of hosts to upgrade. |
| 422 | EnforceInsecureNavigationsSet(array<uint32> set); |
Luciano Pacheco | 8def47f | 2017-12-07 06:52:30 | [diff] [blame] | 423 | |
| 424 | // Notifies the browser process that HTTP headers which affect the frame |
| 425 | // polices were delivered with the document being loaded into the frame. This |
| 426 | // can be either or both of 'Feature-Policy' or 'Content-Security-Policy' ( |
| 427 | // which can set sandbox flags). |
| 428 | // |
| 429 | // |parsed_header| is a list of an origin whitelist for each feature in the |
| 430 | // policy. |
| 431 | DidSetFramePolicyHeaders( |
| 432 | blink.mojom.WebSandboxFlags sandbox_flags, |
| 433 | array<blink.mojom.ParsedFeaturePolicyDeclaration> parsed_header); |
Austin Tankiang | 10d6483 | 2017-12-20 02:43:55 | [diff] [blame] | 434 | |
| 435 | // If a cross-process navigation was started for the initial history load in |
| 436 | // this subframe, this tries to cancel it to allow a client redirect to happen |
| 437 | // instead. |
| 438 | CancelInitialHistoryLoad(); |
| 439 | |
| 440 | // Change the encoding name of the page in UI when the page has detected |
| 441 | // proper encoding name. Sent for top-level frames. |
| 442 | UpdateEncoding(string encoding_name); |
Lucas Furukawa Gadani | e5d27a36 | 2018-02-13 14:26:02 | [diff] [blame] | 443 | |
Lucas Gadani | 471160f9 | 2018-03-01 03:13:21 | [diff] [blame] | 444 | // The frame's size is replicated in the browser so that the browser can |
| 445 | // correctly set the initial size of the frame in case of a cross-process |
| 446 | // navigation. |
| 447 | FrameSizeChanged(gfx.mojom.Size size); |
Becca Hughes | fd5d8f89 | 2018-06-14 18:23:36 | [diff] [blame] | 448 | |
| 449 | // Notifies the browser that the current frame has either become or is no |
| 450 | // longer fullscreen. |
| 451 | FullscreenStateChanged(bool is_fullscreen); |
Clark DuVall | a0e4299 | 2018-09-17 17:00:11 | [diff] [blame] | 452 | |
Dave Tapuska | d6703f91 | 2019-01-31 23:13:11 | [diff] [blame] | 453 | // Notifies the browser that the current frame has changed its visibility |
| 454 | // status. |
| 455 | VisibilityChanged(blink.mojom.FrameVisibility visibility); |
| 456 | |
Clark DuVall | a0e4299 | 2018-09-17 17:00:11 | [diff] [blame] | 457 | // Updates information to determine whether a user gesture should carryover to |
| 458 | // future navigations. This is needed so navigations within a certain |
| 459 | // timeframe of a request initiated by a gesture will be treated as if they |
| 460 | // were initiated by a gesture too, otherwise the navigation may be blocked. |
| 461 | [EnableIf=is_android] |
| 462 | UpdateUserGestureCarryoverInfo(); |
Lowell Manners | 9499addc | 2019-03-12 11:05:32 | [diff] [blame] | 463 | |
| 464 | // Sent after the onload handler has been invoked for the document |
| 465 | // in this frame. Sent for top-level frames. |
| 466 | DocumentOnLoadCompleted(); |
Alexander Timin | 50be449 | 2019-04-17 23:07:59 | [diff] [blame^] | 467 | |
| 468 | // Sent by the blink's FrameScheduler when a list of active features |
| 469 | // the scheduler tracks changes. |
| 470 | // See blink::scheduler::SchedulingPolicy::Feature for the meaning |
| 471 | // of the individual bits. |
| 472 | // TODO(altimin): Move into a separate scheduling interface. |
| 473 | UpdateActiveSchedulerTrackedFeatures(uint64 features_mask); |
ben | 76f52b24 | 2016-06-18 05:42:48 | [diff] [blame] | 474 | }; |