// Copyright 2018 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 remote_cocoa.mojom;

import "content/public/common/drop_data.mojom";
import "mojo/public/mojom/base/file_path.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
import "ui/gfx/image/mojom/image.mojom";
import "url/mojom/url.mojom";

// Interface through which a WebContentsViewMac communicates with its NSView in
// another process.
interface WebContentsNSView {
  // Set this to be a child NSView of the NSView mapped to by
  // |parent_ns_view_id|.
  SetParentNSView(uint64 parent_ns_view_id);

  // Clear the parent NSView and related state.
  ResetParentNSView();

  // Set the NSView's frame in its NSWindow to |bounds_in_window|.
  SetBounds(gfx.mojom.Rect bounds_in_window);

  // Short or hide the NSView.
  SetVisible(bool visible);

  // Make the NSView be the first responder for its window.
  MakeFirstResponder();

  // Called when a subview asks this to take focus back (e.g, because it has
  // iterated past the last or first focusable element on the page). The
  // iteration direction is in |reverse|.
  TakeFocus(bool reverse);

  // Initiate a drag from the web contents area.
  StartDrag(content.mojom.DropData drop_data,
            uint32 operation_mask,
            gfx.mojom.ImageSkia? image,
            gfx.mojom.Vector2d image_offset);
};

// The method through which a window was focused (directly focused, or by
// iterating through NSViews).
enum SelectionDirection {
  // The selection was not made through iteration.
  kDirect,
  // The selection is made by iterating to the next valid selection.
  kForward,
  // The selection is made by iterating to the previous valid selection.
  kReverse,
};

// The visibility of the window embedding a web contents NSView.
enum Visibility {
  // The view is part of a window that may be visible.
  kVisible,
  // The view is part of a window that is fully occluded.
  kOccluded,
  // The view is not part of any window or is part of a hidden window.
  kHidden,
};

// The data extracted from an NSDraggingInfo at draggingEntered,
// draggingUpdated, and performDragOperation.
struct DraggingInfo {
  // The dragging location in the NSView, with the origin in the upper-left.
  gfx.mojom.PointF location_in_view;

  // The dragging location in the NSScreen, with the origin in the upper-left.
  gfx.mojom.PointF location_in_screen;

  // The URL data from the drag, if any. Note that this is redundant in that it
  // is already present in DropData. It is here because it is used by methods
  // that don't use DropData.
  url.mojom.Url? url;

  // The operation mask.
  uint32 operation_mask;
};

// Interface through which the NSView in another process communicates with its
// owning WebContentsViewMac. This interface has no methods yet, but is included
// for symmetry and future use.
interface WebContentsNSViewHost {
  // Notification that there was a mouse event, along with the type of event.
  // If |motion| is true, this is a normal motion event. If |exited| is true,
  // the pointer left the contents area.
  OnMouseEvent(bool motion, bool exited);

  // Called when the NSView becomes first responder, with |direction| set to
  // indicate iteration direction (if any).
  OnBecameFirstResponder(SelectionDirection direction);

  // Called when the window displaying the web contents becomes visible, hidden,
  // or occluded.
  OnWindowVisibilityChanged(Visibility visibility);

  // Transmit the data that is being dropped on the NSView. This is called prior
  // to DraggingEntered.
  SetDropData(content.mojom.DropData drop_data);

  // Called in response to the -[NSDraggingDestination draggingEntered] method
  // being called on the NSView. Returns the resulting operation in |result|.
  [Sync]
  DraggingEntered(DraggingInfo dragging_info) => (uint32 result);

  // Called in response to the -[NSDraggingDestination draggingExited] method.
  DraggingExited();

  // Called in response to the -[NSDraggingDestination draggingUpdated] method
  // being called on the NSView. Returns the resulting operation in |result|.
  [Sync]
  DraggingUpdated(DraggingInfo dragging_info) => (uint32 result);

  // Called in response to the -[NSDraggingDestination performDragOperation:]
  // method being called on the NSView. Returns the result of the operation in
  // |result|.
  [Sync]
  PerformDragOperation(DraggingInfo dragging_info) => (bool result);

  // Called in response to the -namesOfPromisedFilesDroppedAtDestination method
  // being called on the NSView. The |file_path| input argument is the
  // requested destination file, and the output |file_path| is the actual
  // destination file.
  [Sync]
  DragPromisedFileTo(mojo_base.mojom.FilePath file_path,
                     content.mojom.DropData drop_data,
                     url.mojom.Url download_url) =>
                         (mojo_base.mojom.FilePath file_path);

  // Called in to the -draggedImage: method being called on the NSView.
  EndDrag(uint32 drag_operation,
          gfx.mojom.PointF local_point,
          gfx.mojom.PointF screen_point);
};

