11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/renderer/pepper/chrome_pdf_print_client.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/renderer/printing/print_web_view_helper.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/renderer/pepper_plugin_instance.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/renderer/render_view.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebDocument.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebElement.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebLocalFrame.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebPluginContainer.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace {
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciblink::WebElement GetWebElement(PP_Instance instance_id) {
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  content::PepperPluginInstance* instance =
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::PepperPluginInstance::Get(instance_id);
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!instance)
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return blink::WebElement();
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return instance->GetContainer()->element();
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciprinting::PrintWebViewHelper* GetPrintWebViewHelper(
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const blink::WebElement& element) {
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (element.isNull())
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return NULL;
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  blink::WebView* view = element.document().frame()->view();
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  content::RenderView* render_view = content::RenderView::FromWebView(view);
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return printing::PrintWebViewHelper::Get(render_view);
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciChromePDFPrintClient::ChromePDFPrintClient() {
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciChromePDFPrintClient::~ChromePDFPrintClient() {
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromePDFPrintClient::IsPrintingEnabled(PP_Instance instance_id) {
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  blink::WebElement element = GetWebElement(instance_id);
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  printing::PrintWebViewHelper* helper = GetPrintWebViewHelper(element);
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return helper && helper->IsPrintingEnabled();
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ChromePDFPrintClient::Print(PP_Instance instance_id) {
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  blink::WebElement element = GetWebElement(instance_id);
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  printing::PrintWebViewHelper* helper = GetPrintWebViewHelper(element);
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (helper) {
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    helper->PrintNode(element);
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return true;
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return false;
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
56