910e62b5创建于 1月15日历史提交
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_CONTENT_CAPTURE_COMMON_CONTENT_CAPTURE_DATA_H_
#define COMPONENTS_CONTENT_CAPTURE_COMMON_CONTENT_CAPTURE_DATA_H_

#include <string>
#include <vector>

#include "ui/gfx/geometry/rect_f.h"

namespace content_capture {

// This struct defines the on-screen text content and its bounds in a frame,
// the text is captured in renderer and sent to browser; the root of
// this tree is frame, the child could be the scrollable area or the text
// content, scrollable area can have scrollable area or text as child. Text
// cannot have any child.
//
// ContentCapture render side only uses ContentCaptureData tree, after it is
// sent to browser side, it is converted to ContentCaptureFrame.
//
// There is no ContentCaptureDataBase.java peer in c++ because
// ContentCaptureData is used in mojom, otherwise, the ContentCaptureDataBase
// must be part of mojom interface.
struct ContentCaptureData {
  ContentCaptureData();
  ContentCaptureData(const ContentCaptureData& data);
  ~ContentCaptureData();

  friend bool operator==(const ContentCaptureData&,
                         const ContentCaptureData&) = default;

  // The id of the frame or the content,
  // For frame, this will be 0 until ContentCaptureReceiver assigns a unique ID.
  int64_t id = 0;
  // The url of frame or the text of the content.
  // For frame, this is the URL of the frame.
  // For scrollable area, this is not used.
  // For text, this is the text value.
  std::u16string value;
  // The bounds of the frame or the content.
  gfx::Rect bounds;
  // The children content, only available for frame or scrollable area.
  std::vector<ContentCaptureData> children;
};

}  // namespace content_capture

#endif  // COMPONENTS_CONTENT_CAPTURE_COMMON_CONTENT_CAPTURE_DATA_H_