// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/printing/browser/print_manager.h" #include "build/build_config.h" #include "components/printing/common/print_messages.h" namespace printing { PrintManager::PrintManager(content::WebContents* contents) : content::WebContentsObserver(contents), number_pages_(0), cookie_(0) { } PrintManager::~PrintManager() { } bool PrintManager::OnMessageReceived( const IPC::Message& message, content::RenderFrameHost* render_frame_host) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PrintManager, message) IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetPrintedPagesCount, OnDidGetPrintedPagesCount) IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetDocumentCookie, OnDidGetDocumentCookie) IPC_MESSAGE_HANDLER(PrintHostMsg_PrintingFailed, OnPrintingFailed) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } void PrintManager::OnDidGetPrintedPagesCount(int cookie, int number_pages) { DCHECK_GT(cookie, 0); DCHECK_GT(number_pages, 0); number_pages_ = number_pages; } void PrintManager::OnDidGetDocumentCookie(int cookie) { cookie_ = cookie; } void PrintManager::OnPrintingFailed(int cookie) { if (cookie != cookie_) { NOTREACHED(); return; } #if defined(OS_ANDROID) PdfWritingDone(0); #endif } void PrintManager::PrintingRenderFrameDeleted() { #if defined(OS_ANDROID) PdfWritingDone(0); #endif } #if defined(OS_ANDROID) void PrintManager::PdfWritingDone(int page_count) { if (!pdf_writing_done_callback_.is_null()) pdf_writing_done_callback_.Run(file_descriptor().fd, page_count); // Invalidate the file descriptor so it doesn't get reused. file_descriptor_ = base::FileDescriptor(-1, false); } #endif } // namespace printing