Home | History | Annotate | Download | only in main
      1 // Copyright 2014 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 "athena/main/athena_renderer_pdf_helper.h"
      6 
      7 #include "components/pdf/renderer/pepper_pdf_host.h"
      8 #include "content/public/renderer/renderer_ppapi_host.h"
      9 #include "ppapi/host/host_factory.h"
     10 #include "ppapi/host/ppapi_host.h"
     11 #include "ppapi/host/resource_host.h"
     12 #include "ppapi/proxy/ppapi_messages.h"
     13 
     14 namespace athena {
     15 
     16 namespace {
     17 
     18 class PDFRendererHostFactory : public ppapi::host::HostFactory {
     19  public:
     20   explicit PDFRendererHostFactory(content::RendererPpapiHost* host)
     21       : host_(host) {}
     22   virtual ~PDFRendererHostFactory() {}
     23 
     24  private:
     25   // ppapi::host::HostFactory:
     26   virtual scoped_ptr<ppapi::host::ResourceHost> CreateResourceHost(
     27       ppapi::host::PpapiHost* host,
     28       const ppapi::proxy::ResourceMessageCallParams& params,
     29       PP_Instance instance,
     30       const IPC::Message& message) OVERRIDE {
     31     DCHECK_EQ(host_->GetPpapiHost(), host);
     32     // Make sure the plugin is giving us a valid instance for this resource.
     33     if (!host_->IsValidInstance(instance))
     34       return scoped_ptr<ppapi::host::ResourceHost>();
     35 
     36     if (host_->GetPpapiHost()->permissions().HasPermission(
     37             ppapi::PERMISSION_PRIVATE)) {
     38       switch (message.type()) {
     39         case PpapiHostMsg_PDF_Create::ID:
     40           return scoped_ptr<ppapi::host::ResourceHost>(
     41               new pdf::PepperPDFHost(host_, instance, params.pp_resource()));
     42 
     43         case PpapiHostMsg_FlashFontFile_Create::ID:
     44           return scoped_ptr<ppapi::host::ResourceHost>(
     45               new ppapi::host::ResourceHost(host_->GetPpapiHost(),
     46                                             instance,
     47                                             params.pp_resource()));
     48       }
     49     }
     50 
     51     return scoped_ptr<ppapi::host::ResourceHost>();
     52   }
     53 
     54   // Not owned by this object.
     55   content::RendererPpapiHost* host_;
     56 
     57   DISALLOW_COPY_AND_ASSIGN(PDFRendererHostFactory);
     58 };
     59 
     60 }  // namespace
     61 
     62 AthenaRendererPDFHelper::AthenaRendererPDFHelper(content::RenderFrame* frame)
     63     : content::RenderFrameObserver(frame) {}
     64 
     65 AthenaRendererPDFHelper::~AthenaRendererPDFHelper() {}
     66 
     67 void AthenaRendererPDFHelper::DidCreatePepperPlugin(
     68     content::RendererPpapiHost* host) {
     69   host->GetPpapiHost()->AddHostFactoryFilter(
     70       scoped_ptr<ppapi::host::HostFactory>(new PDFRendererHostFactory(host)));
     71 }
     72 
     73 }  // namespace athena
     74