summaryrefslogtreecommitdiffstats
path: root/printing/backend
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-20 05:58:43 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-20 05:58:43 +0000
commit09083ebe22a6d21484b7e0e5d386642e741bfd89 (patch)
tree26077799e9b996ac5311fe1e25783bb6b593b657 /printing/backend
parent23150a133bc7db48ee40fe85f7af46c4ce94ca5f (diff)
downloadchromium_src-09083ebe22a6d21484b7e0e5d386642e741bfd89.zip
chromium_src-09083ebe22a6d21484b7e0e5d386642e741bfd89.tar.gz
chromium_src-09083ebe22a6d21484b7e0e5d386642e741bfd89.tar.bz2
Simplify document title for Windows printing.
Some drivers can't handle long titles or control characters. BUG=65469 Review URL: https://chromiumcodereview.appspot.com/10941025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157715 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing/backend')
-rw-r--r--printing/backend/print_backend.cc22
-rw-r--r--printing/backend/print_backend.h4
-rw-r--r--printing/backend/print_backend_unittest.cc25
3 files changed, 51 insertions, 0 deletions
diff --git a/printing/backend/print_backend.cc b/printing/backend/print_backend.cc
index b993bfc..71f917d 100644
--- a/printing/backend/print_backend.cc
+++ b/printing/backend/print_backend.cc
@@ -4,6 +4,18 @@
#include "printing/backend/print_backend.h"
+#include <algorithm>
+
+#include "third_party/icu/public/common/unicode/uchar.h"
+#include "ui/base/text/text_elider.h"
+
+namespace {
+
+const wchar_t kDefaultDocumentTitle[] = L"Untitled Document";
+const int kMaxDocumentTitleLength = 25;
+
+} // namespace
+
namespace printing {
PrinterBasicInfo::PrinterBasicInfo()
@@ -26,4 +38,14 @@ PrinterCapsAndDefaults::~PrinterCapsAndDefaults() {}
PrintBackend::~PrintBackend() {}
+string16 PrintBackend::SimplifyDocumentTitle(const string16& title) {
+ string16 no_controls(title);
+ no_controls.erase(
+ std::remove_if(no_controls.begin(), no_controls.end(), &u_iscntrl),
+ no_controls.end());
+ string16 result;
+ ui::ElideString(no_controls, kMaxDocumentTitleLength, &result);
+ return result;
+}
+
} // namespace printing
diff --git a/printing/backend/print_backend.h b/printing/backend/print_backend.h
index 3cbf162..127caf5 100644
--- a/printing/backend/print_backend.h
+++ b/printing/backend/print_backend.h
@@ -10,6 +10,7 @@
#include <vector>
#include "base/memory/ref_counted.h"
+#include "base/string16.h"
#include "printing/print_job_constants.h"
#include "printing/printing_export.h"
@@ -92,6 +93,9 @@ class PRINTING_EXPORT PrintBackend
// Returns true if printer_name points to a valid printer.
virtual bool IsValidPrinter(const std::string& printer_name) = 0;
+ // Simplify title to resolve issue with some drivers.
+ static string16 SimplifyDocumentTitle(const string16& title);
+
// Allocate a print backend. If |print_backend_settings| is NULL, default
// settings will be used.
// Return NULL if no print backend available.
diff --git a/printing/backend/print_backend_unittest.cc b/printing/backend/print_backend_unittest.cc
new file mode 100644
index 0000000..c801684
--- /dev/null
+++ b/printing/backend/print_backend_unittest.cc
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 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 "printing/backend/print_backend.h"
+#include "base/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace printing {
+
+std::string Simplify(const char* title) {
+ return UTF16ToUTF8(PrintBackend::SimplifyDocumentTitle(ASCIIToUTF16(title)));
+}
+
+TEST(PrintBackendTest, SimplifyDocumentTitle) {
+ EXPECT_STREQ("", Simplify("").c_str());
+ EXPECT_STREQ("Document wi...oooong name",
+ Simplify("Document with very looooooooooong name").c_str());
+ EXPECT_STREQ("Control Characters",
+ Simplify("C\ron\ntrol Charac\15ters").c_str());
+ EXPECT_STREQ("", Simplify("\n\r\n\r\t\r").c_str());
+}
+
+} // namespace printing
+