• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  
5  #include "fpdfsdk/cpdfsdk_annotiterator.h"
6  #include "fpdfsdk/cpdfsdk_baannothandler.h"
7  #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
8  #include "fpdfsdk/cpdfsdk_helpers.h"
9  #include "fpdfsdk/cpdfsdk_pageview.h"
10  #include "public/fpdf_annot.h"
11  #include "testing/embedder_test.h"
12  
13  class CPDFSDK_BAAnnotHandlerTest : public EmbedderTest {
14   public:
SetUp()15    void SetUp() override {
16      // Test behaviour with currently supported annot i.e. Widget.
17      // TODO(crbug.com/994500): Add an API that can set list of focusable
18      // subtypes once other annots(links & highlights) are also supported.
19      EmbedderTest::SetUp();
20      SetUpBAAnnotHandler();
21    }
22  
TearDown()23    void TearDown() override {
24      UnloadPage(m_page);
25      EmbedderTest::TearDown();
26    }
27  
SetUpBAAnnotHandler()28    void SetUpBAAnnotHandler() {
29      EXPECT_TRUE(OpenDocument("links_highlights_annots.pdf"));
30      m_page = LoadPage(0);
31      ASSERT_TRUE(m_page);
32  
33      CPDFSDK_FormFillEnvironment* pFormFillEnv =
34          CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle());
35      ASSERT_TRUE(pFormFillEnv);
36      m_pPageView = pFormFillEnv->GetPageView(IPDFPageFromFPDFPage(m_page), true);
37      ASSERT_TRUE(m_pPageView);
38  
39      CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr =
40          pFormFillEnv->GetAnnotHandlerMgr();
41      ASSERT_TRUE(pAnnotHandlerMgr);
42      m_pBAAnnotHandler = pAnnotHandlerMgr->m_pBAAnnotHandler.get();
43      ASSERT_TRUE(m_pBAAnnotHandler);
44    }
45  
GetPageView() const46    CPDFSDK_PageView* GetPageView() const { return m_pPageView; }
GetBAAnnotHandler() const47    CPDFSDK_BAAnnotHandler* GetBAAnnotHandler() const {
48      return m_pBAAnnotHandler;
49    }
50  
51   private:
52    FPDF_PAGE m_page = nullptr;
53    CPDFSDK_PageView* m_pPageView = nullptr;
54    CPDFSDK_BAAnnotHandler* m_pBAAnnotHandler = nullptr;
55  };
56  
TEST_F(CPDFSDK_BAAnnotHandlerTest,TabToLinkOrHighlightAnnot)57  TEST_F(CPDFSDK_BAAnnotHandlerTest, TabToLinkOrHighlightAnnot) {
58    // TODO(crbug.com/994500): Create annot iterator with list of supported
59    // focusable subtypes as provided by host.
60    CPDFSDK_AnnotIterator ai(GetPageView(), CPDF_Annot::Subtype::LINK);
61    CPDFSDK_Annot* pAnnot = ai.GetFirstAnnot();
62    ASSERT_TRUE(pAnnot);
63    EXPECT_EQ(pAnnot->GetAnnotSubtype(), CPDF_Annot::Subtype::LINK);
64  
65    ObservedPtr<CPDFSDK_Annot> pNonWidgetAnnot(pAnnot);
66  
67    // TODO(crbug.com/994500): Change expected value as true once
68    // links & highlights are supported.
69    EXPECT_FALSE(GetBAAnnotHandler()->OnSetFocus(&pNonWidgetAnnot, 0));
70  
71    EXPECT_FALSE(GetBAAnnotHandler()->OnKillFocus(&pNonWidgetAnnot, 0));
72  }
73  
TEST_F(CPDFSDK_BAAnnotHandlerTest,TabToInvalidAnnot)74  TEST_F(CPDFSDK_BAAnnotHandlerTest, TabToInvalidAnnot) {
75    // TODO(crbug.com/994500): Create annot iterator with list of supported
76    // focusable subtypes as provided by host.
77    CPDFSDK_AnnotIterator ai(GetPageView(), CPDF_Annot::Subtype::WIDGET);
78    CPDFSDK_Annot* pAnnot = ai.GetFirstAnnot();
79    ASSERT_TRUE(pAnnot);
80    EXPECT_EQ(pAnnot->GetAnnotSubtype(), CPDF_Annot::Subtype::WIDGET);
81  
82    ObservedPtr<CPDFSDK_Annot> pWidgetAnnot(pAnnot);
83  
84    // Passing wrong subtype to BAAnnotHandler, API should return false.
85    EXPECT_FALSE(GetBAAnnotHandler()->OnSetFocus(&pWidgetAnnot, 0));
86  
87    EXPECT_FALSE(GetBAAnnotHandler()->OnKillFocus(&pWidgetAnnot, 0));
88  }
89