Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(777)

Unified Diff: components/printing/renderer/print_web_view_helper_pdf_win.cc

Issue 2653963002: [Experimental] Supporting OOPIF printing
Patch Set: Rename service, fix for webview, and connect to DiscardableMemoryManager Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/printing/renderer/print_web_view_helper_pdf_win.cc
diff --git a/components/printing/renderer/print_web_view_helper_pdf_win.cc b/components/printing/renderer/print_web_view_helper_pdf_win.cc
index acd25c2b8e6d099eaaf89cbf795e1dee95a1b188..92901474e6551989d3ebe9f583a2f401a1ca0e6a 100644
--- a/components/printing/renderer/print_web_view_helper_pdf_win.cc
+++ b/components/printing/renderer/print_web_view_helper_pdf_win.cc
@@ -9,8 +9,11 @@
#include "base/logging.h"
#include "base/process/process_handle.h"
#include "components/printing/common/print_messages.h"
+#include "content/public/renderer/render_thread.h"
#include "printing/features/features.h"
#include "printing/metafile_skia_wrapper.h"
+#include "printing/pdf_metafile_skia.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
namespace printing {
@@ -40,32 +43,89 @@ bool PrintWebViewHelper::PrintPagesNative(blink::WebLocalFrame* frame,
// blink::printEnd() for PDF should be called before metafile is closed.
FinishFramePrinting();
- metafile.FinishDocument();
+ if (true) {
+ // End the document.
+ metafile.FinishAllPages();
+ std::string file_name = base::StringPrintf(
+ "C:\\src\\test_only\\chrome_test_dump\\org_%lld.skp", (size_t)frame);
+ SkFILEWStream file(file_name.c_str());
+ metafile.GetSkp(&file);
+ file.fsync();
- PrintHostMsg_DidPrintPage_Params printed_page_params;
- if (!CopyMetafileDataToSharedMem(
- metafile, &printed_page_params.metafile_data_handle)) {
- return false;
- }
+ // Test new utility logic.
+ size_t buf_size;
+ std::unique_ptr<char[]> buf = metafile.GetPageDataBuffer(&buf_size);
+ if (buf_size == 0) {
+ LOG(ERROR) << "!!! Page data is empty";
+ print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED);
+ return false;
+ }
- printed_page_params.content_area = params.params.printable_area;
- printed_page_params.data_size = metafile.GetDataSize();
- printed_page_params.document_cookie = params.params.document_cookie;
- printed_page_params.page_size = params.params.page_size;
+ std::unique_ptr<base::SharedMemory> shared_buf(
+ content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size));
+ if (!shared_buf || !shared_buf->Map(buf_size)) {
+ print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED);
+ return false;
+ }
- for (size_t i = 0; i < printed_pages.size(); ++i) {
- printed_page_params.page_number = printed_pages[i];
- printed_page_params.page_size = page_size_in_dpi[i];
- printed_page_params.content_area = content_area_in_dpi[i];
- printed_page_params.physical_offsets =
- gfx::Point(printable_area_in_dpi[i].x(), printable_area_in_dpi[i].y());
- Send(new PrintHostMsg_DidPrintPage(routing_id(), printed_page_params));
- // Send the rest of the pages with an invalid metafile handle.
- // TODO(erikchen): Fix semantics. See https://crbug.com/640840
- if (printed_page_params.metafile_data_handle.IsValid())
- printed_page_params.metafile_data_handle = base::SharedMemoryHandle();
+ memcpy(shared_buf->memory(), buf.get(), buf_size);
+
+ PrintHostMsg_DidPrintPage_Params printed_page_params;
+ if (!CopyMetafileDataToSharedMem(metafile,
+ &printed_page_params.metafile_data_handle,
+ &printed_page_params.data_size)) {
+ print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED);
+ return false;
+ }
+
+ printed_page_params.content_area = params.params.printable_area;
+ printed_page_params.document_cookie = params.params.document_cookie;
+ printed_page_params.page_size = params.params.page_size;
+ printed_page_params.is_subframe = params.params.is_subframe;
+
+ for (size_t i = 0; i < printed_pages.size(); ++i) {
+ printed_page_params.page_number = printed_pages[i];
+ printed_page_params.page_size = page_size_in_dpi[i];
+ printed_page_params.content_area = content_area_in_dpi[i];
+ Send(new PrintHostMsg_DidPrintPage(routing_id(), printed_page_params));
+ // Send the rest of the pages with an invalid metafile handle.
+ // TODO(erikchen): Fix semantics. See https://crbug.com/640840
+ if (printed_page_params.metafile_data_handle.IsValid())
+ printed_page_params.metafile_data_handle = base::SharedMemoryHandle();
+ }
+ return true;
+ } else {
+ metafile.FinishAllPages();
+ SkFILEWStream file("C:\\src\\test_only\\chrome_test_dump\\org.skp");
+ metafile.GetSkp(&file);
+ file.fsync();
+ // End the document.
+ metafile.FinishDocument();
+
+ PrintHostMsg_DidPrintPage_Params printed_page_params;
+ if (!CopyMetafileDataToSharedMem(metafile,
+ &printed_page_params.metafile_data_handle,
+ &printed_page_params.data_size)) {
+ return false;
+ }
+
+ printed_page_params.content_area = params.params.printable_area;
+ printed_page_params.data_size = metafile.GetDataSize();
+ printed_page_params.document_cookie = params.params.document_cookie;
+ printed_page_params.page_size = params.params.page_size;
+
+ for (size_t i = 0; i < printed_pages.size(); ++i) {
+ printed_page_params.page_number = printed_pages[i];
+ printed_page_params.page_size = page_size_in_dpi[i];
+ printed_page_params.content_area = content_area_in_dpi[i];
+ Send(new PrintHostMsg_DidPrintPage(routing_id(), printed_page_params));
+ // Send the rest of the pages with an invalid metafile handle.
+ // TODO(erikchen): Fix semantics. See https://crbug.com/640840
+ if (printed_page_params.metafile_data_handle.IsValid())
+ printed_page_params.metafile_data_handle = base::SharedMemoryHandle();
+ }
+ return true;
}
- return true;
}
#endif // BUILDFLAG(ENABLE_BASIC_PRINTING)
« no previous file with comments | « components/printing/renderer/print_web_view_helper_mac.mm ('k') | content/browser/frame_host/render_frame_proxy_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698