Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 1 | // Copyright 2019 The PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 5 | #include <vector> |
| 6 | |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 7 | #include "fpdfsdk/cpdfsdk_annotiterator.h" |
Lei Zhang | 2014328 | 2022-04-08 21:16:52 +0000 | [diff] [blame^] | 8 | #include "fpdfsdk/cpdfsdk_baannot.h" |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 9 | #include "fpdfsdk/cpdfsdk_formfillenvironment.h" |
| 10 | #include "fpdfsdk/cpdfsdk_helpers.h" |
| 11 | #include "fpdfsdk/cpdfsdk_pageview.h" |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 12 | #include "testing/embedder_test.h" |
Tom Sepez | 9c78c0d | 2021-01-27 20:13:14 +0000 | [diff] [blame] | 13 | #include "third_party/base/check.h" |
Lei Zhang | ce72574 | 2020-10-02 02:02:44 +0000 | [diff] [blame] | 14 | #include "third_party/base/check_op.h" |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 15 | |
Lei Zhang | 2014328 | 2022-04-08 21:16:52 +0000 | [diff] [blame^] | 16 | class CPDFSDK_BAAnnotTest : public EmbedderTest { |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 17 | public: |
| 18 | void SetUp() override { |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 19 | EmbedderTest::SetUp(); |
Lei Zhang | 2014328 | 2022-04-08 21:16:52 +0000 | [diff] [blame^] | 20 | SetUpBAAnnot(); |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 21 | } |
| 22 | |
| 23 | void TearDown() override { |
| 24 | UnloadPage(m_page); |
| 25 | EmbedderTest::TearDown(); |
| 26 | } |
| 27 | |
Lei Zhang | 2014328 | 2022-04-08 21:16:52 +0000 | [diff] [blame^] | 28 | void SetUpBAAnnot() { |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 29 | ASSERT_TRUE(OpenDocument("links_highlights_annots.pdf")); |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 30 | m_page = LoadPage(0); |
| 31 | ASSERT_TRUE(m_page); |
| 32 | |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 33 | m_pFormFillEnv = |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 34 | CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle()); |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 35 | ASSERT_TRUE(m_pFormFillEnv); |
| 36 | m_pPageView = |
Tom Sepez | cee8fbd | 2021-06-04 19:21:40 +0000 | [diff] [blame] | 37 | m_pFormFillEnv->GetOrCreatePageView(IPDFPageFromFPDFPage(m_page)); |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 38 | ASSERT_TRUE(m_pPageView); |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 39 | } |
| 40 | |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 41 | CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { return m_pFormFillEnv; } |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 42 | CPDFSDK_PageView* GetPageView() const { return m_pPageView; } |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 43 | |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 44 | CPDFSDK_Annot* GetNthFocusableAnnot(size_t n) { |
| 45 | DCHECK_NE(n, 0); |
| 46 | CPDFSDK_AnnotIterator ai(GetPageView(), |
| 47 | m_pFormFillEnv->GetFocusableAnnotSubtypes()); |
| 48 | CPDFSDK_Annot* pAnnot = ai.GetFirstAnnot(); |
Tom Sepez | 9c78c0d | 2021-01-27 20:13:14 +0000 | [diff] [blame] | 49 | DCHECK(pAnnot); |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 50 | |
| 51 | for (size_t i = 1; i < n; i++) { |
| 52 | pAnnot = ai.GetNextAnnot(pAnnot); |
Tom Sepez | 9c78c0d | 2021-01-27 20:13:14 +0000 | [diff] [blame] | 53 | DCHECK(pAnnot); |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 54 | } |
| 55 | |
| 56 | return pAnnot; |
| 57 | } |
| 58 | |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 59 | private: |
| 60 | FPDF_PAGE m_page = nullptr; |
| 61 | CPDFSDK_PageView* m_pPageView = nullptr; |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 62 | CPDFSDK_FormFillEnvironment* m_pFormFillEnv = nullptr; |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 63 | }; |
| 64 | |
Lei Zhang | 2014328 | 2022-04-08 21:16:52 +0000 | [diff] [blame^] | 65 | TEST_F(CPDFSDK_BAAnnotTest, TabToLinkOrHighlightAnnot) { |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 66 | std::vector<CPDF_Annot::Subtype> focusable_annot_types = { |
| 67 | CPDF_Annot::Subtype::WIDGET, CPDF_Annot::Subtype::LINK, |
| 68 | CPDF_Annot::Subtype::HIGHLIGHT}; |
| 69 | |
| 70 | GetFormFillEnv()->SetFocusableAnnotSubtypes(focusable_annot_types); |
| 71 | |
| 72 | // Get link annot. |
| 73 | CPDFSDK_Annot* pAnnot = GetNthFocusableAnnot(2); |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 74 | ASSERT_TRUE(pAnnot); |
| 75 | EXPECT_EQ(pAnnot->GetAnnotSubtype(), CPDF_Annot::Subtype::LINK); |
| 76 | |
Lei Zhang | 2ea512b | 2022-04-08 21:10:01 +0000 | [diff] [blame] | 77 | { |
| 78 | ObservedPtr<CPDFSDK_Annot> observer(pAnnot); |
| 79 | EXPECT_TRUE(CPDFSDK_Annot::OnSetFocus(observer, {})); |
| 80 | EXPECT_TRUE(CPDFSDK_Annot::OnKillFocus(observer, {})); |
| 81 | } |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 82 | |
Badhri Ravikumar | 5540fdb | 2020-04-03 22:34:28 +0000 | [diff] [blame] | 83 | // Get highlight annot. |
| 84 | pAnnot = GetNthFocusableAnnot(4); |
| 85 | ASSERT_TRUE(pAnnot); |
| 86 | EXPECT_EQ(pAnnot->GetAnnotSubtype(), CPDF_Annot::Subtype::HIGHLIGHT); |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 87 | |
Lei Zhang | 2ea512b | 2022-04-08 21:10:01 +0000 | [diff] [blame] | 88 | { |
| 89 | ObservedPtr<CPDFSDK_Annot> observer(pAnnot); |
| 90 | EXPECT_TRUE(CPDFSDK_Annot::OnSetFocus(observer, {})); |
| 91 | EXPECT_TRUE(CPDFSDK_Annot::OnKillFocus(observer, {})); |
| 92 | } |
Neha Gupta | 44f1f20 | 2019-12-11 08:42:19 +0000 | [diff] [blame] | 93 | } |