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

Unified Diff: printing/printed_document.cc

Issue 329683002: Improvements in --debug-print switch implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Wed 06/11/2014 10:41:42.83 Created 6 years, 6 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
Index: printing/printed_document.cc
diff --git a/printing/printed_document.cc b/printing/printed_document.cc
index 7c2392d064dc0e0562a5d783cbaf145ca71633c3..09c8fddf4e5b9945a587a5e9da2f10e7cce15973 100644
--- a/printing/printed_document.cc
+++ b/printing/printed_document.cc
@@ -13,12 +13,17 @@
#include "base/files/file_path.h"
#include "base/i18n/file_util_icu.h"
#include "base/i18n/time_formatting.h"
+#include "base/json/json_writer.h"
#include "base/lazy_instance.h"
#include "base/message_loop/message_loop.h"
+#include "base/numerics/safe_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
+#include "base/values.h"
#include "printing/page_number.h"
+#include "printing/print_settings_conversion.h"
#include "printing/printed_page.h"
#include "printing/printed_pages_source.h"
#include "printing/units.h"
@@ -26,24 +31,15 @@
#include "ui/gfx/font.h"
#include "ui/gfx/text_elider.h"
-namespace {
-
-struct PrintDebugDumpPath {
- PrintDebugDumpPath()
- : enabled(false) {
- }
+namespace printing {
- bool enabled;
- base::FilePath debug_dump_path;
-};
+namespace {
-base::LazyInstance<PrintDebugDumpPath> g_debug_dump_info =
+base::LazyInstance<base::FilePath> g_debug_dump_info =
LAZY_INSTANCE_INITIALIZER;
} // namespace
-namespace printing {
-
PrintedDocument::PrintedDocument(const PrintSettings& settings,
PrintedPagesSource* source,
int cookie)
@@ -85,20 +81,19 @@ void PrintedDocument::SetPage(int page_number,
mutable_.first_page = page_number;
#endif
}
- DebugDump(*page.get());
}
-bool PrintedDocument::GetPage(int page_number,
- scoped_refptr<PrintedPage>* page) {
- base::AutoLock lock(lock_);
- PrintedPages::const_iterator itr = mutable_.pages_.find(page_number);
- if (itr != mutable_.pages_.end()) {
- if (itr->second.get()) {
- *page = itr->second;
- return true;
- }
+scoped_refptr<PrintedPage> PrintedDocument::GetPage(int page_number) {
+ scoped_refptr<PrintedPage> page;
+ {
+ base::AutoLock lock(lock_);
+ PrintedPages::const_iterator itr = mutable_.pages_.find(page_number);
+ if (itr != mutable_.pages_.end())
+ page = itr->second;
}
- return false;
+ if (page)
+ DebugDump(*page);
+ return page;
}
bool PrintedDocument::IsComplete() const {
@@ -173,34 +168,54 @@ int PrintedDocument::expected_page_count() const {
}
void PrintedDocument::DebugDump(const PrintedPage& page) {
- if (!g_debug_dump_info.Get().enabled)
+ if (g_debug_dump_info.Get().empty())
return;
- base::string16 filename;
- filename += name();
- filename += base::ASCIIToUTF16("_");
+ base::string16 filename = name();
filename += base::ASCIIToUTF16(
- base::StringPrintf("%02d", page.page_number()));
+ base::StringPrintf("_%04d", page.page_number()));
#if defined(OS_WIN)
- filename += base::ASCIIToUTF16("_.emf");
- page.metafile()->SaveTo(
- g_debug_dump_info.Get().debug_dump_path.Append(filename));
+ page.metafile()->SaveTo(CreateDebugDumpPath(filename, "emf"));
#else // OS_WIN
- filename += base::ASCIIToUTF16("_.pdf");
- page.metafile()->SaveTo(
- g_debug_dump_info.Get().debug_dump_path.Append(
- base::UTF16ToUTF8(filename)));
+ page.metafile()->SaveTo(CreateDebugDumpPath(filename, "pdf"));
#endif // OS_WIN
+
+ base::DictionaryValue job_settings;
+ PrintSettingsToJobSettingsDebug(settings(), &job_settings);
+ std::string settings;
+ base::JSONWriter::WriteWithOptions(
+ &job_settings, base::JSONWriter::OPTIONS_PRETTY_PRINT, &settings);
+ base::WriteFile(CreateDebugDumpPath(filename, "json"),
+ settings.data(),
+ base::checked_cast<int>(settings.size()));
}
void PrintedDocument::set_debug_dump_path(
const base::FilePath& debug_dump_path) {
- g_debug_dump_info.Get().enabled = !debug_dump_path.empty();
- g_debug_dump_info.Get().debug_dump_path = debug_dump_path;
+ g_debug_dump_info.Get() = debug_dump_path;
}
-const base::FilePath& PrintedDocument::debug_dump_path() {
- return g_debug_dump_info.Get().debug_dump_path;
+base::FilePath PrintedDocument::CreateDebugDumpPath(
+ const base::string16& document_name,
+ const std::string& extension) {
+ if (g_debug_dump_info.Get().empty())
+ return base::FilePath();
+ // Create a filename.
+ base::string16 filename;
+ base::Time now(base::Time::Now());
+ filename = base::TimeFormatShortDateAndTime(now);
Lei Zhang 2014/06/11 20:03:06 Might be clear to StringPrintf() this.
Vitaly Buka (NO REVIEWS) 2014/06/11 21:32:57 You mean document name? We have not StringPrintf f
+ filename += base::ASCIIToUTF16("_");
+ filename += document_name;
+ filename += base::ASCIIToUTF16(".");
+ filename += base::ASCIIToUTF16(extension);
+ base::FilePath::StringType system_filename;
+#if defined(OS_WIN)
+ system_filename = filename;
+#else // OS_WIN
+ system_filename = base::UTF16ToUTF8(filename);
+#endif // OS_WIN
+ file_util::ReplaceIllegalCharactersInPath(&system_filename, '_');
+ return g_debug_dump_info.Get().Append(system_filename);
}
PrintedDocument::Mutable::Mutable(PrintedPagesSource* source)

Powered by Google App Engine
This is Rietveld 408576698