// Copyright 2024 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/services/pdf/pdf_searchifier.h"
#include <utility>
#include "base/functional/bind.h"
#include "chrome/services/pdf/public/mojom/pdf_searchifier.mojom.h"
#include "chrome/services/pdf/public/mojom/pdf_service.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "pdf/pdf.h"
#include "services/screen_ai/public/mojom/screen_ai_service.mojom.h"
#include "third_party/skia/include/core/SkBitmap.h"
namespace pdf {
PdfSearchifier::PdfSearchifier(mojo::PendingRemote<mojom::Ocr> ocr)
: ocr_remote_(std::move(ocr)) {}
PdfSearchifier::~PdfSearchifier() = default;
void PdfSearchifier::Searchify(const std::vector<uint8_t>& pdf,
SearchifyCallback searchified_callback) {
// `base::Unretained(this)` is used because the return type is not void. It's
// safe since `PdfSearchifier` will outlive the entire `chrome_pdf::Searchify`
// work.
auto perform_ocr_callback =
base::BindRepeating(&PdfSearchifier::PerformOcr, base::Unretained(this));
std::vector<uint8_t> searchified_pdf =
chrome_pdf::Searchify(pdf, std::move(perform_ocr_callback));
std::move(searchified_callback).Run(std::move(searchified_pdf));
}
screen_ai::mojom::VisualAnnotationPtr PdfSearchifier::PerformOcr(
const SkBitmap& bitmap) {
screen_ai::mojom::VisualAnnotationPtr annotation;
ocr_remote_->PerformOcr(bitmap, &annotation);
return annotation;
}
} // namespace pdf