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

Unified Diff: chrome/browser/printing/pdf_to_emf_converter.cc

Issue 2656303005: no_messages
Patch Set: Created 3 years, 11 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
« no previous file with comments | « chrome/browser/printing/pdf_to_emf_converter.h ('k') | chrome/browser/printing/print_job.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/printing/pdf_to_emf_converter.cc
diff --git a/chrome/browser/printing/pdf_to_emf_converter.cc b/chrome/browser/printing/pdf_to_emf_converter.cc
index 72671c0feeef1b0a939de7b2f3650e2bb320c913..bf73cb05a1252da73c05a7b6ab4cc9f7116f6522 100644
--- a/chrome/browser/printing/pdf_to_emf_converter.cc
+++ b/chrome/browser/printing/pdf_to_emf_converter.cc
@@ -91,6 +91,20 @@ class LazyEmf : public MetafilePlayer {
DISALLOW_COPY_AND_ASSIGN(LazyEmf);
};
+// Postscript metafile subclass to override SafePlayback.
+class PostScriptMetaFile : public LazyEmf {
+ public:
+ PostScriptMetaFile(const scoped_refptr<RefCountedTempDir>& temp_dir,
+ ScopedTempFile file)
+ : LazyEmf(temp_dir, std::move(file)) {}
+
+ protected:
+ // MetafilePlayer:
+ bool SafePlayback(HDC hdc) const override;
+
+ DISALLOW_COPY_AND_ASSIGN(PostScriptMetaFile);
+};
+
// Class for converting PDF to another format for printing (Emf, Postscript).
// Class uses 3 threads: UI, IO and FILE.
// Internal workflow is following:
@@ -158,20 +172,19 @@ class PdfConverterUtilityProcessHostClient
DISALLOW_COPY_AND_ASSIGN(GetPageCallbackData);
};
- ~PdfConverterUtilityProcessHostClient() override;
+ bool OnMessageReceived(const IPC::Message& message) override;
// Helper functions: must be overridden by subclasses
// Set the process name
- virtual base::string16 GetName() const = 0;
+ base::string16 GetName() const;
// Create a metafileplayer subclass file from a temporary file.
- virtual std::unique_ptr<MetafilePlayer> GetFileFromTemp(
+ std::unique_ptr<MetafilePlayer> GetFileFromTemp(
std::unique_ptr<base::File, content::BrowserThread::DeleteOnFileThread>
- temp_file) = 0;
+ temp_file);
// Send the messages to Start, GetPage, and Stop.
- virtual void SendStartMessage(IPC::PlatformFileForTransit transit) = 0;
- virtual void SendGetPageMessage(int page_number,
- IPC::PlatformFileForTransit transit) = 0;
- virtual void SendStopMessage() = 0;
+ void SendStartMessage(IPC::PlatformFileForTransit transit);
+ void SendGetPageMessage(int page_number, IPC::PlatformFileForTransit transit);
+ void SendStopMessage();
// Message handlers:
void OnPageCount(int page_count);
@@ -182,6 +195,10 @@ class PdfConverterUtilityProcessHostClient
void OnTempFileReady(GetPageCallbackData* callback_data,
ScopedTempFile temp_file);
+ // Additional message handler needed for Pdf to Emf
+ void OnPreCacheFontCharacters(const LOGFONT& log_font,
+ const base::string16& characters);
+
scoped_refptr<RefCountedTempDir> temp_dir_;
// Used to suppress callbacks after PdfConverter is deleted.
@@ -199,65 +216,21 @@ class PdfConverterUtilityProcessHostClient
// Use containers that keeps element pointers valid after push() and pop().
using GetPageCallbacks = std::queue<GetPageCallbackData>;
GetPageCallbacks get_page_callbacks_;
-};
-
-// Converts PDF into Emf.
-class PdfToEmfUtilityProcessHostClient
- : public PdfConverterUtilityProcessHostClient {
- public:
- PdfToEmfUtilityProcessHostClient(base::WeakPtr<PdfConverterImpl> converter,
- const PdfRenderSettings& settings)
- : PdfConverterUtilityProcessHostClient(converter, settings) {}
-
- bool OnMessageReceived(const IPC::Message& message) override;
-
- private:
- ~PdfToEmfUtilityProcessHostClient() override;
- // Helpers to send messages and set process name
- base::string16 GetName() const override;
- std::unique_ptr<MetafilePlayer> GetFileFromTemp(
- std::unique_ptr<base::File, content::BrowserThread::DeleteOnFileThread>
- temp_file) override;
- void SendStartMessage(IPC::PlatformFileForTransit transit) override;
- void SendGetPageMessage(int page_number,
- IPC::PlatformFileForTransit transit) override;
- void SendStopMessage() override;
- // Additional message handler needed for Pdf to Emf
- void OnPreCacheFontCharacters(const LOGFONT& log_font,
- const base::string16& characters);
-
- DISALLOW_COPY_AND_ASSIGN(PdfToEmfUtilityProcessHostClient);
+ DISALLOW_COPY_AND_ASSIGN(PdfConverterUtilityProcessHostClient);
};
-// Converts PDF into PostScript.
-class PdfToPostScriptUtilityProcessHostClient
- : public PdfConverterUtilityProcessHostClient {
- public:
- PdfToPostScriptUtilityProcessHostClient(
- base::WeakPtr<PdfConverterImpl> converter,
- const PdfRenderSettings& settings)
- : PdfConverterUtilityProcessHostClient(converter, settings) {}
-
- // UtilityProcessHostClient implementation.
- bool OnMessageReceived(const IPC::Message& message) override;
-
- private:
- // Helpers to send messages and set process name
- base::string16 GetName() const override;
- std::unique_ptr<MetafilePlayer> GetFileFromTemp(
- std::unique_ptr<base::File, content::BrowserThread::DeleteOnFileThread>
- temp_file) override;
- void SendStartMessage(IPC::PlatformFileForTransit transit) override;
- void SendGetPageMessage(int page_number,
- IPC::PlatformFileForTransit transit) override;
- void SendStopMessage() override;
-
- // Additional message handler needed for Pdf to PostScript
- void OnPageDone(bool success);
-
- DISALLOW_COPY_AND_ASSIGN(PdfToPostScriptUtilityProcessHostClient);
-};
+std::unique_ptr<MetafilePlayer>
+PdfConverterUtilityProcessHostClient::GetFileFromTemp(
+ std::unique_ptr<base::File, content::BrowserThread::DeleteOnFileThread>
+ temp_file) {
+ if (settings_.mode == PdfRenderSettings::Mode::POSTSCRIPT_LEVEL2 ||
+ settings_.mode == PdfRenderSettings::Mode::POSTSCRIPT_LEVEL3) {
+ return base::MakeUnique<PostScriptMetaFile>(temp_dir_,
+ std::move(temp_file));
+ }
+ return base::MakeUnique<LazyEmf>(temp_dir_, std::move(temp_file));
+}
class PdfConverterImpl : public PdfConverter {
public:
@@ -368,23 +341,6 @@ bool LazyEmf::LoadEmf(Emf* emf) const {
return emf->InitFromData(data.data(), data.size());
}
-// Postscript metafile subclass to override SafePlayback.
-class PostScriptMetaFile : public LazyEmf {
- public:
- PostScriptMetaFile(const scoped_refptr<RefCountedTempDir>& temp_dir,
- ScopedTempFile file)
- : LazyEmf(temp_dir, std::move(file)) {}
- ~PostScriptMetaFile() override;
-
- protected:
- // MetafilePlayer:
- bool SafePlayback(HDC hdc) const override;
-
- DISALLOW_COPY_AND_ASSIGN(PostScriptMetaFile);
-};
-
-PostScriptMetaFile::~PostScriptMetaFile() {}
-
bool PostScriptMetaFile::SafePlayback(HDC hdc) const {
// TODO(thestig): Fix destruction of metafiles. For some reasons
// instances of Emf are not deleted. https://crbug.com/260806
@@ -421,8 +377,6 @@ PdfConverterUtilityProcessHostClient::PdfConverterUtilityProcessHostClient(
const PdfRenderSettings& settings)
: converter_(converter), settings_(settings) {}
-PdfConverterUtilityProcessHostClient::~PdfConverterUtilityProcessHostClient() {}
-
void PdfConverterUtilityProcessHostClient::Start(
const scoped_refptr<base::RefCountedMemory>& data,
const PdfConverter::StartCallback& start_callback) {
@@ -564,10 +518,7 @@ void PdfConverterUtilityProcessHostClient::OnFailed() {
utility_process_host_.reset();
}
-// PDF to Emf
-PdfToEmfUtilityProcessHostClient::~PdfToEmfUtilityProcessHostClient() {}
-
-void PdfToEmfUtilityProcessHostClient::OnPreCacheFontCharacters(
+void PdfConverterUtilityProcessHostClient::OnPreCacheFontCharacters(
const LOGFONT& font,
const base::string16& str) {
// TODO(scottmg): pdf/ppapi still require the renderer to be able to precache
@@ -599,10 +550,10 @@ void PdfToEmfUtilityProcessHostClient::OnPreCacheFontCharacters(
DeleteEnhMetaFile(metafile);
}
-bool PdfToEmfUtilityProcessHostClient::OnMessageReceived(
+bool PdfConverterUtilityProcessHostClient::OnMessageReceived(
const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(PdfToEmfUtilityProcessHostClient, message)
+ IPC_BEGIN_MESSAGE_MAP(PdfConverterUtilityProcessHostClient, message)
IPC_MESSAGE_HANDLER(
ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageCount, OnPageCount)
IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageDone,
@@ -614,84 +565,30 @@ bool PdfToEmfUtilityProcessHostClient::OnMessageReceived(
return handled;
}
-base::string16 PdfToEmfUtilityProcessHostClient::GetName() const {
- return l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_EMF_CONVERTOR_NAME);
-}
-
-std::unique_ptr<MetafilePlayer>
-PdfToEmfUtilityProcessHostClient::GetFileFromTemp(
- std::unique_ptr<base::File, content::BrowserThread::DeleteOnFileThread>
- temp_file) {
- return base::MakeUnique<LazyEmf>(temp_dir_, std::move(temp_file));
+base::string16 PdfConverterUtilityProcessHostClient::GetName() const {
+ return l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_PDF_CONVERTOR_NAME);
}
-void PdfToEmfUtilityProcessHostClient::SendGetPageMessage(
+void PdfConverterUtilityProcessHostClient::SendGetPageMessage(
int page_number,
IPC::PlatformFileForTransit transit) {
Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles_GetPage(page_number,
transit));
}
-void PdfToEmfUtilityProcessHostClient::SendStartMessage(
+void PdfConverterUtilityProcessHostClient::SendStartMessage(
IPC::PlatformFileForTransit transit) {
Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles(transit, settings_));
}
-void PdfToEmfUtilityProcessHostClient::SendStopMessage() {
+void PdfConverterUtilityProcessHostClient::SendStopMessage() {
Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles_Stop());
}
-// Pdf to PostScript
-bool PdfToPostScriptUtilityProcessHostClient::OnMessageReceived(
- const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(PdfToPostScriptUtilityProcessHostClient, message)
- IPC_MESSAGE_HANDLER(
- ChromeUtilityHostMsg_RenderPDFPagesToPostScript_PageCount, OnPageCount)
- IPC_MESSAGE_HANDLER(
- ChromeUtilityHostMsg_RenderPDFPagesToPostScript_PageDone, OnPageDone)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-base::string16 PdfToPostScriptUtilityProcessHostClient::GetName() const {
- return l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_PS_CONVERTOR_NAME);
-}
-
-std::unique_ptr<MetafilePlayer>
-PdfToPostScriptUtilityProcessHostClient::GetFileFromTemp(
- std::unique_ptr<base::File, content::BrowserThread::DeleteOnFileThread>
- temp_file) {
- return base::MakeUnique<PostScriptMetaFile>(temp_dir_, std::move(temp_file));
-}
-
-void PdfToPostScriptUtilityProcessHostClient::SendGetPageMessage(
- int page_number,
- IPC::PlatformFileForTransit transit) {
- Send(new ChromeUtilityMsg_RenderPDFPagesToPostScript_GetPage(page_number,
- transit));
-}
-
-void PdfToPostScriptUtilityProcessHostClient::SendStartMessage(
- IPC::PlatformFileForTransit transit) {
- Send(new ChromeUtilityMsg_RenderPDFPagesToPostScript_Start(transit,
- settings_));
-}
-
-void PdfToPostScriptUtilityProcessHostClient::SendStopMessage() {
- Send(new ChromeUtilityMsg_RenderPDFPagesToPostScript_Stop());
-}
-
-void PdfToPostScriptUtilityProcessHostClient::OnPageDone(bool success) {
- PdfConverterUtilityProcessHostClient::OnPageDone(success, 0.0f);
-}
-
void PdfConverterImpl::GetPage(int page_number,
const GetPageCallback& get_page_callback) {
utility_client_->GetPage(page_number, get_page_callback);
}
-
void PdfConverterImpl::RunCallback(const base::Closure& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
callback.Run();
@@ -702,26 +599,13 @@ void PdfConverterImpl::RunCallback(const base::Closure& callback) {
PdfConverter::~PdfConverter() {}
// static
-std::unique_ptr<PdfConverter> PdfConverter::StartPdfToEmfConverter(
- const scoped_refptr<base::RefCountedMemory>& data,
- const PdfRenderSettings& conversion_settings,
- const StartCallback& start_callback) {
- std::unique_ptr<PdfConverterImpl> converter =
- base::MakeUnique<PdfConverterImpl>();
- converter->Start(new PdfToEmfUtilityProcessHostClient(converter->GetWeakPtr(),
- conversion_settings),
- data, start_callback);
- return std::move(converter);
-}
-
-// static
-std::unique_ptr<PdfConverter> PdfConverter::StartPdfToPostScriptConverter(
+std::unique_ptr<PdfConverter> PdfConverter::StartConverter(
const scoped_refptr<base::RefCountedMemory>& data,
const PdfRenderSettings& conversion_settings,
const StartCallback& start_callback) {
std::unique_ptr<PdfConverterImpl> converter =
base::MakeUnique<PdfConverterImpl>();
- converter->Start(new PdfToPostScriptUtilityProcessHostClient(
+ converter->Start(new PdfConverterUtilityProcessHostClient(
converter->GetWeakPtr(), conversion_settings),
data, start_callback);
return std::move(converter);
« no previous file with comments | « chrome/browser/printing/pdf_to_emf_converter.h ('k') | chrome/browser/printing/print_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698