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 "chrome/renderer/pepper/chrome_pdf_print_client.h" 6 7 #include "chrome/renderer/printing/print_web_view_helper.h" 8 #include "content/public/renderer/pepper_plugin_instance.h" 9 #include "content/public/renderer/render_view.h" 10 #include "third_party/WebKit/public/web/WebDocument.h" 11 #include "third_party/WebKit/public/web/WebElement.h" 12 #include "third_party/WebKit/public/web/WebLocalFrame.h" 13 #include "third_party/WebKit/public/web/WebPluginContainer.h" 14 15 namespace { 16 17 blink::WebElement GetWebElement(PP_Instance instance_id) { 18 content::PepperPluginInstance* instance = 19 content::PepperPluginInstance::Get(instance_id); 20 if (!instance) 21 return blink::WebElement(); 22 return instance->GetContainer()->element(); 23 } 24 25 printing::PrintWebViewHelper* GetPrintWebViewHelper( 26 const blink::WebElement& element) { 27 if (element.isNull()) 28 return NULL; 29 blink::WebView* view = element.document().frame()->view(); 30 content::RenderView* render_view = content::RenderView::FromWebView(view); 31 return printing::PrintWebViewHelper::Get(render_view); 32 } 33 34 } // namespace 35 36 ChromePDFPrintClient::ChromePDFPrintClient() { 37 } 38 ChromePDFPrintClient::~ChromePDFPrintClient() { 39 } 40 41 bool ChromePDFPrintClient::IsPrintingEnabled(PP_Instance instance_id) { 42 blink::WebElement element = GetWebElement(instance_id); 43 printing::PrintWebViewHelper* helper = GetPrintWebViewHelper(element); 44 return helper && helper->IsPrintingEnabled(); 45 } 46 47 bool ChromePDFPrintClient::Print(PP_Instance instance_id) { 48 blink::WebElement element = GetWebElement(instance_id); 49 printing::PrintWebViewHelper* helper = GetPrintWebViewHelper(element); 50 if (helper) { 51 helper->PrintNode(element); 52 return true; 53 } 54 return false; 55 } 56