Home | History | Annotate | Download | only in thunk
      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 
     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 
     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 
     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 
     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 
     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 
     72 void DidStartLoading(PP_Instance instance) {
     73   EnterInstanceAPI<PPB_PDF_API> enter(instance);
     74   if (enter.succeeded())
     75     enter.functions()->DidStartLoading();
     76 }
     77 
     78 void DidStopLoading(PP_Instance instance) {
     79   EnterInstanceAPI<PPB_PDF_API> enter(instance);
     80   if (enter.succeeded())
     81     enter.functions()->DidStopLoading();
     82 }
     83 
     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 
     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 
     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 
    102 void HasUnsupportedFeature(PP_Instance instance) {
    103   EnterInstanceAPI<PPB_PDF_API> enter(instance);
    104   if (enter.succeeded())
    105     enter.functions()->HasUnsupportedFeature();
    106 }
    107 
    108 void SaveAs(PP_Instance instance) {
    109   EnterInstanceAPI<PPB_PDF_API> enter(instance);
    110   if (enter.succeeded())
    111     enter.functions()->SaveAs();
    112 }
    113 
    114 void Print(PP_Instance instance) {
    115   EnterInstanceAPI<PPB_PDF_API> enter(instance);
    116   if (enter.succeeded())
    117     enter.functions()->Print();
    118 }
    119 
    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 
    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 
    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 
    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 
    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 
    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 
    188 const PPB_PDF* GetPPB_PDF_Thunk() {
    189   return &g_ppb_pdf_thunk;
    190 }
    191 
    192 }  // namespace thunk
    193 }  // namespace ppapi
    194