blob: bf270ba6e874283f6f88a8afce0c5fefb67db5fc [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.
#include "chrome/browser/companion/text_finder/text_highlighter_manager.h"
#include <memory>
#include "base/barrier_callback.h"
#include "base/functional/bind.h"
#include "base/unguessable_token.h"
#include "chrome/browser/companion/text_finder/text_highlighter.h"
#include "content/public/browser/page.h"
#include "content/public/browser/page_user_data.h"
#include "content/public/browser/render_frame_host.h"
#include "services/service_manager/public/cpp/interface_provider.h"
namespace companion {
using internal::TextHighlighter;
TextHighlighterManager::TextHighlighterManager(content::Page& page)
: PageUserData<TextHighlighterManager>(page) {
content::RenderFrameHost& frame = page.GetMainDocument();
frame.GetRemoteInterfaces()->GetInterface(
agent_container_.BindNewPipeAndPassReceiver());
}
TextHighlighterManager::~TextHighlighterManager() = default;
void TextHighlighterManager::CreateTextHighlighterAndRemoveExistingInstance(
const std::string& text_directive) {
CreateTextHighlightersAndRemoveExisting({text_directive});
}
void TextHighlighterManager::CreateTextHighlightersAndRemoveExisting(
const std::vector<std::string>& text_directives) {
for (auto& highlighter : highlighters_) {
highlighter.reset();
}
highlighters_.clear();
for (auto& directive : text_directives) {
highlighters_.push_back(
std::make_unique<TextHighlighter>(directive, agent_container_));
}
}
PAGE_USER_DATA_KEY_IMPL(TextHighlighterManager);
} // namespace companion