| Index: chrome/browser/printing/print_job_worker.cc
|
| diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc
|
| index 1162cc5426117ccb9b3289386f035350812fb777..54082cf440fadc66bf6a75dafeffebd909f703e9 100644
|
| --- a/chrome/browser/printing/print_job_worker.cc
|
| +++ b/chrome/browser/printing/print_job_worker.cc
|
| @@ -69,6 +69,11 @@ void PrintJobWorker::SetNewOwner(PrintJobWorkerOwner* new_owner) {
|
| owner_ = new_owner;
|
| }
|
|
|
| +void PrintJobWorker::SetPrintDestination(
|
| + PrintDestinationInterface* destination) {
|
| + destination_ = destination;
|
| +}
|
| +
|
| void PrintJobWorker::GetSettings(bool ask_user_for_settings,
|
| gfx::NativeView parent_view,
|
| int document_page_count,
|
| @@ -85,7 +90,9 @@ void PrintJobWorker::GetSettings(bool ask_user_for_settings,
|
| // MessageLoop::current()->SetNestableTasksAllowed(true);
|
| printing_context_->set_margin_type(margin_type);
|
|
|
| - if (ask_user_for_settings) {
|
| + // When we delegate to a destination, we don't ask the user for settings.
|
| + // TODO(mad): Ask the destination for settings.
|
| + if (ask_user_for_settings && destination_.get() == NULL) {
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| base::Bind(&HoldRefCallback, make_scoped_refptr(owner_),
|
| @@ -241,6 +248,8 @@ void PrintJobWorker::OnNewPage() {
|
| }
|
| // We have enough information to initialize page_number_.
|
| page_number_.Init(document_->settings(), page_count);
|
| + if (destination_.get() != NULL)
|
| + destination_->SetPageCount(page_count);
|
| }
|
| DCHECK_NE(page_number_, PageNumber::npos());
|
|
|
| @@ -308,6 +317,18 @@ void PrintJobWorker::SpoolPage(PrintedPage* page) {
|
| return;
|
| }
|
|
|
| + if (destination_.get() != NULL) {
|
| + std::vector<uint8> metabytes(page->metafile()->GetDataSize());
|
| + bool success = page->metafile()->GetData(
|
| + reinterpret_cast<void*>(&metabytes[0]), metabytes.size());
|
| + DCHECK(success) << "Failed to get metafile data.";
|
| + destination_->SetPageContent(
|
| + page->page_number(),
|
| + reinterpret_cast<void*>(&metabytes[0]),
|
| + metabytes.size());
|
| + return;
|
| + }
|
| +
|
| // Actual printing.
|
| #if defined(OS_WIN) || defined(OS_MACOSX)
|
| document_->RenderPrintedPage(*page, printing_context_->context());
|
|
|