chromium/ios/web/public/ui/context_menu_params.h

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_WEB_PUBLIC_UI_CONTEXT_MENU_PARAMS_H_
#define IOS_WEB_PUBLIC_UI_CONTEXT_MENU_PARAMS_H_

#import <UIKit/UIKit.h>


#include "ios/web/public/navigation/referrer.h"
#include "url/gurl.h"

namespace web {

// Wraps information needed to show a context menu.
struct ContextMenuParams {
 public:
  ContextMenuParams();

  ContextMenuParams(const ContextMenuParams& other);
  ContextMenuParams& operator=(const ContextMenuParams& other);

  ContextMenuParams(ContextMenuParams&& other);
  ContextMenuParams& operator=(ContextMenuParams&& other);

  ~ContextMenuParams();

  // Whether or not the context menu was triggered from the main frame.
  bool is_main_frame;

  // The tagName of the element, is also defined when the element is not a link.
  NSString* tag_name;

  // The URL of the link that encloses the node the context menu was invoked on.
  GURL link_url;

  // The source URL of the element the context menu was invoked on. Example of
  // elements with source URLs are img, audio, and video.
  GURL src_url;

  // The referrer policy to use when opening the link.
  web::ReferrerPolicy referrer_policy;

  // The view in which to present the menu.
  UIView* view;

  // The location in `view` to present the menu.
  CGPoint location;

  // The text associated with the link or text element. It is either nil or
  // nonempty (it can not be empty).
  NSString* text;

  // The text associated with the selected character after a long press.
  NSString* surrounding_text;

  // The text for the "title" attribute of the HTML element. Can be null.
  NSString* title_attribute;

  // The text for the "alt" attribute of an HTML img element. Can be null.
  NSString* alt_text;

  // The offset in text where the tap occurs. Can be null = 0.
  double text_offset;

  // The offset in surrounding_text where the long press occurs. Can be 0.
  double surrounding_text_offset;
};

}  // namespace web

#endif  // IOS_WEB_PUBLIC_UI_CONTEXT_MENU_PARAMS_H_