Index: chrome/renderer/print_web_view_helper.cc |
=================================================================== |
--- chrome/renderer/print_web_view_helper.cc (revision 92822) |
+++ chrome/renderer/print_web_view_helper.cc (working copy) |
@@ -18,7 +18,7 @@ |
#include "chrome/renderer/prerender/prerender_helper.h" |
#include "content/renderer/render_view.h" |
#include "grit/generated_resources.h" |
-#include "printing/metafile.h" |
+#include "printing/metafile_impl.h" |
#include "printing/print_job_constants.h" |
#include "printing/units.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebConsoleMessage.h" |
@@ -97,10 +97,9 @@ |
PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( |
const PrintMsg_Print_Params& print_params, |
WebFrame* frame, |
- WebNode* node, |
- WebView* web_view) |
+ WebNode* node) |
: frame_(frame), |
- web_view_(web_view), |
+ web_view_(frame->view()), |
expected_pages_count_(0), |
use_browser_overlays_(true), |
finished_(false) { |
@@ -124,9 +123,9 @@ |
if (WebFrame* web_frame = web_view_->mainFrame()) |
prev_scroll_offset_ = web_frame->scrollOffset(); |
- prev_view_size_ = web_view->size(); |
+ prev_view_size_ = web_view_->size(); |
- web_view->resize(print_layout_size); |
+ web_view_->resize(print_layout_size); |
WebNode node_to_print; |
if (node) |
@@ -154,11 +153,8 @@ |
: RenderViewObserver(render_view), |
RenderViewObserverTracker<PrintWebViewHelper>(render_view), |
print_web_view_(NULL), |
- script_initiated_preview_frame_(NULL), |
- context_menu_preview_node_(NULL), |
user_cancelled_scripted_print_count_(0), |
- notify_browser_of_print_failure_(true), |
- preview_page_count_(0) { |
+ notify_browser_of_print_failure_(true) { |
is_preview_ = switches::IsPrintPreviewEnabled(); |
} |
@@ -179,8 +175,7 @@ |
IncrementScriptedPrintCount(); |
if (is_preview_) { |
- script_initiated_preview_frame_ = frame; |
- context_menu_preview_node_.reset(); |
+ print_preview_context_.InitWithFrame(frame); |
RequestPrintPreview(); |
} else { |
Print(frame, NULL); |
@@ -191,16 +186,16 @@ |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(PrintWebViewHelper, message) |
IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages) |
- IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, |
- OnInitiatePrintPreview) |
+ IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview) |
IPC_MESSAGE_HANDLER(PrintMsg_PrintNodeUnderContextMenu, |
OnPrintNodeUnderContextMenu) |
IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview) |
- IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, |
- OnPrintForPrintPreview) |
+ IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview) |
IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone) |
IPC_MESSAGE_HANDLER(PrintMsg_ResetScriptedPrintCount, |
ResetScriptedPrintCount) |
+ IPC_MESSAGE_HANDLER(PrintMsg_ContinuePreview, OnContinuePreview) |
+ IPC_MESSAGE_HANDLER(PrintMsg_AbortPreview, OnAbortPreview) |
IPC_MESSAGE_HANDLER(PrintMsg_PreviewPrintingRequestCancelled, |
DisplayPrintJobError) |
IPC_MESSAGE_UNHANDLED(handled = false) |
@@ -268,23 +263,117 @@ |
void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { |
DCHECK(is_preview_); |
- DCHECK(!context_menu_preview_node_.get() || !script_initiated_preview_frame_); |
+ print_preview_context_.OnPrintPreview(); |
- if (script_initiated_preview_frame_) { |
- // Script initiated print preview. |
- PrintPreview(script_initiated_preview_frame_, NULL, settings); |
- } else if (context_menu_preview_node_.get()) { |
- // User initiated - print node under context menu. |
- PrintPreview(context_menu_preview_node_->document().frame(), |
- context_menu_preview_node_.get(), settings); |
- } else { |
- // User initiated - normal print preview. |
- WebFrame* frame; |
- if (GetPrintFrame(&frame)) |
- PrintPreview(frame, NULL, settings); |
+ if (!InitPrintSettings(print_preview_context_.frame(), |
+ print_preview_context_.node())) { |
+ NOTREACHED(); |
+ return; |
} |
+ |
+ if (!UpdatePrintSettings(settings)) { |
+ DidFinishPrinting(FAIL_PREVIEW); |
+ return; |
+ } |
+ |
+ if (print_pages_params_->params.preview_request_id != 0 && |
+ old_print_pages_params_.get() && |
+ PrintMsg_Print_Params_IsEqual(*old_print_pages_params_, |
+ *print_pages_params_)) { |
+ PrintHostMsg_DidPreviewDocument_Params preview_params; |
+ preview_params.reuse_existing_data = true; |
+ preview_params.data_size = 0; |
+ preview_params.document_cookie = |
+ print_pages_params_->params.document_cookie; |
+ preview_params.expected_pages_count = |
+ print_preview_context_.total_page_count(); |
+ preview_params.modifiable = print_preview_context_.IsModifiable(); |
+ preview_params.preview_request_id = |
+ print_pages_params_->params.preview_request_id; |
+ |
+ Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params)); |
+ return; |
+ } |
+ |
+ // PDF printer device supports alpha blending. |
+ print_pages_params_->params.supports_alpha_blend = true; |
+ if (!CreatePreviewDocument()) |
+ DidFinishPrinting(FAIL_PREVIEW); |
} |
+bool PrintWebViewHelper::CreatePreviewDocument() { |
+ PrintMsg_Print_Params printParams = print_pages_params_->params; |
+ UpdatePrintableSizeInPrintParameters(print_preview_context_.frame(), |
+ print_preview_context_.node(), |
+ &printParams); |
+ |
+ const std::vector<int>& pages = print_pages_params_->pages; |
+ if (!print_preview_context_.CreatePreviewDocument(printParams, pages)) |
+ return false; |
+ int page_count = print_preview_context_.total_page_count(); |
+ int document_cookie = print_pages_params_->params.document_cookie; |
+ Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), document_cookie, |
+ page_count)); |
+ PreviewPageRendered(-1); |
+ return true; |
+} |
+ |
+void PrintWebViewHelper::OnContinuePreview() { |
+ // Spurious message. We already finished/cancelled/aborted the print preview. |
+ if (!print_preview_context_.IsBusy()) |
+ return; |
+ |
+ int page_number = print_preview_context_.GetNextPageNumber(); |
+ if (page_number >= 0) { |
+ // Continue generating the print preview. |
+ RenderPreviewPage(page_number); |
+ return; |
+ } |
+ |
+ // Finished generating preview. Finalize the document. |
+ if (FinalizePreviewDocument()) |
+ DidFinishPrinting(OK); |
+ else |
+ DidFinishPrinting(FAIL_PREVIEW); |
+} |
+ |
+void PrintWebViewHelper::OnAbortPreview() { |
+ DidFinishPrinting(ABORT_PREVIEW); |
+ return; |
+} |
+ |
+bool PrintWebViewHelper::FinalizePreviewDocument() { |
+ print_preview_context_.FinalizePreviewDocument(); |
+ |
+ // Get the size of the resulting metafile. |
+ printing::Metafile* metafile = print_preview_context_.metafile(); |
+ uint32 buf_size = metafile->GetDataSize(); |
+ DCHECK_GT(buf_size, 0u); |
+ |
+ PrintHostMsg_DidPreviewDocument_Params preview_params; |
+ preview_params.reuse_existing_data = false; |
+ preview_params.data_size = buf_size; |
+ preview_params.document_cookie = print_pages_params_->params.document_cookie; |
+ preview_params.expected_pages_count = |
+ print_preview_context_.total_page_count(); |
+ preview_params.modifiable = print_preview_context_.IsModifiable(); |
+ preview_params.preview_request_id = |
+ print_pages_params_->params.preview_request_id; |
+ |
+ // Ask the browser to create the shared memory for us. |
+ if (!CopyMetafileDataToSharedMem(metafile, |
+ &(preview_params.metafile_data_handle))) { |
+ return false; |
+ } |
+#if defined(OS_WIN) |
+ Send(new PrintHostMsg_DuplicateSection(routing_id(), |
+ preview_params.metafile_data_handle, |
+ &preview_params.metafile_data_handle)); |
+#endif |
+ Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params)); |
+ return true; |
+} |
+ |
void PrintWebViewHelper::OnPrintingDone(bool success) { |
notify_browser_of_print_failure_ = false; |
DidFinishPrinting(success ? OK : FAIL_PRINT); |
@@ -300,8 +389,7 @@ |
// Make a copy of the node, in case RenderView::OnContextMenuClosed resets |
// its |context_menu_node_|. |
if (is_preview_) { |
- context_menu_preview_node_.reset(new WebNode(context_menu_node)); |
- script_initiated_preview_frame_ = NULL; |
+ print_preview_context_.InitWithNode(context_menu_node); |
RequestPrintPreview(); |
} else { |
WebNode duplicate_node(context_menu_node); |
@@ -311,9 +399,11 @@ |
void PrintWebViewHelper::OnInitiatePrintPreview() { |
DCHECK(is_preview_); |
- script_initiated_preview_frame_ = NULL; |
- context_menu_preview_node_.reset(); |
- RequestPrintPreview(); |
+ WebFrame* frame; |
+ if (GetPrintFrame(&frame)) { |
+ print_preview_context_.InitWithFrame(frame); |
+ RequestPrintPreview(); |
+ } |
} |
void PrintWebViewHelper::Print(WebKit::WebFrame* frame, WebKit::WebNode* node) { |
@@ -332,7 +422,7 @@ |
// a scope for itself (see comments on PrepareFrameAndViewForPrint). |
{ |
PrepareFrameAndViewForPrint prep_frame_view( |
- print_pages_params_->params, frame, node, frame->view()); |
+ print_pages_params_->params, frame, node); |
expected_pages_count = prep_frame_view.GetExpectedPageCount(); |
if (expected_pages_count) |
use_browser_overlays = prep_frame_view.ShouldUseBrowserOverlays(); |
@@ -357,44 +447,6 @@ |
ResetScriptedPrintCount(); |
} |
-void PrintWebViewHelper::PrintPreview(WebKit::WebFrame* frame, |
- WebKit::WebNode* node, |
- const DictionaryValue& settings) { |
- DCHECK(is_preview_); |
- |
- if (!InitPrintSettings(frame, node)) { |
- NOTREACHED() << "Failed to initialize print page settings"; |
- return; |
- } |
- |
- if (!UpdatePrintSettings(settings)) { |
- DidFinishPrinting(FAIL_PREVIEW); |
- return; |
- } |
- |
- if (print_pages_params_->params.preview_request_id != 0 && |
- old_print_pages_params_.get() && |
- PrintMsg_Print_Params_IsEqual(*old_print_pages_params_, |
- *print_pages_params_)) { |
- PrintHostMsg_DidPreviewDocument_Params preview_params; |
- preview_params.reuse_existing_data = true; |
- preview_params.data_size = 0; |
- preview_params.document_cookie = |
- print_pages_params_->params.document_cookie; |
- preview_params.expected_pages_count = preview_page_count_; |
- preview_params.modifiable = IsModifiable(frame, node); |
- preview_params.preview_request_id = |
- print_pages_params_->params.preview_request_id; |
- |
- Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params)); |
- return; |
- } |
- |
- // Render Pages for preview. |
- if (!RenderPagesForPreview(frame, node)) |
- DidFinishPrinting(FAIL_PREVIEW); |
-} |
- |
void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { |
bool store_print_pages_params = true; |
if (result == FAIL_PRINT) { |
@@ -405,13 +457,17 @@ |
Send(new PrintHostMsg_PrintingFailed(routing_id(), cookie)); |
} |
} else if (result == FAIL_PREVIEW) { |
+ DCHECK(is_preview_); |
+ store_print_pages_params = false; |
int cookie = print_pages_params_->params.document_cookie; |
+ Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); |
+ print_preview_context_.Abort(); |
+ } else if (result == ABORT_PREVIEW) { |
+ DCHECK(is_preview_); |
store_print_pages_params = false; |
- if (notify_browser_of_print_failure_) { |
- Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); |
- } else { |
- Send(new PrintHostMsg_PrintPreviewCancelled(routing_id(), cookie)); |
- } |
+ print_preview_context_.Abort(); |
+ } else if (result == OK && is_preview_) { |
+ print_preview_context_.Finished(); |
} |
if (print_web_view_) { |
@@ -462,10 +518,7 @@ |
PrintMsg_Print_Params printParams = params.params; |
UpdatePrintableSizeInPrintParameters(frame, node, &printParams); |
- PrepareFrameAndViewForPrint prep_frame_view(printParams, |
- frame, |
- node, |
- frame->view()); |
+ PrepareFrameAndViewForPrint prep_frame_view(printParams, frame, node); |
int page_count = prep_frame_view.GetExpectedPageCount(); |
if (!page_count) |
return false; |
@@ -575,16 +628,6 @@ |
ConvertPixelsToPointDouble(margin_left_in_pixels); |
} |
-bool PrintWebViewHelper::IsModifiable(WebKit::WebFrame* frame, |
- WebKit::WebNode* node) { |
- if (node) |
- return false; |
- std::string mime(frame->dataSource()->response().mimeType().utf8()); |
- if (mime == "application/pdf") |
- return false; |
- return true; |
-} |
- |
void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( |
WebFrame* frame, |
WebNode* node, |
@@ -595,7 +638,7 @@ |
double margin_right_in_points; |
double margin_bottom_in_points; |
double margin_left_in_points; |
- PrepareFrameAndViewForPrint prepare(*params, frame, node, frame->view()); |
+ PrepareFrameAndViewForPrint prepare(*params, frame, node); |
PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params, |
&content_width_in_points, &content_height_in_points, |
&margin_top_in_points, &margin_right_in_points, |
@@ -626,6 +669,7 @@ |
bool PrintWebViewHelper::InitPrintSettings(WebKit::WebFrame* frame, |
WebKit::WebNode* node) { |
+ DCHECK(frame); |
PrintMsg_PrintPages_Params settings; |
// TODO(abodenha@chromium.org) It doesn't make sense to do this if our |
@@ -751,42 +795,6 @@ |
} |
} |
-bool PrintWebViewHelper::RenderPagesForPreview(WebKit::WebFrame* frame, |
- WebKit::WebNode* node) { |
- PrintMsg_PrintPages_Params print_settings = *print_pages_params_; |
- // PDF printer device supports alpha blending. |
- print_settings.params.supports_alpha_blend = true; |
- // TODO(kmadhusu): Handle print selection. |
- return CreatePreviewDocument(print_settings, frame, node); |
-} |
- |
-base::TimeTicks PrintWebViewHelper::ReportPreviewPageRenderTime( |
- base::TimeTicks start_time) { |
- base::TimeTicks now = base::TimeTicks::Now(); |
- UMA_HISTOGRAM_TIMES("PrintPreview.RenderPDFPageTime", now - start_time); |
- return now; |
-} |
- |
-void PrintWebViewHelper::ReportTotalPreviewGenerationTime( |
- int selected_pages_length, int total_pages, |
- base::TimeDelta render_time, base::TimeDelta total_time) { |
- if (selected_pages_length == 0) |
- selected_pages_length = total_pages; |
- |
- if (selected_pages_length <= 0) { |
- // This shouldn't happen, but this makes sure it doesn't affect the |
- // statistics if it does. |
- return; |
- } |
- |
- UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderToPDFTime", |
- render_time); |
- UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTime", |
- total_time); |
- UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTimeAvgPerPage", |
- total_time / selected_pages_length); |
-} |
- |
#if defined(OS_POSIX) |
bool PrintWebViewHelper::CopyMetafileDataToSharedMem( |
printing::Metafile* metafile, |
@@ -812,6 +820,7 @@ |
WebKit::WebFrame* frame) { |
const int kMinSecondsToIgnoreJavascriptInitiatedPrint = 2; |
const int kMaxSecondsToIgnoreJavascriptInitiatedPrint = 32; |
+ bool too_frequent = false; |
// Check if there is script repeatedly trying to print and ignore it if too |
// frequent. The first 3 times, we use a constant wait time, but if this |
@@ -829,15 +838,21 @@ |
kMaxSecondsToIgnoreJavascriptInitiatedPrint); |
} |
if (diff.InSeconds() < min_wait_seconds) { |
- WebString message(WebString::fromUTF8( |
- "Ignoring too frequent calls to print().")); |
- frame->addMessageToConsole(WebConsoleMessage( |
- WebConsoleMessage::LevelWarning, |
- message)); |
- return true; |
+ too_frequent = true; |
} |
} |
- return false; |
+ |
+ if (!too_frequent && print_preview_context_.IsBusy()) |
+ too_frequent = true; |
+ |
+ if (!too_frequent) |
+ return false; |
+ |
+ WebString message(WebString::fromUTF8( |
+ "Ignoring too frequent calls to print().")); |
+ frame->addMessageToConsole(WebConsoleMessage(WebConsoleMessage::LevelWarning, |
+ message)); |
+ return true; |
} |
void PrintWebViewHelper::ResetScriptedPrintCount() { |
@@ -865,10 +880,184 @@ |
Send(new PrintHostMsg_RequestPrintPreview(routing_id())); |
} |
-bool PrintWebViewHelper::PreviewPageRendered(int page_number) { |
- bool cancel = false; |
- Send(new PrintHostMsg_DidPreviewPage(routing_id(), page_number, &cancel)); |
- if (cancel) |
- notify_browser_of_print_failure_ = false; |
- return !cancel; |
+void PrintWebViewHelper::PreviewPageRendered(int page_number) { |
+ Send(new PrintHostMsg_DidPreviewPage(routing_id(), page_number)); |
} |
+ |
+PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() |
+ : frame_(NULL), |
+ total_page_count_(0), |
+ actual_page_count_(0), |
+ current_page_number_(0), |
+ state_(UNINITIALIZED) { |
+} |
+ |
+PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() { |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::InitWithFrame( |
+ WebKit::WebFrame* web_frame) { |
+ DCHECK(web_frame); |
+ if (IsReadyToRender()) |
+ return; |
+ state_ = INITIALIZED; |
+ frame_ = web_frame; |
+ node_.reset(); |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::InitWithNode( |
+ const WebKit::WebNode& web_node) { |
+ DCHECK(!web_node.isNull()); |
+ if (IsReadyToRender()) |
+ return; |
+ state_ = INITIALIZED; |
+ frame_ = web_node.document().frame(); |
+ node_.reset(new WebNode(web_node)); |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() { |
+ DCHECK(IsReadyToRender()); |
+ ClearContext(); |
+} |
+ |
+bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( |
+ const PrintMsg_Print_Params& printParams, |
+ const std::vector<int>& pages) { |
+ DCHECK(IsReadyToRender()); |
+ state_ = RENDERING; |
+ |
+ print_params_.reset(new PrintMsg_Print_Params(printParams)); |
+ |
+ metafile_.reset(new printing::PreviewMetafile); |
+ if (!metafile_->Init()) |
+ return false; |
+ |
+ // Need to make sure old object gets destroyed first. |
+ prep_frame_view_.reset(new PrepareFrameAndViewForPrint(printParams, frame(), |
+ node())); |
+ total_page_count_ = prep_frame_view_->GetExpectedPageCount(); |
+ if (total_page_count_ == 0) |
+ return false; |
+ |
+ current_page_number_ = 0; |
+ if (pages.empty()) { |
+ actual_page_count_ = total_page_count_; |
+ rendered_pages_ = std::vector<bool>(total_page_count_, false); |
+ } else { |
+ actual_page_count_ = pages.size(); |
+ rendered_pages_ = std::vector<bool>(total_page_count_, true); |
+ for (int i = 0; i < actual_page_count_; ++i) { |
+ int page_number = pages[i]; |
+ if (page_number < 0 || page_number >= total_page_count_) |
+ return false; |
+ rendered_pages_[page_number] = false; |
+ } |
+ } |
+ |
+ document_render_time_ = base::TimeDelta(); |
+ begin_time_ = base::TimeTicks::Now(); |
+ |
+ return true; |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::RenderedPreviewPage( |
+ const base::TimeDelta& page_time) { |
+ DCHECK_EQ(RENDERING, state_); |
+ document_render_time_ += page_time; |
+ UMA_HISTOGRAM_TIMES("PrintPreview.RenderPDFPageTime", page_time); |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::FinalizePreviewDocument() { |
+ DCHECK_EQ(RENDERING, state_); |
+ state_ = DONE; |
+ |
+ base::TimeTicks begin_time = base::TimeTicks::Now(); |
+ |
+ prep_frame_view_->FinishPrinting(); |
+ metafile_->FinishDocument(); |
+ |
+ if (actual_page_count_ <= 0) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderToPDFTime", |
+ document_render_time_); |
+ base::TimeDelta total_time = (base::TimeTicks::Now() - begin_time) + |
+ document_render_time_; |
+ UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTime", |
+ total_time); |
+ UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTimeAvgPerPage", |
+ total_time / actual_page_count_); |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::Finished() { |
+ DCHECK_EQ(DONE, state_); |
+ ClearContext(); |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::Abort() { |
+ state_ = UNINITIALIZED; |
+ ClearContext(); |
+ frame_ = NULL; |
+ node_.reset(); |
+} |
+ |
+int PrintWebViewHelper::PrintPreviewContext::GetNextPageNumber() { |
+ DCHECK_EQ(RENDERING, state_); |
+ while (current_page_number_ < total_page_count_ && |
+ rendered_pages_[current_page_number_]) { |
+ ++current_page_number_; |
+ } |
+ if (current_page_number_ == total_page_count_) |
+ return -1; |
+ rendered_pages_[current_page_number_] = true; |
+ return current_page_number_++; |
+} |
+ |
+bool PrintWebViewHelper::PrintPreviewContext::IsReadyToRender() const { |
+ return state_ != UNINITIALIZED; |
+} |
+ |
+bool PrintWebViewHelper::PrintPreviewContext::IsBusy() const { |
+ return state_ == INITIALIZED || state_ == RENDERING; |
+} |
+ |
+bool PrintWebViewHelper::PrintPreviewContext::IsModifiable() const { |
+ if (node()) |
+ return false; |
+ std::string mime(frame()->dataSource()->response().mimeType().utf8()); |
+ return mime != "application/pdf"; |
+} |
+ |
+WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const { |
+ return frame_; |
+} |
+ |
+WebKit::WebNode* PrintWebViewHelper::PrintPreviewContext::node() const { |
+ return node_.get(); |
+} |
+ |
+int PrintWebViewHelper::PrintPreviewContext::total_page_count() const { |
+ return total_page_count_; |
+} |
+ |
+printing::Metafile* PrintWebViewHelper::PrintPreviewContext::metafile() const { |
+ return metafile_.get(); |
+} |
+ |
+const PrintMsg_Print_Params& |
+PrintWebViewHelper::PrintPreviewContext::print_params() const { |
+ return *print_params_; |
+} |
+ |
+const gfx::Size& |
+PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { |
+ return prep_frame_view_->GetPrintCanvasSize(); |
+} |
+ |
+void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
+ prep_frame_view_.reset(); |
+ metafile_.reset(); |
+ rendered_pages_.clear(); |
+} |