• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium 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 "base/logging.h"
6 #include "ppapi/c/pp_errors.h"
7 #include "ppapi/c/private/ppb_pdf.h"
8 #include "ppapi/thunk/enter.h"
9 #include "ppapi/thunk/ppb_flash_font_file_api.h"
10 #include "ppapi/thunk/ppb_pdf_api.h"
11 #include "ppapi/thunk/resource_creation_api.h"
12 #include "ppapi/thunk/thunk.h"
13 
14 namespace ppapi {
15 namespace thunk {
16 
17 namespace {
18 
GetLocalizedString(PP_Instance instance,PP_ResourceString string_id)19 PP_Var GetLocalizedString(PP_Instance instance, PP_ResourceString string_id) {
20   EnterInstanceAPI<PPB_PDF_API> enter(instance);
21   if (enter.failed())
22     return PP_MakeUndefined();
23   return enter.functions()->GetLocalizedString(string_id);
24 }
25 
GetResourceImage(PP_Instance instance,PP_ResourceImage image_id)26 PP_Resource GetResourceImage(PP_Instance instance,
27                              PP_ResourceImage image_id) {
28   EnterInstanceAPI<PPB_PDF_API> enter(instance);
29   if (enter.failed())
30     return 0;
31   return enter.functions()->GetResourceImage(image_id);
32 }
33 
GetFontFileWithFallback(PP_Instance instance,const PP_BrowserFont_Trusted_Description * description,PP_PrivateFontCharset charset)34 PP_Resource GetFontFileWithFallback(
35     PP_Instance instance,
36     const PP_BrowserFont_Trusted_Description* description,
37     PP_PrivateFontCharset charset) {
38   // TODO(raymes): Eventually we should replace the use of this function with
39   // either PPB_Flash_Font_File or PPB_TrueType_Font directly in the PDF code.
40   // For now just call into PPB_Flash_Font_File which has the exact same API.
41   EnterResourceCreation enter(instance);
42   if (enter.failed())
43     return 0;
44   return enter.functions()->CreateFlashFontFile(instance, description, charset);
45 }
46 
GetFontTableForPrivateFontFile(PP_Resource font_file,uint32_t table,void * output,uint32_t * output_length)47 bool GetFontTableForPrivateFontFile(PP_Resource font_file,
48                                     uint32_t table,
49                                     void* output,
50                                     uint32_t* output_length) {
51   // TODO(raymes): Eventually we should replace the use of this function with
52   // either PPB_Flash_Font_File or PPB_TrueType_Font directly in the PDF code.
53   // For now just call into PPB_Flash_Font_File which has the exact same API.
54   EnterResource<PPB_Flash_FontFile_API> enter(font_file, true);
55   if (enter.failed())
56     return PP_FALSE;
57   return PP_ToBool(enter.object()->GetFontTable(table, output, output_length));
58 }
59 
SearchString(PP_Instance instance,const unsigned short * string,const unsigned short * term,bool case_sensitive,PP_PrivateFindResult ** results,int * count)60 void SearchString(PP_Instance instance,
61                   const unsigned short* string,
62                   const unsigned short* term,
63                   bool case_sensitive,
64                   PP_PrivateFindResult** results,
65                   int* count) {
66   EnterInstanceAPI<PPB_PDF_API> enter(instance);
67   if (enter.failed())
68     return;
69   enter.functions()->SearchString(string, term, case_sensitive, results, count);
70 }
71 
DidStartLoading(PP_Instance instance)72 void DidStartLoading(PP_Instance instance) {
73   EnterInstanceAPI<PPB_PDF_API> enter(instance);
74   if (enter.succeeded())
75     enter.functions()->DidStartLoading();
76 }
77 
DidStopLoading(PP_Instance instance)78 void DidStopLoading(PP_Instance instance) {
79   EnterInstanceAPI<PPB_PDF_API> enter(instance);
80   if (enter.succeeded())
81     enter.functions()->DidStopLoading();
82 }
83 
SetContentRestriction(PP_Instance instance,int restrictions)84 void SetContentRestriction(PP_Instance instance, int restrictions) {
85   EnterInstanceAPI<PPB_PDF_API> enter(instance);
86   if (enter.succeeded())
87     enter.functions()->SetContentRestriction(restrictions);
88 }
89 
HistogramPDFPageCount(PP_Instance instance,int count)90 void HistogramPDFPageCount(PP_Instance instance, int count) {
91   EnterInstanceAPI<PPB_PDF_API> enter(instance);
92   if (enter.succeeded())
93     enter.functions()->HistogramPDFPageCount(count);
94 }
95 
UserMetricsRecordAction(PP_Instance instance,PP_Var action)96 void UserMetricsRecordAction(PP_Instance instance, PP_Var action) {
97   EnterInstanceAPI<PPB_PDF_API> enter(instance);
98   if (enter.succeeded())
99     enter.functions()->UserMetricsRecordAction(action);
100 }
101 
HasUnsupportedFeature(PP_Instance instance)102 void HasUnsupportedFeature(PP_Instance instance) {
103   EnterInstanceAPI<PPB_PDF_API> enter(instance);
104   if (enter.succeeded())
105     enter.functions()->HasUnsupportedFeature();
106 }
107 
SaveAs(PP_Instance instance)108 void SaveAs(PP_Instance instance) {
109   EnterInstanceAPI<PPB_PDF_API> enter(instance);
110   if (enter.succeeded())
111     enter.functions()->SaveAs();
112 }
113 
Print(PP_Instance instance)114 void Print(PP_Instance instance) {
115   EnterInstanceAPI<PPB_PDF_API> enter(instance);
116   if (enter.succeeded())
117     enter.functions()->Print();
118 }
119 
IsFeatureEnabled(PP_Instance instance,PP_PDFFeature feature)120 PP_Bool IsFeatureEnabled(PP_Instance instance, PP_PDFFeature feature) {
121   EnterInstanceAPI<PPB_PDF_API> enter(instance);
122   if (enter.failed())
123     return PP_FALSE;
124   return enter.functions()->IsFeatureEnabled(feature);
125 }
126 
GetResourceImageForScale(PP_Instance instance,PP_ResourceImage image_id,float scale)127 PP_Resource GetResourceImageForScale(PP_Instance instance,
128                                      PP_ResourceImage image_id,
129                                      float scale) {
130   EnterInstanceAPI<PPB_PDF_API> enter(instance);
131   if (enter.failed())
132     return 0;
133   return enter.functions()->GetResourceImageForScale(image_id, scale);
134 }
135 
ModalPromptForPassword(PP_Instance instance_id,PP_Var message)136 PP_Var ModalPromptForPassword(PP_Instance instance_id,
137                               PP_Var message) {
138   // TODO(raymes): Implement or remove this function.
139   NOTIMPLEMENTED();
140   return PP_MakeUndefined();
141 }
142 
IsOutOfProcess(PP_Instance instance)143 PP_Bool IsOutOfProcess(PP_Instance instance) {
144   EnterInstanceAPI<PPB_PDF_API> enter(instance);
145   if (enter.failed())
146     return PP_FALSE;
147   return enter.functions()->IsOutOfProcess();
148 }
149 
SetSelectedText(PP_Instance instance,const char * selected_text)150 void SetSelectedText(PP_Instance instance,
151                      const char* selected_text) {
152   EnterInstanceAPI<PPB_PDF_API> enter(instance);
153   if (enter.succeeded())
154     enter.functions()->SetSelectedText(selected_text);
155 }
156 
SetLinkUnderCursor(PP_Instance instance,const char * url)157 void SetLinkUnderCursor(PP_Instance instance, const char* url) {
158   EnterInstanceAPI<PPB_PDF_API> enter(instance);
159   if (enter.failed())
160     return;
161   enter.functions()->SetLinkUnderCursor(url);
162 }
163 
164 const PPB_PDF g_ppb_pdf_thunk = {
165   &GetLocalizedString,
166   &GetResourceImage,
167   &GetFontFileWithFallback,
168   &GetFontTableForPrivateFontFile,
169   &SearchString,
170   &DidStartLoading,
171   &DidStopLoading,
172   &SetContentRestriction,
173   &HistogramPDFPageCount,
174   &UserMetricsRecordAction,
175   &HasUnsupportedFeature,
176   &SaveAs,
177   &Print,
178   &IsFeatureEnabled,
179   &GetResourceImageForScale,
180   &ModalPromptForPassword,
181   &IsOutOfProcess,
182   &SetSelectedText,
183   &SetLinkUnderCursor,
184 };
185 
186 }  // namespace
187 
GetPPB_PDF_Thunk()188 const PPB_PDF* GetPPB_PDF_Thunk() {
189   return &g_ppb_pdf_thunk;
190 }
191 
192 }  // namespace thunk
193 }  // namespace ppapi
194