blob: 364c5ef103486b260f65d7155fcd18ee4e12104a [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_COMPANION_TEXT_FINDER_TEXT_HIGHLIGHTER_H_
#define CHROME_BROWSER_COMPANION_TEXT_FINDER_TEXT_HIGHLIGHTER_H_
#include <string>
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/annotation/annotation.mojom.h"
#include "ui/gfx/geometry/rect.h"
namespace companion {
namespace internal {
// Class for highlighting and scrolling-to texts on the current page via the
// annotation agent in the renderer process.
class TextHighlighter : public blink::mojom::AnnotationAgentHost {
public:
TextHighlighter(const std::string& text_directive,
const mojo::Remote<blink::mojom::AnnotationAgentContainer>&
agent_container);
~TextHighlighter() override;
TextHighlighter(const TextHighlighter&) = delete;
TextHighlighter& operator=(const TextHighlighter&) = delete;
// blink::mojom::AnnotationAgentHost implementation.
// Called when the annotation agent finishes finding the text.
// Scrolls to the highlighted text via the mojo method of the agent.
void DidFinishAttachment(
const gfx::Rect& rect,
blink::mojom::AttachmentResult attachment_result) override;
const std::string& GetTextDirective() const { return text_directive_; }
private:
// Creates an annotation agent for text search and highlighting, and sets up
// the Mojo connection with the renderer process. The annotation agent
// performs the search and calls `DidFinishAttachment`. This method should
// only be called once during initialization.
void InitializeAndBindToAnnotationAgent(
const mojo::Remote<blink::mojom::AnnotationAgentContainer>&
agent_container);
// Text directive to search for, in the format of "prefix-,start,end,suffix-".
// Ref: https://wicg.github.io/scroll-to-text-fragment/#syntax.
const std::string text_directive_;
// Receiver and agent for communication with the renderer process.
mojo::Receiver<blink::mojom::AnnotationAgentHost> receiver_;
mojo::Remote<blink::mojom::AnnotationAgent> agent_;
};
} // namespace internal
} // namespace companion
#endif // CHROME_BROWSER_COMPANION_TEXT_FINDER_TEXT_HIGHLIGHTER_H_