12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/private/pdf.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/trusted/ppb_browser_font_trusted.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/image_data.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/instance_handle.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/module_impl.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/var.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace pp {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <> const char* interface_name<PPB_PDF>() {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return PPB_PDF_INTERFACE;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool PDF::IsAvailable() {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return has_interface<PPB_PDF>();
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Var PDF::GetLocalizedString(const InstanceHandle& instance,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            PP_ResourceString string_id) {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return Var(PASS_REF,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               get_interface<PPB_PDF>()->GetLocalizedString(
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   instance.pp_instance(), string_id));
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return Var();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ImageData PDF::GetResourceImage(const InstanceHandle& instance,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                PP_ResourceImage image_id) {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return ImageData(PASS_REF,
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     get_interface<PPB_PDF>()->GetResourceImage(
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         instance.pp_instance(), image_id));
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return ImageData();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PDF::GetFontFileWithFallback(
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const InstanceHandle& instance,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const PP_FontDescription_Dev* description,
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_PrivateFontCharset charset) {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PP_BrowserFont_Trusted_Description converted_desc;
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.face = description->face;
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.family = static_cast<PP_BrowserFont_Trusted_Family>(
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        description->family);
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.size = description->size;
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.weight = static_cast<PP_BrowserFont_Trusted_Weight>(
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        description->weight);
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.italic = description->italic;
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.small_caps = description->small_caps;
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.letter_spacing = description->letter_spacing;
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    converted_desc.word_spacing = description->word_spacing;
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_PDF>()->GetFontFileWithFallback(
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        instance.pp_instance(), &converted_desc, charset);
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return 0;
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PP_Resource PDF::GetFontFileWithFallback(
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const InstanceHandle& instance,
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const PP_BrowserFont_Trusted_Description* description,
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PP_PrivateFontCharset charset) {
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return get_interface<PPB_PDF>()->GetFontFileWithFallback(
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        instance.pp_instance(), description, charset);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return 0;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool PDF::GetFontTableForPrivateFontFile(PP_Resource font_file,
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         uint32_t table,
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         void* output,
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         uint32_t* output_length) {
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return get_interface<PPB_PDF>()->GetFontTableForPrivateFontFile(font_file,
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        table, output, output_length);
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::SearchString(const InstanceHandle& instance,
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       const unsigned short* string,
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       const unsigned short* term,
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       bool case_sensitive,
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       PP_PrivateFindResult** results,
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       int* count) {
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->SearchString(instance.pp_instance(), string,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        term, case_sensitive, results, count);
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::DidStartLoading(const InstanceHandle& instance) {
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>())
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->DidStartLoading(instance.pp_instance());
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::DidStopLoading(const InstanceHandle& instance) {
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>())
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->DidStopLoading(instance.pp_instance());
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::SetContentRestriction(const InstanceHandle& instance,
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                int restrictions) {
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->SetContentRestriction(instance.pp_instance(),
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                    restrictions);
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::HistogramPDFPageCount(const InstanceHandle& instance,
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                int count) {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>())
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->HistogramPDFPageCount(instance.pp_instance(),
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                    count);
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::UserMetricsRecordAction(const InstanceHandle& instance,
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  const Var& action) {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->UserMetricsRecordAction(instance.pp_instance(),
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                      action.pp_var());
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::HasUnsupportedFeature(const InstanceHandle& instance) {
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>())
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->HasUnsupportedFeature(instance.pp_instance());
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::SaveAs(const InstanceHandle& instance) {
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>())
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->SaveAs(instance.pp_instance());
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PDF::Print(const InstanceHandle& instance) {
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>())
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get_interface<PPB_PDF>()->Print(instance.pp_instance());
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool PDF::IsFeatureEnabled(const InstanceHandle& instance,
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           PP_PDFFeature feature) {
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>())
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_PDF>()->IsFeatureEnabled(
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        instance.pp_instance(), feature));
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ImageData PDF::GetResourceImageForScale(const InstanceHandle& instance,
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        PP_ResourceImage image_id,
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        float scale) {
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return ImageData(PASS_REF,
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     get_interface<PPB_PDF>()->GetResourceImageForScale(
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         instance.pp_instance(), image_id, scale));
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return ImageData();
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
188d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)Var PDF::ModalPromptForPassword(const InstanceHandle& instance,
189d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                Var message) {
190d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
191d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return Var(PASS_REF,
192d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)               get_interface<PPB_PDF>()->ModalPromptForPassword(
193d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                   instance.pp_instance(),
194d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                   message.pp_var()));
195d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return Var();
197d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool PDF::IsOutOfProcess(const InstanceHandle& instance) {
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (has_interface<PPB_PDF>()) {
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_PDF>()->IsOutOfProcess(
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        instance.pp_instance()));
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return false;
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace pp
209