diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-20 05:58:43 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-20 05:58:43 +0000 |
commit | 09083ebe22a6d21484b7e0e5d386642e741bfd89 (patch) | |
tree | 26077799e9b996ac5311fe1e25783bb6b593b657 /printing/backend | |
parent | 23150a133bc7db48ee40fe85f7af46c4ce94ca5f (diff) | |
download | chromium_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.cc | 22 | ||||
-rw-r--r-- | printing/backend/print_backend.h | 4 | ||||
-rw-r--r-- | printing/backend/print_backend_unittest.cc | 25 |
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 + |