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 "ppapi/proxy/ppp_pdf_proxy.h"
6
7#include "ppapi/proxy/host_dispatcher.h"
8#include "ppapi/proxy/ppapi_messages.h"
9#include "ppapi/shared_impl/proxy_lock.h"
10
11namespace ppapi {
12namespace proxy {
13
14namespace {
15
16#if !defined(OS_NACL)
17PP_Var GetLinkAtPosition(PP_Instance instance, PP_Point point) {
18  // This isn't implemented in the out of process case.
19  return PP_MakeUndefined();
20}
21
22void Transform(PP_Instance instance, PP_PrivatePageTransformType type) {
23  bool clockwise = type == PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW;
24  HostDispatcher::GetForInstance(instance)->Send(
25      new PpapiMsg_PPPPdf_Rotate(API_ID_PPP_PDF, instance, clockwise));
26}
27
28const PPP_Pdf ppp_pdf_interface = {
29  &GetLinkAtPosition,
30  &Transform,
31};
32#else
33// The NaCl plugin doesn't need the host side interface - stub it out.
34const PPP_Pdf ppp_pdf_interface = {};
35#endif
36
37}  // namespace
38
39PPP_Pdf_Proxy::PPP_Pdf_Proxy(Dispatcher* dispatcher)
40    : InterfaceProxy(dispatcher),
41      ppp_pdf_(NULL) {
42  if (dispatcher->IsPlugin()) {
43    ppp_pdf_ = static_cast<const PPP_Pdf*>(
44        dispatcher->local_get_interface()(PPP_PDF_INTERFACE));
45  }
46}
47
48PPP_Pdf_Proxy::~PPP_Pdf_Proxy() {
49}
50
51// static
52const PPP_Pdf* PPP_Pdf_Proxy::GetProxyInterface() {
53  return &ppp_pdf_interface;
54}
55
56bool PPP_Pdf_Proxy::OnMessageReceived(const IPC::Message& msg) {
57  if (!dispatcher()->IsPlugin())
58    return false;
59
60  bool handled = true;
61  IPC_BEGIN_MESSAGE_MAP(PPP_Pdf_Proxy, msg)
62    IPC_MESSAGE_HANDLER(PpapiMsg_PPPPdf_Rotate, OnPluginMsgRotate)
63    IPC_MESSAGE_UNHANDLED(handled = false)
64  IPC_END_MESSAGE_MAP()
65  return handled;
66}
67
68void PPP_Pdf_Proxy::OnPluginMsgRotate(PP_Instance instance, bool clockwise) {
69  PP_PrivatePageTransformType type = clockwise ?
70      PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW :
71      PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CCW;
72  if (ppp_pdf_)
73    CallWhileUnlocked(ppp_pdf_->Transform, instance, type);
74}
75
76}  // namespace proxy
77}  // namespace ppapi
78