| // 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 <stdint.h> |
| |
| #include <utility> |
| #include <vector> |
| |
| #include "base/files/file_path.h" |
| #include "base/files/file_util.h" |
| #include "base/path_service.h" |
| #include "base/run_loop.h" |
| #include "base/test/bind.h" |
| #include "base/test/task_environment.h" |
| #include "chrome/common/chrome_paths.h" |
| #include "chrome/services/pdf/pdf_searchifier.h" |
| #include "chrome/services/pdf/public/mojom/pdf_service.mojom.h" |
| #include "mojo/public/cpp/bindings/receiver.h" |
| #include "services/screen_ai/public/mojom/screen_ai_service.mojom.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/skia/include/core/SkBitmap.h" |
| |
| namespace pdf { |
| |
| namespace { |
| |
| class Ocr : public mojom::Ocr { |
| public: |
| mojo::PendingRemote<mojom::Ocr> CreateRemote() { |
| return receiver_.BindNewPipeAndPassRemote(); |
| } |
| |
| // mojom::Ocr |
| void PerformOcr( |
| const SkBitmap& image, |
| mojom::Ocr::PerformOcrCallback got_annotation_callback) override { |
| std::move(got_annotation_callback) |
| .Run(screen_ai::mojom::VisualAnnotation::New()); |
| } |
| |
| private: |
| mojo::Receiver<mojom::Ocr> receiver_{this}; |
| }; |
| |
| } // namespace |
| |
| class PdfSearchifierTest : public testing::Test { |
| public: |
| void SetUp() override { |
| base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_); |
| test_data_dir_ = |
| test_data_dir_.AppendASCII("pdf").AppendASCII("accessibility"); |
| } |
| |
| base::test::SingleThreadTaskEnvironment task_environment_; |
| Ocr ocr_; |
| PdfSearchifier searchifier_{ocr_.CreateRemote()}; |
| base::FilePath test_data_dir_; |
| }; |
| |
| // A valid PDF with images should run successfully. |
| TEST_F(PdfSearchifierTest, Searchify) { |
| auto pdf = |
| base::ReadFileToBytes(test_data_dir_.AppendASCII("image_alt_text.pdf")); |
| ASSERT_TRUE(pdf.has_value()); |
| base::RunLoop run_loop; |
| std::vector<uint8_t> result_pdf; |
| searchifier_.Searchify( |
| *pdf, base::BindLambdaForTesting([&](const std::vector<uint8_t>& result) { |
| result_pdf = std::move(result); |
| run_loop.Quit(); |
| })); |
| run_loop.Run(); |
| EXPECT_FALSE(result_pdf.empty()); |
| } |
| |
| } // namespace pdf |