// 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 "ipc/ipc.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";
import "ui/gfx/mojo/icc_profile.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.
  int32 main_frame_routing_id = IPC.mojom.kRoutingIdNone;

  // 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.
  int64 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;

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

  // The initial renderer size.
  ResizeParams initial_size;

  // Whether to enable auto-resize.
  bool enable_auto_resize;

  // The minimum size to layout the page if auto-resize is enabled.
  gfx.mojom.Size min_size;

  // The maximum size to layout the page if auto-resize is enabled.
  gfx.mojom.Size max_size;

  // The page zoom level.
  double page_zoom_level;

  // The ICC profile of the output color space to use for image decode.
  gfx.mojom.ICCProfile image_decode_color_space;
};

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;

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

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

struct UpdateScrollbarThemeParams {
  float initial_button_delay;
  float autoscroll_button_delay;
  bool jump_on_track_click;
  ScrollerStyle preferred_scroller_style;
  bool redraw;
  ScrollbarButtonsPlacement button_placement;
};

// 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 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.
  CreateFrameProxy(int32 routing_id, int32 render_view_routing_id,
                   int32 opener_routing_id, int32 parent_routing_id,
                   FrameReplicationState replication_state);

  // 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 to suspend/resume the webkit timers. Only for use on
  // Android.
  SetWebKitSharedTimersSuspended(bool suspend);

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