| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/renderer/pepper/chrome_pdf_print_client.h" |
| |
| #include "components/printing/renderer/print_web_view_helper.h" |
| #include "content/public/renderer/pepper_plugin_instance.h" |
| #include "content/public/renderer/render_view.h" |
| #include "third_party/WebKit/public/web/WebDocument.h" |
| #include "third_party/WebKit/public/web/WebElement.h" |
| #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| #include "third_party/WebKit/public/web/WebPluginContainer.h" |
| |
| namespace { |
| |
| blink::WebElement GetWebElement(PP_Instance instance_id) { |
| content::PepperPluginInstance* instance = |
| content::PepperPluginInstance::Get(instance_id); |
| if (!instance) |
| return blink::WebElement(); |
| return instance->GetContainer()->element(); |
| } |
| |
| printing::PrintWebViewHelper* GetPrintWebViewHelper( |
| const blink::WebElement& element) { |
| if (element.isNull()) |
| return NULL; |
| blink::WebView* view = element.document().frame()->view(); |
| content::RenderView* render_view = content::RenderView::FromWebView(view); |
| return printing::PrintWebViewHelper::Get(render_view); |
| } |
| |
| } // namespace |
| |
| ChromePDFPrintClient::ChromePDFPrintClient() { |
| } |
| ChromePDFPrintClient::~ChromePDFPrintClient() { |
| } |
| |
| bool ChromePDFPrintClient::IsPrintingEnabled(PP_Instance instance_id) { |
| blink::WebElement element = GetWebElement(instance_id); |
| printing::PrintWebViewHelper* helper = GetPrintWebViewHelper(element); |
| return helper && helper->IsPrintingEnabled(); |
| } |
| |
| bool ChromePDFPrintClient::Print(PP_Instance instance_id) { |
| blink::WebElement element = GetWebElement(instance_id); |
| printing::PrintWebViewHelper* helper = GetPrintWebViewHelper(element); |
| if (helper) { |
| helper->PrintNode(element); |
| return true; |
| } |
| return false; |
| } |