From 454c897722d7eb0a5dd8f8eb583b52cad0d537f8 Mon Sep 17 00:00:00 2001 From: "ayush.k123" Date: Fri, 10 Feb 2023 13:37:42 +0530 Subject: [PATCH] [M108 Migration] Remove EWK_BRINGUP from EWebView::SaveAsPdf This patch removes EWK_BRINGUP from EWebView::SaveAsPdf. Reference: https://review.tizen.org/gerrit/281743/ https://review.tizen.org/gerrit/282149/ Change-Id: I125746c9dbbd5246ead9901c2d5270cb6975a0e6 Signed-off-by: ayush.k123 --- .../renderer_host/render_widget_host_impl.cc | 6 + .../renderer_host/render_widget_host_impl.h | 1 + content/public/renderer/render_frame_observer.h | 5 + content/renderer/render_frame_impl.cc | 8 ++ content/renderer/render_frame_impl.h | 4 + printing/BUILD.gn | 4 +- third_party/blink/public/mojom/page/widget.mojom | 3 + .../public/mojom/widget/platform_widget.mojom | 6 + .../blink/public/web/web_local_frame_client.h | 8 ++ .../renderer/core/frame/web_frame_widget_impl.cc | 12 ++ .../renderer/core/frame/web_frame_widget_impl.h | 3 + .../blink/renderer/platform/widget/widget_base.cc | 6 + .../blink/renderer/platform/widget/widget_base.h | 3 + .../renderer/platform/widget/widget_base_client.h | 3 + tizen_src/ewk/efl_integration/BUILD.gn | 1 + .../efl_integration/common/print_pages_params.h | 4 +- .../efl_integration/common/render_messages_ewk.h | 2 - tizen_src/ewk/efl_integration/eweb_view.cc | 12 +- .../renderer/print_web_view_helper_efl.cc | 155 +++++++++------------ .../renderer/print_web_view_helper_efl.h | 19 ++- .../renderer/render_frame_observer_efl.cc | 9 ++ .../renderer/render_frame_observer_efl.h | 4 + .../efl_integration/web_contents_observer_efl.cc | 30 ++-- 23 files changed, 185 insertions(+), 123 deletions(-) diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index 775f85b..4381130 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc @@ -1017,6 +1017,12 @@ void RenderWidgetHostImpl::OnGetFocusedNodeBounds(const gfx::RectF& rect) { void RenderWidgetHostImpl::SetLongPollingGlobalTimeout(uint64_t timeout) { blink_widget_->SetLongPollingGlobalTimeout(timeout); } + +void RenderWidgetHostImpl::PrintToPdf(int width, + int height, + const base::FilePath& filename) { + blink_widget_->PrintToPdf(width, height, filename); +} #endif blink::VisualProperties RenderWidgetHostImpl::GetInitialVisualProperties() { diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h index 6182cad..fc9598a 100644 --- a/content/browser/renderer_host/render_widget_host_impl.h +++ b/content/browser/renderer_host/render_widget_host_impl.h @@ -449,6 +449,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl void UpdateFocusedNodeBounds(); void OnGetFocusedNodeBounds(const gfx::RectF& rect); void SetLongPollingGlobalTimeout(uint64_t timeout); + void PrintToPdf(int width, int height, const base::FilePath& filename); #endif // Returns true if the RenderWidget is hidden. diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h index 98f37cd..1d30b91 100644 --- a/content/public/renderer/render_frame_observer.h +++ b/content/public/renderer/render_frame_observer.h @@ -9,6 +9,7 @@ #include +#include "base/files/file_path.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/time/time.h" #include "build/build_config.h" @@ -127,6 +128,10 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener, virtual void DidCreateDocumentElement() {} #if BUILDFLAG(IS_EFL) virtual void PlayLinkEffect() {} + virtual void PrintToPdf(int width, + int height, + const base::FilePath& filename, + RenderFrame* frame) {} #endif // TODO(dgozman): replace next two methods with DidFinishNavigation. // DidCommitProvisionalLoad is only called for new-document navigations. diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 576cdfa..b5b806f 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -3898,6 +3898,14 @@ void RenderFrameImpl::PlayLinkEffect() { for (auto& observer : observers_) observer.PlayLinkEffect(); } + +void RenderFrameImpl::PrintToPdf(int width, + int height, + const base::FilePath& filename, + RenderFrame* frame) { + for (auto& observer : observers_) + observer.PrintToPdf(width, height, filename, frame); +} #endif void RenderFrameImpl::RunScriptsAtDocumentReady() { diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 762a6f2..bc37b30 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h @@ -542,6 +542,10 @@ class CONTENT_EXPORT RenderFrameImpl void DidCreateDocumentElement() override; #if BUILDFLAG(IS_EFL) void PlayLinkEffect() override; + void PrintToPdf(int width, + int height, + const base::FilePath& filename, + RenderFrame* frame) override; #endif void RunScriptsAtDocumentElementAvailable() override; void DidReceiveTitle(const blink::WebString& title) override; diff --git a/printing/BUILD.gn b/printing/BUILD.gn index 3415934..0026a21 100644 --- a/printing/BUILD.gn +++ b/printing/BUILD.gn @@ -16,7 +16,9 @@ if (is_android) { import("//build/config/android/rules.gni") } -assert(enable_basic_printing) +if (!use_efl) { + assert(enable_basic_printing) +} if (is_win || enable_print_preview) { # Windows basic printing or print preview requires pdf enabled. diff --git a/third_party/blink/public/mojom/page/widget.mojom b/third_party/blink/public/mojom/page/widget.mojom index 9a04ae7..46ba938 100644 --- a/third_party/blink/public/mojom/page/widget.mojom +++ b/third_party/blink/public/mojom/page/widget.mojom @@ -26,6 +26,9 @@ import "ui/base/mojom/attributed_string.mojom"; [EnableIf=is_efl] import "third_party/blink/public/mojom/input/input_event.mojom"; +[EnableIf=use_efl] +import "mojo/public/mojom/base/file_path.mojom"; + // Implemented in Blink, this interface defines frame-widget-specific methods that // will be invoked from the browser process (e.g. blink::WebFrameWidget). interface FrameWidget { diff --git a/third_party/blink/public/mojom/widget/platform_widget.mojom b/third_party/blink/public/mojom/widget/platform_widget.mojom index 35ed958..17dfb14 100644 --- a/third_party/blink/public/mojom/widget/platform_widget.mojom +++ b/third_party/blink/public/mojom/widget/platform_widget.mojom @@ -20,6 +20,9 @@ import "ui/base/ime/mojom/text_input_state.mojom"; [EnableIf=is_efl] import "skia/public/mojom/bitmap.mojom"; +[EnableIf=is_efl] +import "mojo/public/mojom/base/file_path.mojom"; + // This interface is bound on the compositor thread. interface WidgetCompositor { // Requests that the RenderWidget sends back a response after the next main @@ -123,6 +126,9 @@ interface Widget { [EnableIf=is_efl] SetLongPollingGlobalTimeout(uint64 timeout); + [EnableIf=is_efl] + PrintToPdf(uint32 width, uint32 height, mojo_base.mojom.FilePath filename); + // Informs the widget that it was hidden. This allows it to reduce its // resource utilization, and will cancel any pending // RecordContentToVisibleTimeRequest that was set with WasShown or diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h index 415589e..9364fd6 100644 --- a/third_party/blink/public/web/web_local_frame_client.h +++ b/third_party/blink/public/web/web_local_frame_client.h @@ -93,6 +93,10 @@ #include "ui/events/types/scroll_types.h" #include "v8/include/v8.h" +#if BUILDFLAG(IS_EFL) +#include "content/public/renderer/render_frame.h" +#endif + namespace cc { class LayerTreeSettings; } // namespace cc @@ -379,6 +383,10 @@ class BLINK_EXPORT WebLocalFrameClient { #if BUILDFLAG(IS_EFL) virtual void PlayLinkEffect() {} + virtual void PrintToPdf(int width, + int height, + const base::FilePath& filename, + content::RenderFrame* frame) {} #endif // Like |didCreateDocumentElement|, except this method may run JavaScript diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc index 3cd122f..8e54d84 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc @@ -4187,6 +4187,18 @@ void WebFrameWidgetImpl::SetLongPollingGlobalTimeout(uint64_t timeout) { if (view) view->SetLongPollingGlobalTimeout(timeout); } + +void WebFrameWidgetImpl::PrintToPdf(uint32_t width, + uint32_t height, + const base::FilePath& filename) { + WebLocalFrame* focused_frame = FocusedWebLocalFrameInWidget(); + if (!focused_frame || !focused_frame->Client()) + return; + + focused_frame->Client()->PrintToPdf( + width, height, filename, + content::RenderFrame::FromWebFrame(focused_frame)); +} #endif #if BUILDFLAG(IS_TIZEN) diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h index 2d28000..f15ee24 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h @@ -713,6 +713,9 @@ class CORE_EXPORT WebFrameWidgetImpl SkColor GetBackgroundColor() override; gfx::RectF UpdateFocusedNodeBounds() override; void SetLongPollingGlobalTimeout(uint64_t timeout) override; + void PrintToPdf(uint32_t width, + uint32_t height, + const base::FilePath& filename) override; #endif void OrientationChanged() override; void DidUpdateSurfaceAndScreen( diff --git a/third_party/blink/renderer/platform/widget/widget_base.cc b/third_party/blink/renderer/platform/widget/widget_base.cc index 1bc0dad..e345298 100644 --- a/third_party/blink/renderer/platform/widget/widget_base.cc +++ b/third_party/blink/renderer/platform/widget/widget_base.cc @@ -492,6 +492,12 @@ void WidgetBase::UpdateFocusedNodeBounds( void WidgetBase::SetLongPollingGlobalTimeout(uint64_t timeout) { client_->SetLongPollingGlobalTimeout(timeout); } + +void WidgetBase::PrintToPdf(uint32_t width, + uint32_t height, + const base::FilePath& filename) { + client_->PrintToPdf(width, height, filename); +} #endif void WidgetBase::WasHidden() { diff --git a/third_party/blink/renderer/platform/widget/widget_base.h b/third_party/blink/renderer/platform/widget/widget_base.h index 9759e3b..faec533 100644 --- a/third_party/blink/renderer/platform/widget/widget_base.h +++ b/third_party/blink/renderer/platform/widget/widget_base.h @@ -144,6 +144,9 @@ class PLATFORM_EXPORT WidgetBase : public mojom::blink::Widget, void UpdateFocusedNodeBounds( UpdateFocusedNodeBoundsCallback callback) override; void SetLongPollingGlobalTimeout(uint64_t timeout) override; + void PrintToPdf(uint32_t width, + uint32_t height, + const base::FilePath& filename) override; #endif void WasHidden() override; void WasShown(bool was_evicted, diff --git a/third_party/blink/renderer/platform/widget/widget_base_client.h b/third_party/blink/renderer/platform/widget/widget_base_client.h index 7065200..608f7cd 100644 --- a/third_party/blink/renderer/platform/widget/widget_base_client.h +++ b/third_party/blink/renderer/platform/widget/widget_base_client.h @@ -176,6 +176,9 @@ class WidgetBaseClient { virtual SkColor GetBackgroundColor() {} virtual gfx::RectF UpdateFocusedNodeBounds() { return gfx::RectF(); } virtual void SetLongPollingGlobalTimeout(uint64_t timeout) {} + virtual void PrintToPdf(uint32_t width, + uint32_t height, + const base::FilePath& filename) {} #endif // Convert screen coordinates to device emulated coordinates (scaled diff --git a/tizen_src/ewk/efl_integration/BUILD.gn b/tizen_src/ewk/efl_integration/BUILD.gn index 3781431..146688f 100755 --- a/tizen_src/ewk/efl_integration/BUILD.gn +++ b/tizen_src/ewk/efl_integration/BUILD.gn @@ -74,6 +74,7 @@ shared_library("chromium-ewk") { "//content/public/app", "//content/shell:pak", "//content/shell:resources", + "//printing", "//services/device:lib", "//skia", "//storage/browser", diff --git a/tizen_src/ewk/efl_integration/common/print_pages_params.h b/tizen_src/ewk/efl_integration/common/print_pages_params.h index d4fb6e5..9b42b8b 100644 --- a/tizen_src/ewk/efl_integration/common/print_pages_params.h +++ b/tizen_src/ewk/efl_integration/common/print_pages_params.h @@ -43,9 +43,7 @@ struct PrintPageParams { }; struct DidPrintPagesParams { -#if !defined(EWK_BRINGUP) // FIXME: m85 bringup - base::SharedMemoryHandle metafile_data_handle; -#endif + base::UnsafeSharedMemoryRegion metafile_data_handle; uint32_t data_size; int document_cookie; base::FilePath filename; diff --git a/tizen_src/ewk/efl_integration/common/render_messages_ewk.h b/tizen_src/ewk/efl_integration/common/render_messages_ewk.h index b6e2c36..c31c345 100644 --- a/tizen_src/ewk/efl_integration/common/render_messages_ewk.h +++ b/tizen_src/ewk/efl_integration/common/render_messages_ewk.h @@ -66,9 +66,7 @@ IPC_ENUM_TRAITS(Ewk_CSP_Header_Type) IPC_ENUM_TRAITS(Ewk_Hit_Test_Mode) IPC_STRUCT_TRAITS_BEGIN(DidPrintPagesParams) -#if !defined(EWK_BRINGUP) // FIXME: m85 bringup IPC_STRUCT_TRAITS_MEMBER(metafile_data_handle) -#endif IPC_STRUCT_TRAITS_MEMBER(data_size) IPC_STRUCT_TRAITS_MEMBER(document_cookie) IPC_STRUCT_TRAITS_MEMBER(filename) diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index be45a2d..afc8270 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -2023,16 +2023,10 @@ const char* EWebView::GetTitle() { } bool EWebView::SaveAsPdf(int width, int height, const std::string& filename) { - RenderViewHost* render_view_host = web_contents_->GetRenderViewHost(); - if (!render_view_host) + if (!rwhva()) return false; -#if !defined(EWK_BRINGUP) // FIXME: m94 bringup - return render_view_host->Send( - new EwkViewMsg_PrintToPdf(render_view_host->GetRoutingID(), width, height, - base::FilePath(filename))); -#else - return false; -#endif + rwhva()->host()->PrintToPdf(width, height, base::FilePath(filename)); + return true; } bool EWebView::GetMHTMLData(Ewk_View_MHTML_Data_Get_Callback callback, diff --git a/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.cc b/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.cc index fe95f11..0a8e48e 100644 --- a/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.cc +++ b/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.cc @@ -6,20 +6,16 @@ #include "base/compiler_specific.h" #include "base/logging.h" +#include "base/memory/unsafe_shared_memory_region.h" #include "common/render_messages_ewk.h" +#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_thread.h" #include "printing/metafile_skia.h" #include "printing/units.h" -#include "skia/ext/platform_canvas.h" -#include "third_party/blink/public/web/web_frame.h" +#include "third_party/blink/public/web/web_local_frame.h" +#include "third_party/blink/public/web/web_node.h" #include "third_party/blink/public/web/web_print_params.h" #include "third_party/blink/public/web/web_view.h" -#include "third_party/skia/include/core/SkCanvas.h" -#include "third_party/skia/include/core/SkRect.h" - -namespace skia { - typedef SkCanvas VectorCanvas; -} namespace { @@ -38,52 +34,46 @@ int ConvertUnit(int value, int old_unit, int new_unit) { void ComputeWebKitPrintParamsInDesiredDpi(const PrintParams& print_params, blink::WebPrintParams* webkit_print_params) { int dpi = static_cast(print_params.dpi); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - webkit_print_params->printerDPI = dpi; - webkit_print_params->printScalingOption = print_params.print_scaling_option; - - webkit_print_params->printContentArea.width = - ConvertUnit(print_params.content_size.width(), dpi, - print_params.desired_dpi); - webkit_print_params->printContentArea.height = - ConvertUnit(print_params.content_size.height(), dpi, - print_params.desired_dpi); - - webkit_print_params->printableArea.x = - ConvertUnit(print_params.printable_area.x(), dpi, - print_params.desired_dpi); - webkit_print_params->printableArea.y = - ConvertUnit(print_params.printable_area.y(), dpi, - print_params.desired_dpi); - webkit_print_params->printableArea.width = - ConvertUnit(print_params.printable_area.width(), dpi, - print_params.desired_dpi); - webkit_print_params->printableArea.height = - ConvertUnit(print_params.printable_area.height(), - dpi, print_params.desired_dpi); - - webkit_print_params->paperSize.width = - ConvertUnit(print_params.page_size.width(), dpi, - print_params.desired_dpi); - webkit_print_params->paperSize.height = - ConvertUnit(print_params.page_size.height(), dpi, - print_params.desired_dpi); -#endif + webkit_print_params->printer_dpi = dpi; + webkit_print_params->print_scaling_option = print_params.print_scaling_option; + + webkit_print_params->print_content_area.set_width(ConvertUnit( + print_params.content_size.width(), dpi, print_params.desired_dpi)); + webkit_print_params->print_content_area.set_height(ConvertUnit( + print_params.content_size.height(), dpi, print_params.desired_dpi)); + + webkit_print_params->printable_area.set_x(ConvertUnit( + print_params.printable_area.x(), dpi, print_params.desired_dpi)); + webkit_print_params->printable_area.set_y(ConvertUnit( + print_params.printable_area.y(), dpi, print_params.desired_dpi)); + webkit_print_params->printable_area.set_width(ConvertUnit( + print_params.printable_area.width(), dpi, print_params.desired_dpi)); + webkit_print_params->printable_area.set_height(ConvertUnit( + print_params.printable_area.height(), dpi, print_params.desired_dpi)); + + webkit_print_params->paper_size.set_width(ConvertUnit( + print_params.page_size.width(), dpi, print_params.desired_dpi)); + webkit_print_params->paper_size.set_height(ConvertUnit( + print_params.page_size.height(), dpi, print_params.desired_dpi)); } } //namespace -PrintWebViewHelperEfl::PrintWebViewHelperEfl(const base::FilePath& filename) - : filename_(filename) {} +PrintWebViewHelperEfl::PrintWebViewHelperEfl(content::RenderFrame* frame, + const base::FilePath& filename) + : frame_(frame), filename_(filename) {} PrintWebViewHelperEfl::~PrintWebViewHelperEfl() { } void PrintWebViewHelperEfl::PrintToPdf(int width, int height) { + if (!frame_->GetWebView() || !frame_->GetWebView()->MainFrame() || + !frame_->GetWebView()->MainFrame()->IsWebLocalFrame()) { + return; + } + InitPrintSettings(width, height, true); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - RenderPagesForPrint(view_->GetWebView()->mainFrame()); -#endif + RenderPagesForPrint(frame_->GetWebView()->MainFrame()->ToWebLocalFrame()); } void PrintWebViewHelperEfl::InitPrintSettings(int width, int height, bool fit_to_paper_size) { @@ -105,34 +95,29 @@ void PrintWebViewHelperEfl::InitPrintSettings(int width, int height, bool fit_to print_pages_params_.reset(new PrintPagesParams(settings)); } -bool PrintWebViewHelperEfl::RenderPagesForPrint(blink::WebFrame* frame) { +bool PrintWebViewHelperEfl::RenderPagesForPrint(blink::WebLocalFrame* frame) { DCHECK(frame); - const PrintPagesParams& params = *print_pages_params_; - const PrintParams& print_params = params.params; blink::WebPrintParams webkit_print_params; - ComputeWebKitPrintParamsInDesiredDpi(print_params, &webkit_print_params); -#if defined(EWK_BRINGUP) // FIXME: m67 bringup - return false; -#else - int page_count = frame->printBegin(webkit_print_params); - gfx::Size print_canvas_size(webkit_print_params.printContentArea.width, - webkit_print_params.printContentArea.height); + ComputeWebKitPrintParamsInDesiredDpi(print_pages_params_->params, + &webkit_print_params); + int page_count = frame->PrintBegin(webkit_print_params, blink::WebNode()); + gfx::Size print_canvas_size(webkit_print_params.print_content_area.width(), + webkit_print_params.print_content_area.height()); bool result = PrintPagesToPdf(frame, page_count, print_canvas_size); - frame->printEnd(); + frame->PrintEnd(); return result; -#endif } -bool PrintWebViewHelperEfl::PrintPagesToPdf(blink::WebFrame* frame, - int page_count, const gfx::Size& canvas_size) { -#if defined(EWK_BRINGUP) // FIXME: m67 bringup - return false; -#else - printing::PdfMetafileSkia metafile(printing::PDF_SKIA_DOCUMENT_TYPE); +bool PrintWebViewHelperEfl::PrintPagesToPdf(blink::WebLocalFrame* frame, + int page_count, + const gfx::Size& canvas_size) { + const PrintPagesParams& params = *print_pages_params_; + + printing::MetafileSkia metafile(printing::mojom::SkiaDocumentType::kPDF, + params.params.document_cookie); if (!metafile.Init()) return false; - const PrintPagesParams& params = *print_pages_params_; std::vector printed_pages; if (params.pages.empty()) { @@ -153,8 +138,10 @@ bool PrintWebViewHelperEfl::PrintPagesToPdf(blink::WebFrame* frame, for (size_t i = 0; i < printed_pages.size(); ++i) { page_params.page_number = printed_pages[i]; - if (!PrintPageInternal(page_params, canvas_size, frame, &metafile)) - LOG(ERROR) << "Could not write page #" << page_params.page_number << " in pdf."; + if (!PrintPageInternal(page_params, canvas_size, frame, &metafile)) { + LOG(ERROR) << "Could not write page #" << page_params.page_number + << " in pdf."; + } } metafile.FinishDocument(); @@ -169,54 +156,42 @@ bool PrintWebViewHelperEfl::PrintPagesToPdf(blink::WebFrame* frame, printed_page_params.filename = filename_; { - std::unique_ptr shared_mem( - content::RenderThread::Get()->HostAllocateSharedMemoryBuffer( - buf_size).release()); - if (!shared_mem.get()) { + base::UnsafeSharedMemoryRegion shared_mem = + base::UnsafeSharedMemoryRegion::Create(buf_size); + if (!shared_mem.IsValid()) { NOTREACHED() << "AllocateSharedMemoryBuffer failed"; return false; } - if (!shared_mem->Map(buf_size)) { - NOTREACHED() << "Map failed"; - return false; - } - metafile.GetData(shared_mem->memory(), buf_size); + metafile.GetData(shared_mem.Map().memory(), buf_size); printed_page_params.data_size = buf_size; - shared_mem->GiveToProcess(base::GetCurrentProcessHandle(), - &(printed_page_params.metafile_data_handle)); + printed_page_params.metafile_data_handle = shared_mem.Duplicate(); } // shared memory handle scope - return view_->Send(new EwkHostMsg_DidPrintPagesToPdf(view_->GetRoutingID(), printed_page_params)); -#endif + return frame_->Send(new EwkHostMsg_DidPrintPagesToPdf(frame_->GetRoutingID(), + printed_page_params)); } bool PrintWebViewHelperEfl::PrintPageInternal( const PrintPageParams& params, const gfx::Size& canvas_size, - blink::WebFrame* frame, + blink::WebLocalFrame* frame, printing::MetafileSkia* metafile) { - PrintParams result; double scale_factor = 1.0f; gfx::Rect canvas_area(canvas_size); -#if defined(EWK_BRINGUP) // FIXME: m67 bringup - return false; -#else - // FIXME: cannot convert ‘cc::PaintCanvas*’ to ‘skia::VectorCanvas* {aka - // SkCanvas*}’ in initialization - skia::VectorCanvas* canvas = metafile->GetVectorCanvasForNewPage( - params.params.page_size, canvas_area, scale_factor); + cc::PaintCanvas* canvas = metafile->GetVectorCanvasForNewPage( + params.params.page_size, canvas_area, scale_factor, + printing::mojom::PageOrientation::kUpright); if (!canvas) return false; - printing::MetafileSkiaWrapper::SetMetafileOnCanvas(*canvas, metafile); + canvas->SetPrintingMetafile(metafile); - frame->printPage(params.page_number, canvas); + frame->PrintPage(params.page_number, canvas); // Done printing. Close the device context to retrieve the compiled metafile. if (!metafile->FinishPage()) { NOTREACHED() << "metafile failed"; return false; } return true; -#endif } diff --git a/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.h b/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.h index 41fc6fd..c121dd4 100644 --- a/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.h +++ b/tizen_src/ewk/efl_integration/renderer/print_web_view_helper_efl.h @@ -8,8 +8,12 @@ #include "base/files/file_path.h" #include "common/print_pages_params.h" +namespace content { +class RenderFrame; +} + namespace blink { -class WebFrame; +class WebLocalFrame; } namespace printing { @@ -20,22 +24,25 @@ struct PrintPagesParams; class PrintWebViewHelperEfl { public: - PrintWebViewHelperEfl(const base::FilePath& filename); + PrintWebViewHelperEfl(content::RenderFrame* frame, + const base::FilePath& filename); virtual ~PrintWebViewHelperEfl(); void PrintToPdf(int width, int height); void InitPrintSettings(int width, int height, bool fit_to_paper_size); private: - bool PrintPagesToPdf(blink::WebFrame* frame, int page_count, - const gfx::Size& canvas_size); + bool PrintPagesToPdf(blink::WebLocalFrame* frame, + int page_count, + const gfx::Size& canvas_size); bool PrintPageInternal(const PrintPageParams& params, const gfx::Size& canvas_size, - blink::WebFrame* frame, + blink::WebLocalFrame* frame, printing::MetafileSkia* metafile); - bool RenderPagesForPrint(blink::WebFrame* frame); + bool RenderPagesForPrint(blink::WebLocalFrame* frame); std::unique_ptr print_pages_params_; base::FilePath filename_; + content::RenderFrame* frame_; }; #endif // PRINT_WEB_VIEW_HELPER_H_ diff --git a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc index 3aa50c5..154762e 100644 --- a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc +++ b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc @@ -12,6 +12,7 @@ #include "content/public/renderer/render_frame.h" #include "content/renderer/render_frame_impl.h" #include "renderer/content_renderer_client_efl.h" +#include "renderer/print_web_view_helper_efl.h" #include "third_party/blink/public/platform/url_conversion.h" #include "third_party/blink/public/platform/web_url_error.h" #include "third_party/blink/public/platform/web_url_request.h" @@ -219,6 +220,14 @@ void RenderFrameObserverEfl::PlayLinkEffect() { Send(new EwkHostMsg_PlayLinkEffect(render_frame()->GetRoutingID())); } +void RenderFrameObserverEfl::PrintToPdf(int width, + int height, + const base::FilePath& filename, + RenderFrame* frame) { + PrintWebViewHelperEfl print_helper(frame, filename); + print_helper.PrintToPdf(width, height); +} + void RenderFrameObserverEfl::DidCreateScriptContext( v8::Local context, int world_id) { diff --git a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h index 6d7d84c..045c65d 100644 --- a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h +++ b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h @@ -54,6 +54,10 @@ class RenderFrameObserverEfl : public RenderFrameObserver { int world_id) override; void DidCreateDocumentElement() override; void PlayLinkEffect() override; + void PrintToPdf(int width, + int height, + const base::FilePath& filename, + RenderFrame* frame) override; private: void OnSelectPopupMenuItems(bool canceled, diff --git a/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc b/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc index 9135f52..c48e996 100644 --- a/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc +++ b/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc @@ -5,6 +5,7 @@ #include "web_contents_observer_efl.h" #include "base/task/bind_post_task.h" +#include "base/task/thread_pool.h" #include "browser/favicon/favicon_database.h" #include "browser/favicon/favicon_downloader.h" #include "browser/sound_effect.h" @@ -56,6 +57,15 @@ SecurityPolicyType ToSecurityPolicyType(Ewk_CSP_Header_Type type) { } } // namespace +void WritePdfDataToFile(std::unique_ptr metafile, + const base::FilePath& filename) { + DCHECK(metafile); + base::File file(filename, + base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); + metafile->SaveTo(&file); + file.Close(); +} + static bool IsMainFrame(RenderFrameHost* render_frame_host) { return !render_frame_host->GetParent(); } @@ -283,24 +293,20 @@ void WebContentsObserverEfl::OnPlayLinkEffect() { void WebContentsObserverEfl::OnPrintedMetafileReceived( const DidPrintPagesParams& params) { -#if !defined(EWK_BRINGUP) // FIXME: m85 bringup - base::SharedMemory shared_buf(params.metafile_data_handle, true); - if (!shared_buf.Map(params.data_size)) { - NOTREACHED() << "couldn't map"; - return; - } - std::unique_ptr metafile( new printing::MetafileSkia()); - if (!metafile->InitFromData(shared_buf.memory(), params.data_size)) { + if (!metafile->InitFromData( + params.metafile_data_handle.Map().GetMemoryAsSpan())) { NOTREACHED() << "Invalid metafile header"; return; } - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::BindOnce(&WritePdfDataToFile, metafile.release(), params.filename)); -#endif + base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::TaskPriority::BEST_EFFORT, + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}) + ->PostTask(FROM_HERE, + base::BindOnce(&WritePdfDataToFile, std::move(metafile), + params.filename)); } void WebContentsObserverEfl::OnWrtPluginMessage( -- 2.7.4