// 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/native_types.mojom"; import "content/common/service_worker/embedded_worker.mojom"; import "ipc/constants.mojom"; import "mojo/public/mojom/base/time.mojom"; import "mojo/public/mojom/base/unguessable_token.mojom"; import "services/network/public/mojom/network_types.mojom"; import "services/service_manager/public/mojom/interface_provider.mojom"; import "services/service_manager/public/mojom/service.mojom"; import "ui/gfx/geometry/mojo/geometry.mojom"; struct CreateViewParams { // Renderer-wide preferences. RendererPreferences renderer_preferences; // Preferences for this view. WebPreferences web_preferences; // The ID of the view to be created. int32 view_id = IPC.mojom.kRoutingIdNone; // The ID of the main frame hosted in the view, or None if creating a view to // host a main frame proxy. int32 main_frame_routing_id = IPC.mojom.kRoutingIdNone; // The InterfaceProvider through which the main RenderFrame can access // services exposed by its RenderFrameHost. // // This is null precisely when |main_frame_routing_id| is MSG_ROUTING_NONE, // that is, when creating a RenderView for a remote main frame. service_manager.mojom.InterfaceProvider? main_frame_interface_provider; // The ID of the widget for the main frame. int32 main_frame_widget_routing_id = IPC.mojom.kRoutingIdNone; // The session storage namespace ID this view should use. string session_storage_namespace_id; // The route ID of the opener RenderFrame or RenderFrameProxy, if we need to // set one (MSG_ROUTING_NONE otherwise). int32 opener_frame_route_id = IPC.mojom.kRoutingIdNone; // Whether the RenderView should initially be swapped out. bool swapped_out; // Carries replicated information, such as frame name and sandbox flags, for // this view's main frame, which will be a proxy in |swapped_out| // views when in --site-per-process mode, or a RenderFrame in all other // cases. FrameReplicationState replicated_frame_state; // Used for devtools instrumentation and trace-ability. The token is // propagated to Blink's LocalFrame and both Blink and content/ // can tag calls and requests with this instrumentation token in order to // attribute them to the context frame. // |devtools_main_frame_token| is only defined by the browser and is never // sent back from the renderer in the control calls. mojo_base.mojom.UnguessableToken devtools_main_frame_token; // The ID of the proxy object for the main frame in this view. It is only // used if |swapped_out| is true. int32 proxy_routing_id = IPC.mojom.kRoutingIdNone; // Whether the RenderView should initially be hidden. bool hidden; // Whether the RenderView will never be visible. bool never_visible; // Whether the window associated with this view was created with an opener. bool window_was_created_with_opener; // Whether or not the frame has previously committed a real load. bool has_committed_real_load; // The initial renderer size. VisualProperties visual_properties; // Whether lookup of frames in the created RenderView (e.g. lookup via // window.open or via ) should be renderer-wide (i.e. going // beyond the usual opener-relationship-based BrowsingInstance boundaries). bool renderer_wide_named_frame_lookup; }; struct CreateFrameWidgetParams { // Gives the routing ID for the RenderWidget that will be attached to the // new RenderFrame. If the RenderFrame does not need a RenderWidget, this // is MSG_ROUTING_NONE and the other parameters are not read. int32 routing_id; // Tells the new RenderWidget whether it is initially hidden. bool hidden; }; struct CreateFrameParams { // Specifies the routing ID of the new RenderFrame object. int32 routing_id; // If a valid |proxy_routing_id| is provided, the new frame will be // configured to replace the proxy on commit. int32 proxy_routing_id; // Specifies the new frame's opener. The opener will be null if this is // MSG_ROUTING_NONE. int32 opener_routing_id; // The new frame should be created as a child of the object // identified by |parent_routing_id| or as top level if that is // MSG_ROUTING_NONE. int32 parent_routing_id; // Identifies the previous sibling of the new frame, so that the new frame is // inserted into the correct place in the frame tree. If this is // MSG_ROUTING_NONE, the frame will be created as the leftmost child of its // parent frame, in front of any other children. int32 previous_sibling_routing_id; // The InterfaceProvider through which the RenderFrame can access services // exposed by its RenderFrameHost. service_manager.mojom.InterfaceProvider interface_provider; // When the new frame has a parent, |replication_state| holds the new frame's // properties replicated from the process rendering the parent frame, such as // the new frame's sandbox flags. FrameReplicationState replication_state; // Used for devtools instrumentation and trace-ability. The token is // propagated to Blink's LocalFrame and both Blink and content/ // can tag calls and requests with this instrumentation token in order to // attribute them to the context frame. // |devtools_frame_token| is only defined by the browser and is never // sent back from the renderer in the control calls. mojo_base.mojom.UnguessableToken devtools_frame_token; // When the new frame has a parent, |frame_owner_properties| holds the // properties of the HTMLFrameOwnerElement from the parent process. // Note that unlike FrameReplicationState, this is not replicated for remote // frames. FrameOwnerProperties frame_owner_properties; // Specifies properties for a new RenderWidget that will be attached to the // new RenderFrame (if one is needed). CreateFrameWidgetParams widget_params; // Whether or not the frame has previously committed a real load. bool has_committed_real_load; }; struct UpdateScrollbarThemeParams { float initial_button_delay; float autoscroll_button_delay; bool jump_on_track_click; ScrollerStyle preferred_scroller_style; bool redraw; ScrollbarButtonsPlacement button_placement; bool scroll_view_rubber_banding; }; // 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 ask its embedder to bind |service_request| to an // embedder-provided renderer-side service implementation. This is required to // ensure that embedder-provided renderer-side service is initialized at the // appropriate time. CreateEmbedderRendererService(service_manager.mojom.Service& service_request); // Tells the renderer to create a new view. CreateView(CreateViewParams params); // Tells the renderer to create a new RenderFrame. CreateFrame(CreateFrameParams params); // Tells the renderer to create a new RenderFrameProxy object with // |routing_id|. |render_view_routing_id| identifies the // RenderView to be associated with this proxy. The new proxy's opener should // be set to the object identified by |opener_routing_id|, or to null if that // is MSG_ROUTING_NONE. The new proxy should be created as a child of the // object identified by |parent_routing_id| or as top level if that is // MSG_ROUTING_NONE. // |devtools_frame_token| is used for devtools instrumentation // and trace-ability. It is defined by the browser and is never // sent back from the renderer in the control calls. CreateFrameProxy(int32 routing_id, int32 render_view_routing_id, int32 opener_routing_id, int32 parent_routing_id, FrameReplicationState replication_state, mojo_base.mojom.UnguessableToken devtools_frame_token); // Tells the renderer to create an EmbeddedWorkerInstanceClient, which is what // manages service worker startup and shutdown. // TODO(shimazu): Send all params for starting service worker to reduce the // number of IPCs. SetUpEmbeddedWorkerChannelForServiceWorker( EmbeddedWorkerInstanceClient& client_request); // 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); // 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 to empty its plugin list cache, optional reloading // pages containing plugins. PurgePluginListCache(bool reload_pages); // Tells the renderer process to enter or leave background mode. SetProcessBackgrounded(bool background); // 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 to purge and suspend. ProcessPurgeAndSuspend(); // 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(); // Tells the renderer to enable V8's memory saving mode when possible. // This is only used when site-per-process is enabled. If the process // only contains subframes, V8's low memory mode will be enabled. // If a main frame exists or is created, the low memory mode will // be disabled. EnableV8LowMemoryMode(); };