summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/printing/print_preview_message_handler.cc28
-rw-r--r--chrome/browser/printing/print_preview_message_handler.h5
-rw-r--r--chrome/browser/resources/print_preview/page_settings.js16
-rw-r--r--chrome/browser/resources/print_preview/print_preview.js77
-rw-r--r--chrome/common/print_messages.h13
-rw-r--r--chrome/renderer/mock_printer.cc4
-rw-r--r--chrome/renderer/mock_printer.h3
-rw-r--r--chrome/renderer/mock_render_thread.cc29
-rw-r--r--chrome/renderer/mock_render_thread.h2
-rw-r--r--chrome/renderer/print_web_view_helper.cc143
-rw-r--r--chrome/renderer/print_web_view_helper.h44
-rw-r--r--chrome/renderer/print_web_view_helper_browsertest.cc77
-rw-r--r--chrome/renderer/print_web_view_helper_linux.cc24
-rw-r--r--chrome/renderer/print_web_view_helper_mac.mm87
-rw-r--r--chrome/renderer/print_web_view_helper_win.cc31
-rw-r--r--printing/print_job_constants.cc3
-rw-r--r--printing/print_job_constants.h1
17 files changed, 177 insertions, 410 deletions
diff --git a/chrome/browser/printing/print_preview_message_handler.cc b/chrome/browser/printing/print_preview_message_handler.cc
index e853e81..11be054 100644
--- a/chrome/browser/printing/print_preview_message_handler.cc
+++ b/chrome/browser/printing/print_preview_message_handler.cc
@@ -82,11 +82,9 @@ void PrintPreviewMessageHandler::OnRequestPrintPreview() {
PrintPreviewTabController::PrintPreview(tab_contents());
}
-void PrintPreviewMessageHandler::OnDidGetPreviewPageCount(
- int document_cookie,
- int page_count,
- bool is_modifiable,
- bool clear_preview_data) {
+void PrintPreviewMessageHandler::OnDidGetPreviewPageCount(int document_cookie,
+ int page_count,
+ bool is_modifiable) {
if (page_count <= 0)
return;
@@ -96,10 +94,6 @@ void PrintPreviewMessageHandler::OnDidGetPreviewPageCount(
PrintPreviewUI* print_preview_ui =
static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
-
- if (!is_modifiable || clear_preview_data)
- print_preview_ui->ClearAllPreviewData();
-
print_preview_ui->OnDidGetPreviewPageCount(
document_cookie, page_count, is_modifiable);
}
@@ -125,7 +119,12 @@ void PrintPreviewMessageHandler::OnDidPreviewPage(
return;
}
+ int requested_preview_page_index = INVALID_PAGE_INDEX;
int page_number = params.page_number;
+
+ if (page_number == FIRST_PAGE_INDEX)
+ print_preview_ui->ClearAllPreviewData();
+
if (page_number >= FIRST_PAGE_INDEX && params.data_size) {
RefCountedBytes* data_bytes =
GetDataFromHandle(params.metafile_data_handle, params.data_size);
@@ -133,12 +132,15 @@ void PrintPreviewMessageHandler::OnDidPreviewPage(
print_preview_ui->SetPrintPreviewDataForIndex(page_number, data_bytes);
print_preview_ui->OnDidPreviewPage(page_number);
+ // TODO(kmadhusu): Query |PrintPreviewUI| and update
+ // |requested_preview_page_index| accordingly.
}
- rvh->Send(new PrintMsg_ContinuePreview(rvh->routing_id()));
+ rvh->Send(new PrintMsg_ContinuePreview(rvh->routing_id(),
+ requested_preview_page_index));
}
-void PrintPreviewMessageHandler::OnMetafileReadyForPrinting(
+void PrintPreviewMessageHandler::OnPagesReadyForPreview(
const PrintHostMsg_DidPreviewDocument_Params& params) {
StopWorker(params.document_cookie);
@@ -216,8 +218,8 @@ bool PrintPreviewMessageHandler::OnMessageReceived(
OnDidGetPreviewPageCount)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidPreviewPage,
OnDidPreviewPage)
- IPC_MESSAGE_HANDLER(PrintHostMsg_MetafileReadyForPrinting,
- OnMetafileReadyForPrinting)
+ IPC_MESSAGE_HANDLER(PrintHostMsg_PagesReadyForPreview,
+ OnPagesReadyForPreview)
IPC_MESSAGE_HANDLER(PrintHostMsg_PrintPreviewFailed,
OnPrintPreviewFailed)
IPC_MESSAGE_UNHANDLED(handled = false)
diff --git a/chrome/browser/printing/print_preview_message_handler.h b/chrome/browser/printing/print_preview_message_handler.h
index cd056e7..ff56b01 100644
--- a/chrome/browser/printing/print_preview_message_handler.h
+++ b/chrome/browser/printing/print_preview_message_handler.h
@@ -33,11 +33,10 @@ class PrintPreviewMessageHandler : public TabContentsObserver {
void OnRequestPrintPreview();
void OnDidGetPreviewPageCount(int document_cookie,
int page_count,
- bool is_modifiable,
- bool clear_preview_data);
+ bool is_modifiable);
// |page_number| is 0-based.
void OnDidPreviewPage(const PrintHostMsg_DidPreviewPage_Params& params);
- void OnMetafileReadyForPrinting(
+ void OnPagesReadyForPreview(
const PrintHostMsg_DidPreviewDocument_Params& params);
void OnPrintPreviewFailed(int document_cookie);
diff --git a/chrome/browser/resources/print_preview/page_settings.js b/chrome/browser/resources/print_preview/page_settings.js
index 28f70bf..48210c6 100644
--- a/chrome/browser/resources/print_preview/page_settings.js
+++ b/chrome/browser/resources/print_preview/page_settings.js
@@ -177,8 +177,9 @@ cr.define('print_preview', function() {
/**
* Updates |this.previouslySelectedPages_| with the currently selected
* pages.
+ * @private
*/
- updatePageSelection: function() {
+ updatePageSelection_: function() {
this.previouslySelectedPages_ = this.selectedPagesSet;
},
@@ -193,14 +194,6 @@ cr.define('print_preview', function() {
},
/**
- * Checks if the page selection has changed and is valid.
- * @return {boolean} true if the page selection is changed and is valid.
- */
- hasPageSelectionChangedAndIsValid: function() {
- return this.isPageSelectionValid() && this.hasPageSelectionChanged_();
- },
-
- /**
* Validates the contents of |this.selectedPagesTextfield|.
*
* @return {boolean} true if the text is valid.
@@ -219,8 +212,8 @@ cr.define('print_preview', function() {
* @return {boolean} true if a new preview was requested.
*/
requestPrintPreviewIfNeeded: function() {
- if (this.hasPageSelectionChangedAndIsValid()) {
- this.updatePageSelection();
+ if (this.isPageSelectionValid() && this.hasPageSelectionChanged_()) {
+ this.updatePageSelection_();
requestPrintPreview();
return true;
}
@@ -281,6 +274,7 @@ cr.define('print_preview', function() {
cr.dispatchSimpleEvent(document, 'updatePrintButton');
return;
}
+ this.previouslySelectedPages_ = this.selectedPagesSet;
requestPrintPreview();
},
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js
index 4a92c1d..47c455d 100644
--- a/chrome/browser/resources/print_preview/print_preview.js
+++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -23,7 +23,6 @@ const MANAGE_LOCAL_PRINTERS = 'manageLocalPrinters';
const MORE_PRINTERS = 'morePrinters';
const SIGN_IN = 'signIn';
const PRINT_TO_PDF = 'Print to PDF';
-const COMPLETE_PREVIEW_DATA_INDEX = -1;
// State of the print preview settings.
var printSettings = new PrintSettings();
@@ -63,11 +62,6 @@ var showingSystemDialog = false;
var firstCloudPrintOptionPos = 0;
var lastCloudPrintOptionPos = firstCloudPrintOptionPos;
-// Store the current previewUid.
-var currentPreviewUid = '';
-
-// True if we need to generate draft preview data.
-var generateDraftData = true;
// TODO(abodenha@chromium.org) A lot of cloud print specific logic has
// made its way into this file. Refactor to create a cleaner boundary
@@ -317,8 +311,7 @@ function getSettings() {
'landscape': layoutSettings.isLandscape(),
'color': colorSettings.isColor(),
'printToPDF': printToPDF,
- 'requestID': 0,
- 'generateDraftData': generateDraftData};
+ 'requestID': 0};
var printerList = $('printer-list');
var selectedPrinter = printerList.selectedIndex;
@@ -428,42 +421,15 @@ function sendPrintDocumentRequest() {
}
/**
- * Loads the selected preview pages.
- */
-function loadSelectedPages() {
- hasPendingPreviewRequest = false;
- pageSettings.updatePageSelection();
- var pageSet = pageSettings.previouslySelectedPages;
- var pageCount = pageSet.length;
- if (pageCount == 0 || currentPreviewUid == '')
- return;
-
- for (var i = 0; i < pageCount; i++)
- onDidPreviewPage(pageSet[i] - 1, currentPreviewUid);
- addEventListeners();
-}
-
-/**
* Asks the browser to generate a preview PDF based on current print settings.
*/
function requestPrintPreview() {
hasPendingPreviewRequest = true;
removeEventListeners();
printSettings.save();
- generateDraftData = true;
if (!isTabHidden)
showLoadingAnimation();
- if (previewModifiable && hasOnlyPageSettingsChanged()) {
- loadSelectedPages();
- generateDraftData = false;
- } else {
- pageSettings.updatePageSelection();
- }
-
- if (!previewModifiable && pageSettings.totalPageCount > 0)
- generateDraftData = false;
-
var settings = getSettings();
settings.requestID = generatePreviewRequestID();
chrome.send('getPreview', [JSON.stringify(settings)]);
@@ -863,16 +829,12 @@ function onDidPreviewPage(pageNumber, previewUid) {
if (!previewModifiable)
return;
- if (checkIfSettingsChangedAndRegeneratePreview())
- return;
-
var pageIndex = pageSettings.previouslySelectedPages.indexOf(pageNumber + 1);
- if (pageIndex == -1)
- return;
- currentPreviewUid = previewUid;
+ if (checkIfSettingsChangedAndRegeneratePreview())
+ return;
if (pageIndex == 0)
- createPDFPlugin(pageNumber);
+ createPDFPlugin(previewUid);
$('pdf-viewer').loadPreviewPage(
getPageSrcURL(previewUid, pageNumber), pageIndex);
@@ -902,8 +864,7 @@ function updatePrintPreview(jobTitle,
if (!previewModifiable) {
// If the preview is not modifiable the plugin has not been created yet.
- currentPreviewUid = previewUid;
- createPDFPlugin(COMPLETE_PREVIEW_DATA_INDEX);
+ createPDFPlugin(previewUid);
}
cr.dispatchSimpleEvent(document, 'updateSummary');
@@ -937,41 +898,28 @@ function checkIfSettingsChangedAndRegeneratePreview() {
}
/**
- * Check if only page selection has been changed since the last preview request
- * and is valid.
- * @return {boolean} true if the new page selection is valid.
- */
-function hasOnlyPageSettingsChanged() {
- var tempPrintSettings = new PrintSettings();
- tempPrintSettings.save();
-
- return !!(printSettings.deviceName == tempPrintSettings.deviceName &&
- printSettings.isLandscape == tempPrintSettings.isLandscape &&
- pageSettings.hasPageSelectionChangedAndIsValid());
-}
-
-/**
* Create the PDF plugin or reload the existing one.
- * @param {number} srcDataIndex Preview data source index.
+ * @param {string} previewUid Preview unique identifier.
*/
-function createPDFPlugin(srcDataIndex) {
+function createPDFPlugin(previewUid) {
var pdfViewer = $('pdf-viewer');
- var srcURL = getPageSrcURL(currentPreviewUid, srcDataIndex);
if (pdfViewer) {
// Need to call this before the reload(), where the plugin resets its
// internal page count.
pdfViewer.goToPage('0');
- pdfViewer.resetPrintPreviewUrl(srcURL);
pdfViewer.reload();
pdfViewer.grayscale(!colorSettings.isColor());
return;
}
+ // Get the complete preview document.
+ var dataIndex = previewModifiable ? '0' : '-1';
+
pdfViewer = document.createElement('embed');
pdfViewer.setAttribute('id', 'pdf-viewer');
pdfViewer.setAttribute('type',
'application/x-google-chrome-print-preview-pdf');
- pdfViewer.setAttribute('src', srcURL);
+ pdfViewer.setAttribute('src', getPageSrcURL(previewUid, dataIndex));
pdfViewer.setAttribute('aria-live', 'polite');
pdfViewer.setAttribute('aria-atomic', 'true');
$('mainview').appendChild(pdfViewer);
@@ -989,8 +937,7 @@ function checkCompatiblePluginExists() {
dummyPlugin.goToPage &&
dummyPlugin.removePrintButton &&
dummyPlugin.loadPreviewPage &&
- dummyPlugin.printPreviewPageCount &&
- dummyPlugin.resetPrintPreviewUrl);
+ dummyPlugin.printPreviewPageCount);
}
window.addEventListener('DOMContentLoaded', onLoad);
diff --git a/chrome/common/print_messages.h b/chrome/common/print_messages.h
index e9d24e3..618ece5 100644
--- a/chrome/common/print_messages.h
+++ b/chrome/common/print_messages.h
@@ -187,7 +187,11 @@ IPC_MESSAGE_ROUTED0(PrintMsg_PrintForSystemDialog)
IPC_MESSAGE_ROUTED0(PrintMsg_ResetScriptedPrintCount)
// Tells a renderer to continue generating the print preview.
-IPC_MESSAGE_ROUTED0(PrintMsg_ContinuePreview)
+// Use |requested_preview_page_index| to request a specific preview page data.
+// |requested_preview_page_index| is 1-based or |printing::INVALID_PAGE_INDEX|
+// to render the next page.
+IPC_MESSAGE_ROUTED1(PrintMsg_ContinuePreview,
+ int /* requested_preview_page_index */)
// Tells a renderer to abort the print preview and reset all state.
IPC_MESSAGE_ROUTED0(PrintMsg_AbortPreview)
@@ -255,11 +259,10 @@ IPC_MESSAGE_CONTROL1(PrintHostMsg_TempFileForPrintingWritten,
IPC_MESSAGE_ROUTED0(PrintHostMsg_RequestPrintPreview)
// Notify the browser the number of pages in the print preview document.
-IPC_MESSAGE_ROUTED4(PrintHostMsg_DidGetPreviewPageCount,
+IPC_MESSAGE_ROUTED3(PrintHostMsg_DidGetPreviewPageCount,
int /* document cookie */,
int /* page count */,
- bool /* is modifiable */,
- bool /* clear all preview data */)
+ bool /* is modifiable */)
// Notify the browser a print preview page has been rendered.
IPC_MESSAGE_ROUTED1(PrintHostMsg_DidPreviewPage,
@@ -268,7 +271,7 @@ IPC_MESSAGE_ROUTED1(PrintHostMsg_DidPreviewPage,
// Sends back to the browser the complete rendered document for print preview
// that was requested by a PrintMsg_PrintPreview message. The memory handle in
// this message is already valid in the browser process.
-IPC_MESSAGE_ROUTED1(PrintHostMsg_MetafileReadyForPrinting,
+IPC_MESSAGE_ROUTED1(PrintHostMsg_PagesReadyForPreview,
PrintHostMsg_DidPreviewDocument_Params /* params */)
// Tell the browser printing failed.
diff --git a/chrome/renderer/mock_printer.cc b/chrome/renderer/mock_printer.cc
index 20bb28c..6fa65cc 100644
--- a/chrome/renderer/mock_printer.cc
+++ b/chrome/renderer/mock_printer.cc
@@ -94,12 +94,10 @@ void MockPrinter::ScriptedPrint(int cookie,
}
void MockPrinter::UpdateSettings(int cookie,
- PrintMsg_PrintPages_Params* params,
- const std::vector<int>& pages) {
+ PrintMsg_PrintPages_Params* params) {
EXPECT_EQ(document_cookie_, cookie);
memset(params, 0, sizeof(PrintMsg_PrintPages_Params));
- params->pages = pages;
SetPrintParams(&(params->params));
printer_status_ = PRINTER_PRINTING;
}
diff --git a/chrome/renderer/mock_printer.h b/chrome/renderer/mock_printer.h
index 09fc466..1c2994c 100644
--- a/chrome/renderer/mock_printer.h
+++ b/chrome/renderer/mock_printer.h
@@ -75,8 +75,7 @@ class MockPrinter {
int expected_pages_count,
bool has_selection,
PrintMsg_PrintPages_Params* settings);
- void UpdateSettings(int cookie, PrintMsg_PrintPages_Params* params,
- const std::vector<int>& page_range_array);
+ void UpdateSettings(int cookie, PrintMsg_PrintPages_Params* params);
void SetPrintedPagesCount(int cookie, int number_pages);
void PrintPage(const PrintHostMsg_DidPrintPage_Params& params);
diff --git a/chrome/renderer/mock_render_thread.cc b/chrome/renderer/mock_render_thread.cc
index 1a66d41..aac7156 100644
--- a/chrome/renderer/mock_render_thread.cc
+++ b/chrome/renderer/mock_render_thread.cc
@@ -16,7 +16,6 @@
#include "ipc/ipc_message_utils.h"
#include "ipc/ipc_sync_message.h"
#include "printing/print_job_constants.h"
-#include "printing/page_range.h"
#include "testing/gtest/include/gtest/gtest.h"
MockRenderThread::MockRenderThread()
@@ -214,8 +213,7 @@ void MockRenderThread::OnDidPrintPage(
void MockRenderThread::OnDidGetPreviewPageCount(int document_cookie,
int number_pages,
- bool is_modifiable,
- bool clear_preview_data) {
+ bool is_modifiable) {
print_preview_pages_remaining_ = number_pages;
}
@@ -244,29 +242,8 @@ void MockRenderThread::OnUpdatePrintSettings(
}
// Just return the default settings.
- if (printer_.get()) {
- ListValue* page_range_array = new ListValue();
- printing::PageRanges new_ranges;
- if (job_settings.GetList(printing::kSettingPageRange, &page_range_array)) {
- for (size_t index = 0; index < page_range_array->GetSize(); ++index) {
- DictionaryValue* dict;
- if (!page_range_array->GetDictionary(index, &dict))
- continue;
- printing::PageRange range;
- if (!dict->GetInteger(printing::kSettingPageRangeFrom, &range.from) ||
- !dict->GetInteger(printing::kSettingPageRangeTo, &range.to)) {
- continue;
- }
- // Page numbers are 1-based in the dictionary.
- // Page numbers are 0-based for the printing context.
- range.from--;
- range.to--;
- new_ranges.push_back(range);
- }
- }
- std::vector<int> pages(printing::PageRange::GetPages(new_ranges));
- printer_->UpdateSettings(document_cookie, params, pages);
- }
+ if (printer_.get())
+ printer_->UpdateSettings(document_cookie, params);
}
void MockRenderThread::set_print_dialog_user_response(bool response) {
diff --git a/chrome/renderer/mock_render_thread.h b/chrome/renderer/mock_render_thread.h
index eac4e41..5eb7ad3 100644
--- a/chrome/renderer/mock_render_thread.h
+++ b/chrome/renderer/mock_render_thread.h
@@ -126,7 +126,7 @@ class MockRenderThread : public RenderThreadBase {
void OnDidGetPrintedPagesCount(int cookie, int number_pages);
void OnDidPrintPage(const PrintHostMsg_DidPrintPage_Params& params);
void OnDidGetPreviewPageCount(int document_cookie, int number_pages,
- bool is_modifiable, bool clear_preview_data);
+ bool is_modifiable);
void OnDidPreviewPage(const PrintHostMsg_DidPreviewPage_Params& params);
// For print preview, PrintWebViewHelper will update settings.
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index 948fd6e..b065f31 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -177,7 +177,6 @@ PrintWebViewHelper::PrintWebViewHelper(RenderView* render_view)
RenderViewObserverTracker<PrintWebViewHelper>(render_view),
print_web_view_(NULL),
is_preview_(switches::IsPrintPreviewEnabled()),
- is_print_ready_metafile_sent_(false),
user_cancelled_scripted_print_count_(0),
notify_browser_of_print_failure_(true) {
}
@@ -314,6 +313,7 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
NOTREACHED();
return;
}
+
if (!UpdatePrintSettings(settings)) {
DidFinishPrinting(FAIL_PREVIEW);
return;
@@ -334,24 +334,14 @@ void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
preview_params.preview_request_id =
print_pages_params_->params.preview_request_id;
- Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(),
- preview_params));
+ Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params));
return;
}
// Always clear |old_print_pages_params_| before rendering the pages.
old_print_pages_params_.reset();
- is_print_ready_metafile_sent_ = false;
// PDF printer device supports alpha blending.
print_pages_params_->params.supports_alpha_blend = true;
-
- bool generate_draft_pages;
- if (!settings.GetBoolean(printing::kSettingGenerateDraftData,
- &generate_draft_pages)) {
- NOTREACHED();
- }
- print_preview_context_.set_generate_draft_pages(generate_draft_pages);
-
if (!CreatePreviewDocument())
DidFinishPrinting(FAIL_PREVIEW);
}
@@ -364,39 +354,38 @@ bool PrintWebViewHelper::CreatePreviewDocument() {
int page_count = print_preview_context_.total_page_count();
bool is_modifiable = print_preview_context_.IsModifiable();
int document_cookie = print_pages_params_->params.document_cookie;
- Send(new PrintHostMsg_DidGetPreviewPageCount(
- routing_id(),
- document_cookie,
- page_count,
- is_modifiable,
- print_preview_context_.generate_draft_pages()));
+ Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), document_cookie,
+ page_count, is_modifiable));
PreviewPageRendered(printing::INVALID_PAGE_INDEX, NULL);
return true;
}
-void PrintWebViewHelper::OnContinuePreview() {
+void PrintWebViewHelper::OnContinuePreview(int requested_preview_page_index) {
// Spurious message. We already finished/cancelled/aborted the print preview.
if (!print_preview_context_.IsBusy())
return;
- int page_number = print_preview_context_.GetNextPageNumber();
+ int page_number;
+#if defined(USE_SKIA)
+ if (requested_preview_page_index >= printing::FIRST_PAGE_INDEX) {
+ page_number = requested_preview_page_index;
+ } else
+#endif
+ {
+ page_number = print_preview_context_.GetNextPageNumber();
+ }
if (page_number >= printing::FIRST_PAGE_INDEX) {
// Continue generating the print preview.
RenderPreviewPage(page_number);
+ return;
}
- if (print_preview_context_.IsFinalPageRendered())
- print_preview_context_.AllPagesRendered();
-
- if (print_preview_context_.IsLastPageOfPrintReadyMetafile()) {
- // Finished generating preview. Finalize the document.
- if (!FinalizePrintReadyDocument())
- DidFinishPrinting(FAIL_PREVIEW);
- }
-
- if (page_number == printing::INVALID_PAGE_INDEX) {
+ // Finished generating preview. Finalize the document.
+ if (FinalizePreviewDocument()) {
print_preview_context_.Finished();
DidFinishPrinting(OK);
+ } else {
+ DidFinishPrinting(FAIL_PREVIEW);
}
}
@@ -405,9 +394,8 @@ void PrintWebViewHelper::OnAbortPreview() {
return;
}
-bool PrintWebViewHelper::FinalizePrintReadyDocument() {
- DCHECK(!is_print_ready_metafile_sent_);
- print_preview_context_.FinalizePrintReadyDocument();
+bool PrintWebViewHelper::FinalizePreviewDocument() {
+ print_preview_context_.FinalizePreviewDocument();
// Get the size of the resulting metafile.
printing::PreviewMetafile* metafile = print_preview_context_.metafile();
@@ -429,9 +417,7 @@ bool PrintWebViewHelper::FinalizePrintReadyDocument() {
&(preview_params.metafile_data_handle))) {
return false;
}
- is_print_ready_metafile_sent_ = true;
-
- Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), preview_params));
+ Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params));
return true;
}
@@ -925,8 +911,7 @@ void PrintWebViewHelper::PreviewPageRendered(int page_number,
printing::Metafile* metafile) {
if ((page_number == printing::INVALID_PAGE_INDEX && metafile) ||
(page_number >= printing::FIRST_PAGE_INDEX && !metafile &&
- print_preview_context_.IsModifiable() &&
- print_preview_context_.generate_draft_pages())) {
+ print_preview_context_.IsModifiable())) {
NOTREACHED();
DidFinishPrinting(FAIL_PREVIEW);
return;
@@ -952,9 +937,8 @@ void PrintWebViewHelper::PreviewPageRendered(int page_number,
PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext()
: frame_(NULL),
total_page_count_(0),
- render_page_list_index_(-1),
- generate_draft_pages_(true),
- print_ready_metafile_page_count_(0),
+ actual_page_count_(0),
+ current_page_number_(0),
state_(UNINITIALIZED) {
}
@@ -1008,23 +992,23 @@ bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument(
if (total_page_count_ == 0)
return false;
- int selected_page_count = pages.size();
- render_page_list_index_ = -1;
- print_ready_metafile_page_count_ = pages.empty() ? total_page_count_ :
- selected_page_count;
- render_page_list_ = pages;
- if (selected_page_count == 0) {
- // Render all pages.
- for (int i = 0; i < total_page_count_; i++)
- render_page_list_.push_back(i);
- } else if (generate_draft_pages_) {
- int pages_index = 0;
- for (int i = 0; i < total_page_count_; i++) {
- if (pages_index < selected_page_count && i == pages[pages_index]) {
- pages_index++;
- continue;
+ current_page_number_ = 0;
+ if (pages.empty()) {
+ actual_page_count_ = total_page_count_;
+ rendered_pages_ = std::vector<PreviewPageInfo>(total_page_count_,
+ std::make_pair(false, -1));
+ } else {
+ actual_page_count_ = pages.size();
+ rendered_pages_ = std::vector<PreviewPageInfo>(total_page_count_,
+ std::make_pair(true, -1));
+ for (int i = 0; i < actual_page_count_; ++i) {
+ int page_number = pages[i];
+ if (page_number < printing::FIRST_PAGE_INDEX ||
+ page_number >= total_page_count_) {
+ return false;
}
- render_page_list_.push_back(i);
+ rendered_pages_[page_number].first = false;
+ rendered_pages_[page_number].second = i;
}
}
@@ -1041,20 +1025,16 @@ void PrintWebViewHelper::PrintPreviewContext::RenderedPreviewPage(
UMA_HISTOGRAM_TIMES("PrintPreview.RenderPDFPageTime", page_time);
}
-void PrintWebViewHelper::PrintPreviewContext::AllPagesRendered() {
+void PrintWebViewHelper::PrintPreviewContext::FinalizePreviewDocument() {
DCHECK_EQ(RENDERING, state_);
state_ = DONE;
- prep_frame_view_->FinishPrinting();
-}
-
-void PrintWebViewHelper::PrintPreviewContext::FinalizePrintReadyDocument() {
- if (state_ != DONE && state_ != RENDERING)
- NOTREACHED();
base::TimeTicks begin_time = base::TimeTicks::Now();
+
+ prep_frame_view_->FinishPrinting();
metafile_->FinishDocument();
- if (print_ready_metafile_page_count_ <= 0) {
+ if (actual_page_count_ <= 0) {
NOTREACHED();
return;
}
@@ -1066,7 +1046,7 @@ void PrintWebViewHelper::PrintPreviewContext::FinalizePrintReadyDocument() {
UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTime",
total_time);
UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTimeAvgPerPage",
- total_time / render_page_list_.size());
+ total_time / actual_page_count_);
}
void PrintWebViewHelper::PrintPreviewContext::Finished() {
@@ -1089,10 +1069,15 @@ void PrintWebViewHelper::PrintPreviewContext::Abort() {
int PrintWebViewHelper::PrintPreviewContext::GetNextPageNumber() {
DCHECK_EQ(RENDERING, state_);
- if (IsFinalPageRendered())
+ for (int i = 0; i < total_page_count_; i++) {
+ if (!rendered_pages_[current_page_number_].first)
+ break;
+ current_page_number_ = (current_page_number_ + 1) % total_page_count_;
+ }
+ if (rendered_pages_[current_page_number_].first)
return printing::INVALID_PAGE_INDEX;
- render_page_list_index_++;
- return render_page_list_[render_page_list_index_];
+ rendered_pages_[current_page_number_].first = true;
+ return current_page_number_;
}
bool PrintWebViewHelper::PrintPreviewContext::IsReadyToRender() const {
@@ -1113,20 +1098,6 @@ bool PrintWebViewHelper::PrintPreviewContext::IsModifiable() const {
return mime != "application/pdf";
}
-bool PrintWebViewHelper::PrintPreviewContext::IsLastPageOfPrintReadyMetafile()
- const {
- return render_page_list_index_ == print_ready_metafile_page_count_ - 1;
-}
-
-bool PrintWebViewHelper::PrintPreviewContext::IsFinalPageRendered() const {
- return (size_t)(render_page_list_index_ + 1) == render_page_list_.size();
-}
-
-void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages(
- bool generate_draft_pages) {
- generate_draft_pages_ = generate_draft_pages;
-}
-
WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const {
return frame_;
}
@@ -1139,10 +1110,6 @@ int PrintWebViewHelper::PrintPreviewContext::total_page_count() const {
return total_page_count_;
}
-bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() {
- return generate_draft_pages_;
-}
-
printing::PreviewMetafile*
PrintWebViewHelper::PrintPreviewContext::metafile() const {
return metafile_.get();
@@ -1161,5 +1128,5 @@ PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const {
void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
prep_frame_view_.reset();
metafile_.reset();
- render_page_list_.clear();
+ rendered_pages_.clear();
}
diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h
index 9826c83..0407c85 100644
--- a/chrome/renderer/print_web_view_helper.h
+++ b/chrome/renderer/print_web_view_helper.h
@@ -6,6 +6,7 @@
#define CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_
#pragma once
+#include <utility>
#include <vector>
#include "base/memory/scoped_ptr.h"
@@ -109,8 +110,6 @@ class PrintWebViewHelper : public RenderViewObserver,
OnPrintForPrintPreview);
FRIEND_TEST_ALL_PREFIXES(PrintWebViewHelperPreviewTest,
OnPrintForPrintPreviewFail);
- FRIEND_TEST_ALL_PREFIXES(PrintWebViewHelperPreviewTest,
- OnPrintPreviewForSelectedPages);
#if defined(OS_WIN) || defined(OS_MACOSX)
FRIEND_TEST_ALL_PREFIXES(PrintWebViewHelperTest, PrintLayoutTest);
@@ -137,12 +136,14 @@ class PrintWebViewHelper : public RenderViewObserver,
// Initialize the print preview document.
bool CreatePreviewDocument();
- // Continue generating the print preview.
- void OnContinuePreview();
+ // Continue generating the print preview. |requested_preview_page_index|
+ // specifies the browser requested preview page index. It is 1-based or
+ // |printing::INVALID_PAGE_INDEX| to continue with next page.
+ void OnContinuePreview(int requested_preview_page_index);
// Renders a print preview page. |page_number| is 0-based.
void RenderPreviewPage(int page_number);
- // Finalize the print ready preview document.
- bool FinalizePrintReadyDocument();
+ // Finalize the print preview document.
+ bool FinalizePreviewDocument();
// Abort the preview to put |print_preview_context_| into the 'UNINITIALIZED'
// state.
@@ -297,7 +298,6 @@ class PrintWebViewHelper : public RenderViewObserver,
scoped_ptr<PrintMsg_PrintPages_Params> print_pages_params_;
bool is_preview_;
- bool is_print_ready_metafile_sent_;
// Used for scripted initiated printing blocking.
base::Time last_cancelled_script_print_;
@@ -331,11 +331,8 @@ class PrintWebViewHelper : public RenderViewObserver,
// rendering took.
void RenderedPreviewPage(const base::TimeDelta& page_time);
- // Updates the print preview context when the required pages are rendered.
- void AllPagesRendered();
-
- // Finalizes the print ready preview document.
- void FinalizePrintReadyDocument();
+ // Finalizes the print preview document.
+ void FinalizePreviewDocument();
// Cleanup after print preview finishes.
void Finished();
@@ -351,17 +348,11 @@ class PrintWebViewHelper : public RenderViewObserver,
bool IsReadyToRender() const;
bool IsBusy() const;
bool IsModifiable() const;
- bool IsLastPageOfPrintReadyMetafile() const;
- bool IsFinalPageRendered() const;
-
- // Setters
- void set_generate_draft_pages(bool generate_draft_pages);
// Getters
WebKit::WebFrame* frame() const;
WebKit::WebNode* node() const;
int total_page_count() const;
- bool generate_draft_pages();
printing::PreviewMetafile* metafile() const;
const PrintMsg_Print_Params& print_params() const;
const gfx::Size& GetPrintCanvasSize() const;
@@ -388,17 +379,16 @@ class PrintWebViewHelper : public RenderViewObserver,
// Total page count in the renderer.
int total_page_count_;
- // List of page indices that need to be rendered.
- std::vector<int> render_page_list_;
-
- // Specifies the current list index.
- int render_page_list_index_;
+ // Number of pages to render.
+ int actual_page_count_;
- // True, when draft pages needs to be generated.
- bool generate_draft_pages_;
+ // The current page to render.
+ int current_page_number_;
- // Specifies the total number of pages in the print ready metafile.
- int print_ready_metafile_page_count_;
+ // |rendered_pages_| tracks which pages need to be printed as well as
+ // the page slot it should be printed in. See GetPageSlotForPage.
+ typedef std::pair<bool, int> PreviewPageInfo;
+ std::vector<PreviewPageInfo> rendered_pages_;
base::TimeDelta document_render_time_;
base::TimeTicks begin_time_;
diff --git a/chrome/renderer/print_web_view_helper_browsertest.cc b/chrome/renderer/print_web_view_helper_browsertest.cc
index b50493c..d897736 100644
--- a/chrome/renderer/print_web_view_helper_browsertest.cc
+++ b/chrome/renderer/print_web_view_helper_browsertest.cc
@@ -42,7 +42,6 @@ void CreatePrintSettingsDictionary(DictionaryValue* dict) {
dict->SetInteger(printing::kSettingCopies, 1);
dict->SetString(printing::kSettingDeviceName, "dummy");
dict->SetInteger(printing::kPreviewRequestID, 12345);
- dict->SetBoolean(printing::kSettingGenerateDraftData, true);
}
} // namespace
@@ -321,12 +320,12 @@ class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase {
void VerifyPrintPreviewGenerated(bool generated_preview) {
const IPC::Message* preview_msg =
render_thread_.sink().GetUniqueMessageMatching(
- PrintHostMsg_MetafileReadyForPrinting::ID);
+ PrintHostMsg_PagesReadyForPreview::ID);
bool did_get_preview_msg = (NULL != preview_msg);
ASSERT_EQ(generated_preview, did_get_preview_msg);
if (did_get_preview_msg) {
- PrintHostMsg_MetafileReadyForPrinting::Param preview_param;
- PrintHostMsg_MetafileReadyForPrinting::Read(preview_msg, &preview_param);
+ PrintHostMsg_PagesReadyForPreview::Param preview_param;
+ PrintHostMsg_PagesReadyForPreview::Read(preview_msg, &preview_param);
EXPECT_NE(0, preview_param.a.document_cookie);
EXPECT_NE(0, preview_param.a.expected_pages_count);
EXPECT_NE(0U, preview_param.a.data_size);
@@ -339,28 +338,6 @@ class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase {
EXPECT_EQ(did_fail, print_failed);
}
- // |page_number| is 0-based.
- void VerifyDidPreviewPage(bool generate_draft_pages, int page_number) {
- bool msg_found = false;
- size_t msg_count = render_thread_.sink().message_count();
- for (size_t i = 0; i < msg_count; ++i) {
- const IPC::Message* msg = render_thread_.sink().GetMessageAt(i);
- if (msg->type() == PrintHostMsg_DidPreviewPage::ID) {
- PrintHostMsg_DidPreviewPage::Param page_param;
- PrintHostMsg_DidPreviewPage::Read(msg, &page_param);
- if (page_param.a.page_number == page_number) {
- msg_found = true;
- if (generate_draft_pages)
- EXPECT_NE(0U, page_param.a.data_size);
- else
- EXPECT_EQ(0U, page_param.a.data_size);
- break;
- }
- }
- }
- ASSERT_EQ(true, msg_found);
- }
-
DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest);
};
@@ -377,50 +354,10 @@ TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) {
// Need to finish simulating print preview.
// Generate the page and finalize it.
- PrintWebViewHelper::Get(view_)->OnContinuePreview();
-
- // Verify that we did create the draft metafile for the first page.
- VerifyDidPreviewPage(true, 0);
- PrintWebViewHelper::Get(view_)->OnContinuePreview();
-
- EXPECT_EQ(0, render_thread_.print_preview_pages_remaining());
- VerifyPrintPreviewFailed(false);
- VerifyPrintPreviewGenerated(true);
- VerifyPagesPrinted(false);
-}
-
-// Test to verify that complete metafile is generated for a subset of pages
-// without creating draft pages.
-TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) {
- LoadHTML(kHelloWorldHTML);
-
- PrintWebViewHelper::Get(view_)->OnInitiatePrintPreview();
- // Fill in some dummy values.
- DictionaryValue dict;
- CreatePrintSettingsDictionary(&dict);
-
- // Set a page range and update the dictionary to generate only the complete
- // metafile with the selected pages. Page numbers used in the dictionary
- // are 1-based.
- DictionaryValue* page_range = new DictionaryValue();
- page_range->SetInteger(printing::kSettingPageRangeFrom, 1);
- page_range->SetInteger(printing::kSettingPageRangeTo, 1);
-
- ListValue* page_range_array = new ListValue();
- page_range_array->Append(page_range);
-
- dict.Set(printing::kSettingPageRange, page_range_array);
- dict.SetBoolean(printing::kSettingGenerateDraftData, false);
-
- PrintWebViewHelper::Get(view_)->OnPrintPreview(dict);
-
- // Need to finish simulating print preview.
- // Generate the page and finalize it.
- PrintWebViewHelper::Get(view_)->OnContinuePreview();
-
- // Verify that we did not create the draft metafile for the first page.
- VerifyDidPreviewPage(false, 0);
- PrintWebViewHelper::Get(view_)->OnContinuePreview();
+ PrintWebViewHelper::Get(view_)->OnContinuePreview(
+ printing::INVALID_PAGE_INDEX);
+ PrintWebViewHelper::Get(view_)->OnContinuePreview(
+ printing::INVALID_PAGE_INDEX);
EXPECT_EQ(0, render_thread_.print_preview_pages_remaining());
VerifyPrintPreviewFailed(false);
diff --git a/chrome/renderer/print_web_view_helper_linux.cc b/chrome/renderer/print_web_view_helper_linux.cc
index 33e9321..0915681 100644
--- a/chrome/renderer/print_web_view_helper_linux.cc
+++ b/chrome/renderer/print_web_view_helper_linux.cc
@@ -29,29 +29,21 @@ void PrintWebViewHelper::RenderPreviewPage(int page_number) {
PrintMsg_PrintPage_Params page_params;
page_params.params = print_preview_context_.print_params();
page_params.page_number = page_number;
- scoped_ptr<printing::Metafile> draft_metafile;
- printing::Metafile* initial_render_metafile =
- print_preview_context_.metafile();
- if (print_preview_context_.IsModifiable() && is_print_ready_metafile_sent_) {
- draft_metafile.reset(new printing::PreviewMetafile);
- initial_render_metafile = draft_metafile.get();
- }
base::TimeTicks begin_time = base::TimeTicks::Now();
PrintPageInternal(page_params,
print_preview_context_.GetPrintCanvasSize(),
- print_preview_context_.frame(), initial_render_metafile);
+ print_preview_context_.frame(),
+ print_preview_context_.metafile());
+
print_preview_context_.RenderedPreviewPage(
base::TimeTicks::Now() - begin_time);
- if (draft_metafile.get()) {
- draft_metafile->FinishDocument();
- } else if (print_preview_context_.IsModifiable() &&
- print_preview_context_.generate_draft_pages()){
- DCHECK(!draft_metafile.get());
- draft_metafile.reset(
+ scoped_ptr<printing::Metafile> page_metafile;
+ if (print_preview_context_.IsModifiable()) {
+ page_metafile.reset(
print_preview_context_.metafile()->GetMetafileForCurrentPage());
}
- PreviewPageRendered(page_number, draft_metafile.get());
+ PreviewPageRendered(page_number, page_metafile.get());
}
bool PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params,
@@ -215,8 +207,6 @@ void PrintWebViewHelper::PrintPageInternal(
SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device);
canvas->unref(); // SkRefPtr and new both took a reference.
printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvas.get(), metafile);
- printing::MetafileSkiaWrapper::SetDraftMode(canvas.get(),
- is_print_ready_metafile_sent_);
frame->printPage(params.page_number, canvas.get());
// TODO(myhuang): We should render the header and the footer.
diff --git a/chrome/renderer/print_web_view_helper_mac.mm b/chrome/renderer/print_web_view_helper_mac.mm
index 0f46239..95ccb7e 100644
--- a/chrome/renderer/print_web_view_helper_mac.mm
+++ b/chrome/renderer/print_web_view_helper_mac.mm
@@ -66,30 +66,19 @@ void PrintWebViewHelper::RenderPreviewPage(int page_number) {
printParams.printable_size.width(),
printParams.printable_size.height());
- scoped_ptr<printing::Metafile> draft_metafile;
printing::Metafile* initial_render_metafile =
print_preview_context_.metafile();
-
-#if defined(USE_SKIA)
- bool need_draft_metafile = print_preview_context_.IsModifiable() &&
- is_print_ready_metafile_sent_;
-#else
- bool need_draft_metafile = print_preview_context_.IsModifiable() &&
- print_preview_context_.generate_draft_pages();
- // NOTE: If the rendering page need to be in draft metafile and print ready
- // metafile, we should always render to the draft metafile first and then
- // copy that into the print ready metafile because CG does not allow us to do
- // it in the other order.
-#endif
-
- if (need_draft_metafile) {
- draft_metafile.reset(new printing::PreviewMetafile());
+ scoped_ptr<printing::PreviewMetafile> draft_metafile;
+#if !defined(USE_SKIA)
+ if (print_preview_context_.IsModifiable()) {
+ draft_metafile.reset(new printing::PreviewMetafile);
if (!draft_metafile->Init()) {
DidFinishPrinting(FAIL_PREVIEW);
return;
}
initial_render_metafile = draft_metafile.get();
}
+#endif
base::TimeTicks begin_time = base::TimeTicks::Now();
RenderPage(printParams.page_size, content_area, scale_factor, page_number,
@@ -97,44 +86,38 @@ void PrintWebViewHelper::RenderPreviewPage(int page_number) {
print_preview_context_.RenderedPreviewPage(
base::TimeTicks::Now() - begin_time);
- if (draft_metafile.get()) {
- draft_metafile->FinishDocument();
-#if !defined(USE_SKIA)
- if (!is_print_ready_metafile_sent_) {
- // With CG, we rendered into a new metafile so we could get it as a draft
- // document. Now we need to add it to print ready document. But the
- // document has already been scaled and adjusted for margins, so do a 1:1
- // drawing.
- printing::Metafile* print_ready_metafile =
- print_preview_context_.metafile();
- bool success = print_ready_metafile->StartPage(
- printParams.page_size, gfx::Rect(printParams.page_size), 1.0);
- DCHECK(success);
- // StartPage unconditionally flips the content over, flip it back since it
- // was already flipped in |draft_metafile|.
- CGContextTranslateCTM(print_ready_metafile->context(), 0,
- printParams.page_size.height());
- CGContextScaleCTM(print_ready_metafile->context(), 1.0, -1.0);
- draft_metafile->RenderPage(1,
- print_ready_metafile->context(),
- draft_metafile->GetPageBounds(1).ToCGRect(),
- false /* shrink_to_fit */,
- false /* stretch_to_fit */,
- true /* center_horizontally */,
- true /* center_vertically */);
- print_ready_metafile->FinishPage();
- }
-#endif
- } else {
+ if (print_preview_context_.IsModifiable()) {
#if defined(USE_SKIA)
- if (print_preview_context_.IsModifiable() &&
- print_preview_context_.generate_draft_pages()) {
- DCHECK(!draft_metafile.get());
- draft_metafile.reset(
- print_preview_context_.metafile()->GetMetafileForCurrentPage());
- }
+ DCHECK(!draft_metafile.get());
+ draft_metafile.reset(
+ print_preview_context_.metafile()->GetMetafileForCurrentPage());
+#else
+ draft_metafile->FinishDocument();
+
+ // With CG, we rendered into a new metafile so we could get it as a draft
+ // document. Now we need to add it to complete document. But the document
+ // has already been scaled and adjusted for margins, so do a 1:1 drawing.
+ printing::Metafile* complete_metafile = print_preview_context_.metafile();
+ bool success = complete_metafile->StartPage(
+ printParams.page_size, gfx::Rect(printParams.page_size), 1.0);
+ DCHECK(success);
+ // StartPage unconditionally flips the content over, flip it back since it
+ // was already flipped in |draft_metafile|.
+ CGContextTranslateCTM(complete_metafile->context(), 0,
+ printParams.page_size.height());
+ CGContextScaleCTM(complete_metafile->context(), 1.0, -1.0);
+
+ draft_metafile->RenderPage(1,
+ complete_metafile->context(),
+ draft_metafile->GetPageBounds(1).ToCGRect(),
+ false /* shrink_to_fit */,
+ false /* stretch_to_fit */,
+ true /* center_horizontally */,
+ true /* center_vertically */);
+ complete_metafile->FinishPage();
#endif
}
+
PreviewPageRendered(page_number, draft_metafile.get());
}
@@ -154,8 +137,6 @@ void PrintWebViewHelper::RenderPage(
canvas->unref(); // SkRefPtr and new both took a reference.
WebKit::WebCanvas* canvasPtr = canvas.get();
printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvasPtr, metafile);
- printing::MetafileSkiaWrapper::SetDraftMode(canvasPtr,
- is_print_ready_metafile_sent_);
#else
bool success = metafile->StartPage(page_size, content_area, scale_factor);
DCHECK(success);
diff --git a/chrome/renderer/print_web_view_helper_win.cc b/chrome/renderer/print_web_view_helper_win.cc
index 25d226d..b43c22f 100644
--- a/chrome/renderer/print_web_view_helper_win.cc
+++ b/chrome/renderer/print_web_view_helper_win.cc
@@ -126,34 +126,24 @@ void PrintWebViewHelper::RenderPreviewPage(int page_number) {
// Calculate the dpi adjustment.
float scale_factor = static_cast<float>(print_params.desired_dpi /
print_params.dpi);
- scoped_ptr<Metafile> draft_metafile;
- printing::Metafile* initial_render_metafile =
- print_preview_context_.metafile();
-
- if (print_preview_context_.IsModifiable() && is_print_ready_metafile_sent_) {
- draft_metafile.reset(new printing::PreviewMetafile);
- initial_render_metafile = draft_metafile.get();
- }
base::TimeTicks begin_time = base::TimeTicks::Now();
printing::Metafile* render_page_result =
RenderPage(print_params, &scale_factor, page_number, true,
- print_preview_context_.frame(), initial_render_metafile);
-
+ print_preview_context_.frame(),
+ print_preview_context_.metafile());
// In the preview flow, RenderPage will never return a new metafile.
- DCHECK_EQ(render_page_result, initial_render_metafile);
+ DCHECK_EQ(render_page_result, print_preview_context_.metafile());
+
print_preview_context_.RenderedPreviewPage(
base::TimeTicks::Now() - begin_time);
- if (draft_metafile.get()) {
- draft_metafile->FinishDocument();
- } else if (print_preview_context_.IsModifiable() &&
- print_preview_context_.generate_draft_pages()){
- DCHECK(!draft_metafile.get());
- draft_metafile.reset(
+ scoped_ptr<printing::Metafile> page_metafile;
+ if (print_preview_context_.IsModifiable()) {
+ page_metafile.reset(
print_preview_context_.metafile()->GetMetafileForCurrentPage());
}
- PreviewPageRendered(page_number, draft_metafile.get());
+ PreviewPageRendered(page_number, page_metafile.get());
}
Metafile* PrintWebViewHelper::RenderPage(
@@ -193,11 +183,8 @@ Metafile* PrintWebViewHelper::RenderPage(
// can't be a stack object.
SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device);
canvas->unref(); // SkRefPtr and new both took a reference.
- if (is_preview) {
+ if (is_preview)
printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvas.get(), metafile);
- printing::MetafileSkiaWrapper::SetDraftMode(canvas.get(),
- is_print_ready_metafile_sent_);
- }
float webkit_scale_factor = frame->printPage(page_number, canvas.get());
if (*scale_factor <= 0 || webkit_scale_factor <= 0) {
diff --git a/printing/print_job_constants.cc b/printing/print_job_constants.cc
index dc864e6..0c50b44 100644
--- a/printing/print_job_constants.cc
+++ b/printing/print_job_constants.cc
@@ -27,9 +27,6 @@ const char kSettingDeviceName[] = "deviceName";
// Print job duplex mode.
const char kSettingDuplexMode[] = "duplex";
-// True, when a new set of draft preview data is required.
-const char kSettingGenerateDraftData[] = "generateDraftData";
-
// Page orientation: true for landscape, false for portrait.
const char kSettingLandscape[] = "landscape";
diff --git a/printing/print_job_constants.h b/printing/print_job_constants.h
index b8bc65e..8c6103b 100644
--- a/printing/print_job_constants.h
+++ b/printing/print_job_constants.h
@@ -14,7 +14,6 @@ extern const char kSettingColor[];
extern const char kSettingCopies[];
extern const char kSettingDeviceName[];
extern const char kSettingDuplexMode[];
-extern const char kSettingGenerateDraftData[];
extern const char kSettingLandscape[];
extern const char kSettingPageRange[];
extern const char kSettingPageRangeFrom[];