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.
5 #include "athena/main/athena_renderer_pdf_helper.h"
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"
18 class PDFRendererHostFactory
: public ppapi::host::HostFactory
{
20 explicit PDFRendererHostFactory(content::RendererPpapiHost
* host
)
22 virtual ~PDFRendererHostFactory() {}
25 // ppapi::host::HostFactory:
26 virtual scoped_ptr
<ppapi::host::ResourceHost
> CreateResourceHost(
27 ppapi::host::PpapiHost
* host
,
28 const ppapi::proxy::ResourceMessageCallParams
& params
,
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
>();
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()));
43 case PpapiHostMsg_FlashFontFile_Create::ID
:
44 return scoped_ptr
<ppapi::host::ResourceHost
>(
45 new ppapi::host::ResourceHost(host_
->GetPpapiHost(),
47 params
.pp_resource()));
51 return scoped_ptr
<ppapi::host::ResourceHost
>();
54 // Not owned by this object.
55 content::RendererPpapiHost
* host_
;
57 DISALLOW_COPY_AND_ASSIGN(PDFRendererHostFactory
);
62 AthenaRendererPDFHelper::AthenaRendererPDFHelper(content::RenderFrame
* frame
)
63 : content::RenderFrameObserver(frame
) {}
65 AthenaRendererPDFHelper::~AthenaRendererPDFHelper() {}
67 void AthenaRendererPDFHelper::DidCreatePepperPlugin(
68 content::RendererPpapiHost
* host
) {
69 host
->GetPpapiHost()->AddHostFactoryFilter(
70 scoped_ptr
<ppapi::host::HostFactory
>(new PDFRendererHostFactory(host
)));