summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorsverrir@google.com <sverrir@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-07 21:31:39 +0000
committersverrir@google.com <sverrir@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-07 21:31:39 +0000
commit8ff1d42631e79e842669dc3051d91ed7db80f1dc (patch)
tree55c1987549e982bfbf60a33fad3b60b5113d7864 /chrome/browser
parent395f9295b3e370746846dbe6073a0d43ab7e4af5 (diff)
downloadchromium_src-8ff1d42631e79e842669dc3051d91ed7db80f1dc.zip
chromium_src-8ff1d42631e79e842669dc3051d91ed7db80f1dc.tar.gz
chromium_src-8ff1d42631e79e842669dc3051d91ed7db80f1dc.tar.bz2
Move printing related stuff to the root printing project from the browser project. This simplifies further refactoring and eases understanding of the printing part of Chrome.
Also renamed win_printing_context to printing_context_win (correct naming convention) and added stub implementations for _linux and mac. Now all but one file is compiling on all platforms. TEST=none (no functional change). BUG=none Review URL: http://codereview.chromium.org/149212 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20086 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/browser_main.cc2
-rw-r--r--chrome/browser/printing/page_number.cc83
-rw-r--r--chrome/browser/printing/page_number.h73
-rw-r--r--chrome/browser/printing/page_number_unittest.cc30
-rw-r--r--chrome/browser/printing/page_overlays.cc206
-rw-r--r--chrome/browser/printing/page_overlays.h80
-rw-r--r--chrome/browser/printing/page_overlays_unittest.cc89
-rw-r--r--chrome/browser/printing/page_range.cc31
-rw-r--r--chrome/browser/printing/page_range.h34
-rw-r--r--chrome/browser/printing/page_range_unittest.cc38
-rw-r--r--chrome/browser/printing/page_setup.cc126
-rw-r--r--chrome/browser/printing/page_setup.h82
-rw-r--r--chrome/browser/printing/page_setup_unittest.cc146
-rw-r--r--chrome/browser/printing/print_job.cc4
-rw-r--r--chrome/browser/printing/print_job_manager.cc4
-rw-r--r--chrome/browser/printing/print_job_unittest.cc2
-rw-r--r--chrome/browser/printing/print_job_worker.cc4
-rw-r--r--chrome/browser/printing/print_job_worker.h4
-rw-r--r--chrome/browser/printing/print_job_worker_owner.h2
-rw-r--r--chrome/browser/printing/print_settings.cc133
-rw-r--r--chrome/browser/printing/print_settings.h112
-rw-r--r--chrome/browser/printing/print_view_manager.cc2
-rw-r--r--chrome/browser/printing/print_view_manager.h2
-rw-r--r--chrome/browser/printing/printed_document.cc366
-rw-r--r--chrome/browser/printing/printed_document.h192
-rw-r--r--chrome/browser/printing/printed_page.cc24
-rw-r--r--chrome/browser/printing/printed_page.h50
-rw-r--r--chrome/browser/printing/printed_pages_source.h29
-rw-r--r--chrome/browser/printing/printing_layout_uitest.cc2
-rw-r--r--chrome/browser/printing/printing_test.h36
-rw-r--r--chrome/browser/printing/win_printing_context.cc608
-rw-r--r--chrome/browser/printing/win_printing_context.h139
-rw-r--r--chrome/browser/printing/win_printing_context_unittest.cc29
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.cc25
34 files changed, 37 insertions, 2752 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index 349a226..2044261 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -90,7 +90,6 @@
#include "chrome/browser/jankometer.h"
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/net/url_fixer_upper.h"
-#include "chrome/browser/printing/printed_document.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/rlz/rlz.h"
#include "chrome/browser/views/user_data_dir_dialog.h"
@@ -103,6 +102,7 @@
#include "net/base/sdch_manager.h"
#include "net/base/winsock_init.h"
#include "net/http/http_network_layer.h"
+#include "printing/printed_document.h"
#include "sandbox/src/sandbox.h"
#include "views/widget/accelerator_handler.h"
#endif // defined(OS_WIN)
diff --git a/chrome/browser/printing/page_number.cc b/chrome/browser/printing/page_number.cc
deleted file mode 100644
index 9832c96..0000000
--- a/chrome/browser/printing/page_number.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/page_number.h"
-
-#include <limits>
-
-#include "base/logging.h"
-#include "chrome/browser/printing/print_settings.h"
-
-namespace printing {
-
-PageNumber::PageNumber(const PrintSettings& settings, int document_page_count) {
- Init(settings, document_page_count);
-}
-
-PageNumber::PageNumber()
- : ranges_(NULL),
- page_number_(-1),
- page_range_index_(-1),
- document_page_count_(0) {
-}
-
-void PageNumber::operator=(const PageNumber& other) {
- ranges_ = other.ranges_;
- page_number_ = other.page_number_;
- page_range_index_ = other.page_range_index_;
- document_page_count_ = other.document_page_count_;
-}
-
-void PageNumber::Init(const PrintSettings& settings, int document_page_count) {
- DCHECK(document_page_count);
- ranges_ = settings.ranges.empty() ? NULL : &settings.ranges;
- document_page_count_ = document_page_count;
- if (ranges_) {
- page_range_index_ = 0;
- page_number_ = (*ranges_)[0].from;
- } else {
- if (document_page_count) {
- page_number_ = 0;
- } else {
- page_number_ = -1;
- }
- page_range_index_ = -1;
- }
-}
-
-int PageNumber::operator++() {
- if (!ranges_) {
- // Switch to next page.
- if (++page_number_ == document_page_count_) {
- // Finished.
- *this = npos();
- }
- } else {
- // Switch to next page.
- ++page_number_;
- // Page ranges are inclusive.
- if (page_number_ > (*ranges_)[page_range_index_].to) {
- DCHECK(ranges_->size() <= static_cast<size_t>(
- std::numeric_limits<int>::max()));
- if (++page_range_index_ == static_cast<int>(ranges_->size())) {
- // Finished.
- *this = npos();
- } else {
- page_number_ = (*ranges_)[page_range_index_].from;
- }
- }
- }
- return ToInt();
-}
-
-bool PageNumber::operator==(const PageNumber& other) const {
- return page_number_ == other.page_number_ &&
- page_range_index_ == other.page_range_index_;
-}
-bool PageNumber::operator!=(const PageNumber& other) const {
- return page_number_ != other.page_number_ ||
- page_range_index_ != other.page_range_index_;
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/page_number.h b/chrome/browser/printing/page_number.h
deleted file mode 100644
index 20417e8..0000000
--- a/chrome/browser/printing/page_number.h
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PAGE_NUMBER_H__
-#define CHROME_BROWSER_PRINTING_PAGE_NUMBER_H__
-
-#include <ostream>
-
-#include "chrome/browser/printing/page_range.h"
-
-namespace printing {
-
-class PrintSettings;
-
-// Represents a page series following the array of page ranges defined in a
-// PrintSettings.
-class PageNumber {
- public:
- // Initializes the page to the first page in the settings's range or 0.
- PageNumber(const PrintSettings& settings, int document_page_count);
-
- PageNumber();
-
- void operator=(const PageNumber& other);
-
- // Initializes the page to the first page in the setting's range or 0. It
- // initialize to npos if the range is empty and document_page_count is 0.
- void Init(const PrintSettings& settings, int document_page_count);
-
- // Converts to a page numbers.
- int ToInt() const {
- return page_number_;
- }
-
- // Calculates the next page in the serie.
- int operator++();
-
- // Returns an instance that represents the end of a serie.
- static const PageNumber npos() {
- return PageNumber();
- }
-
- // Equality operator. Only the current page number is verified so that
- // "page != PageNumber::npos()" works.
- bool operator==(const PageNumber& other) const;
- bool operator!=(const PageNumber& other) const;
-
- private:
- // The page range to follow.
- const PageRanges* ranges_;
-
- // The next page to be printed. -1 when not printing.
- int page_number_;
-
- // The next page to be printed. -1 when not used. Valid only if
- // document()->settings().range.empty() is false.
- int page_range_index_;
-
- // Number of expected pages in the document. Used when ranges_ is NULL.
- int document_page_count_;
-};
-
-// Debug output support.
-template<class E, class T>
-inline typename std::basic_ostream<E,T>& operator<<(
- typename std::basic_ostream<E,T>& ss, const PageNumber& page) {
- return ss << page.ToInt();
-}
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PAGE_NUMBER_H__
diff --git a/chrome/browser/printing/page_number_unittest.cc b/chrome/browser/printing/page_number_unittest.cc
deleted file mode 100644
index 6281925..0000000
--- a/chrome/browser/printing/page_number_unittest.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/page_number.h"
-#include "chrome/browser/printing/print_settings.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-TEST(PageNumberTest, Count) {
- printing::PrintSettings settings;
- printing::PageNumber page;
- EXPECT_EQ(printing::PageNumber::npos(), page);
- page.Init(settings, 3);
- EXPECT_EQ(0, page.ToInt());
- EXPECT_NE(printing::PageNumber::npos(), page);
- ++page;
- EXPECT_EQ(1, page.ToInt());
- EXPECT_NE(printing::PageNumber::npos(), page);
-
- printing::PageNumber page_copy(page);
- EXPECT_EQ(1, page_copy.ToInt());
- EXPECT_EQ(1, page.ToInt());
- ++page;
- EXPECT_EQ(1, page_copy.ToInt());
- EXPECT_EQ(2, page.ToInt());
- ++page;
- EXPECT_EQ(printing::PageNumber::npos(), page);
- ++page;
- EXPECT_EQ(printing::PageNumber::npos(), page);
-}
diff --git a/chrome/browser/printing/page_overlays.cc b/chrome/browser/printing/page_overlays.cc
deleted file mode 100644
index 6233d84..0000000
--- a/chrome/browser/printing/page_overlays.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright (c) 2006-2009 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 "chrome/browser/printing/page_overlays.h"
-
-#include "app/gfx/text_elider.h"
-#include "base/logging.h"
-#include "base/string_util.h"
-#include "chrome/browser/printing/printed_document.h"
-#include "chrome/browser/printing/printed_page.h"
-
-namespace {
-
-// Replaces a subpart of a string by other value, and returns the position right
-// after the new value.
-size_t ReplaceKey(std::wstring* string,
- size_t offset,
- size_t old_string_len,
- const std::wstring& new_string) {
- string->replace(offset, old_string_len, new_string);
- return offset + new_string.size();
-}
-
-} // namespace
-
-namespace printing {
-
-const wchar_t* const PageOverlays::kTitle = L"{title}";
-const wchar_t* const PageOverlays::kTime = L"{time}";
-const wchar_t* const PageOverlays::kDate = L"{date}";
-const wchar_t* const PageOverlays::kPage = L"{page}";
-const wchar_t* const PageOverlays::kPageCount = L"{pagecount}";
-const wchar_t* const PageOverlays::kPageOnTotal = L"{pageontotal}";
-const wchar_t* const PageOverlays::kUrl = L"{url}";
-
-PageOverlays::PageOverlays()
- : top_left(kDate),
- top_center(kTitle),
- top_right(),
- bottom_left(kUrl),
- bottom_center(),
- bottom_right(kPageOnTotal) {
-}
-
-bool PageOverlays::Equals(const PageOverlays& rhs) const {
- return top_left == rhs.top_left &&
- top_center == rhs.top_center &&
- top_right == rhs.top_right &&
- bottom_left == rhs.bottom_left &&
- bottom_center == rhs.bottom_center &&
- bottom_right == rhs.bottom_right;
-}
-
-const std::wstring& PageOverlays::GetOverlay(HorizontalPosition x,
- VerticalPosition y) const {
- switch (x) {
- case LEFT:
- switch (y) {
- case TOP:
- return top_left;
- case BOTTOM:
- return bottom_left;
- }
- break;
- case CENTER:
- switch (y) {
- case TOP:
- return top_center;
- case BOTTOM:
- return bottom_center;
- }
- break;
- case RIGHT:
- switch (y) {
- case TOP:
- return top_right;
- case BOTTOM:
- return bottom_right;
- }
- break;
- }
- NOTREACHED();
- return EmptyWString();
-}
-
-void PageOverlays::SetOverlay(HorizontalPosition x, VerticalPosition y,
- std::wstring& input) {
- switch (x) {
- case LEFT:
- switch (y) {
- case TOP:
- top_left = input;
- break;
- case BOTTOM:
- bottom_left = input;
- break;
- default:
- NOTREACHED();
- break;
- }
- break;
- case CENTER:
- switch (y) {
- case TOP:
- top_center = input;
- break;
- case BOTTOM:
- bottom_center = input;
- break;
- default:
- NOTREACHED();
- break;
- }
- break;
- case RIGHT:
- switch (y) {
- case TOP:
- top_right = input;
- break;
- case BOTTOM:
- bottom_right = input;
- break;
- default:
- NOTREACHED();
- break;
- }
- break;
- default:
- NOTREACHED();
- break;
- }
-}
-
-//static
-std::wstring PageOverlays::ReplaceVariables(const std::wstring& input,
- const PrintedDocument& document,
- const PrintedPage& page) {
- std::wstring output(input);
- for (size_t offset = output.find(L'{', 0);
- offset != std::wstring::npos;
- offset = output.find(L'{', offset)) {
-
- if (0 == output.compare(offset,
- wcslen(kTitle),
- kTitle)) {
- offset = ReplaceKey(&output,
- offset,
- wcslen(kTitle),
- document.name());
- } else if (0 == output.compare(offset,
- wcslen(kTime),
- kTime)) {
- offset = ReplaceKey(&output,
- offset,
- wcslen(kTime),
- document.time());
- } else if (0 == output.compare(offset,
- wcslen(kDate),
- kDate)) {
- offset = ReplaceKey(&output,
- offset,
- wcslen(kDate),
- document.date());
- } else if (0 == output.compare(offset,
- wcslen(kPage),
- kPage)) {
- offset = ReplaceKey(&output,
- offset,
- wcslen(kPage),
- IntToWString(page.page_number()));
- } else if (0 == output.compare(offset,
- wcslen(kPageCount),
- kPageCount)) {
- offset = ReplaceKey(&output,
- offset,
- wcslen(kPageCount),
- IntToWString(document.page_count()));
- } else if (0 == output.compare(offset,
- wcslen(kPageOnTotal),
- kPageOnTotal)) {
- std::wstring replacement;
- replacement = IntToWString(page.page_number());
- replacement += L"/";
- replacement += IntToWString(document.page_count());
- offset = ReplaceKey(&output,
- offset,
- wcslen(kPageOnTotal),
- replacement);
- } else if (0 == output.compare(offset,
- wcslen(kUrl),
- kUrl)) {
- // TODO(maruel): http://b/1126373 gfx::ElideUrl(document.url(), ...)
- offset = ReplaceKey(&output,
- offset,
- wcslen(kUrl),
- UTF8ToWide(document.url().spec()));
- } else {
- // There is just a { in the string.
- ++offset;
- }
- }
- return output;
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/page_overlays.h b/chrome/browser/printing/page_overlays.h
deleted file mode 100644
index 7663153..0000000
--- a/chrome/browser/printing/page_overlays.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) 2006-2009 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PAGE_OVERLAYS_H__
-#define CHROME_BROWSER_PRINTING_PAGE_OVERLAYS_H__
-
-#include <string>
-
-namespace printing {
-
-class PrintedDocument;
-class PrintedPage;
-
-// Page's overlays, i.e. headers and footers. Contains the strings that will be
-// printed in the overlays, with actual values as variables. The variables are
-// replaced by their actual values with ReplaceVariables().
-class PageOverlays {
- public:
- // Position of the header/footer.
- enum HorizontalPosition {
- LEFT,
- CENTER,
- RIGHT,
- };
-
- // Position of the header/footer.
- enum VerticalPosition {
- TOP,
- BOTTOM,
- };
-
- PageOverlays();
-
- // Equality operator.
- bool Equals(const PageOverlays& rhs) const;
-
- // Returns the string of an overlay according to its x,y position.
- const std::wstring& GetOverlay(HorizontalPosition x,
- VerticalPosition y) const;
-
- // Sets the string of an overlay according to its x,y position.
- void SetOverlay(HorizontalPosition x, VerticalPosition y,
- std::wstring& input);
-
- // Replaces the variables in |input| with their actual values according to the
- // properties of the current printed document and the current printed page.
- static std::wstring ReplaceVariables(const std::wstring& input,
- const PrintedDocument& document,
- const PrintedPage& page);
-
- // Keys that are dynamically replaced in the header and footer by their actual
- // values.
- // Web page's title.
- static const wchar_t* const kTitle;
- // Print job's start time.
- static const wchar_t* const kTime;
- // Print job's start date.
- static const wchar_t* const kDate;
- // Printed page's number.
- static const wchar_t* const kPage;
- // Print job's total page count.
- static const wchar_t* const kPageCount;
- // Printed page's number on total page count.
- static const wchar_t* const kPageOnTotal;
- // Web page's displayed url.
- static const wchar_t* const kUrl;
-
- // Actual headers and footers.
- std::wstring top_left;
- std::wstring top_center;
- std::wstring top_right;
- std::wstring bottom_left;
- std::wstring bottom_center;
- std::wstring bottom_right;
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PAGE_OVERLAYS_H__
diff --git a/chrome/browser/printing/page_overlays_unittest.cc b/chrome/browser/printing/page_overlays_unittest.cc
deleted file mode 100644
index 0710f33..0000000
--- a/chrome/browser/printing/page_overlays_unittest.cc
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2006-2009 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 "base/message_loop.h"
-#include "base/string_util.h"
-#include "chrome/browser/printing/page_overlays.h"
-#include "chrome/browser/printing/print_settings.h"
-#include "chrome/browser/printing/printed_document.h"
-#include "chrome/browser/printing/printed_page.h"
-#include "chrome/browser/printing/printed_pages_source.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-class PageOverlaysTest : public testing::Test {
- private:
- MessageLoop message_loop_;
-};
-
-struct Keys {
- const wchar_t* key;
- const wchar_t* expected;
-};
-
-const Keys kOverlayKeys[] = {
- printing::PageOverlays::kTitle, L"Foobar Document",
- printing::PageOverlays::kTime, L"",
- printing::PageOverlays::kDate, L"",
- printing::PageOverlays::kPage, L"1",
- printing::PageOverlays::kPageCount, L"2",
- printing::PageOverlays::kPageOnTotal, L"1/2",
- printing::PageOverlays::kUrl, L"http://www.perdu.com/",
-};
-
-class PagesSource : public printing::PrintedPagesSource {
- public:
- virtual std::wstring RenderSourceName() {
- return L"Foobar Document";
- }
-
- virtual GURL RenderSourceUrl() {
- return GURL(L"http://www.perdu.com");
- }
-};
-
-} // namespace
-
-
-TEST_F(PageOverlaysTest, StringConversion) {
- printing::PageOverlays overlays;
- overlays.GetOverlay(printing::PageOverlays::LEFT,
- printing::PageOverlays::BOTTOM);
- printing::PrintSettings settings;
- PagesSource source;
- int cookie = 1;
- scoped_refptr<printing::PrintedDocument> doc(
- new printing::PrintedDocument(settings, &source, cookie));
- doc->set_page_count(2);
- gfx::Size page_size(100, 100);
- scoped_refptr<printing::PrintedPage> page(
- new printing::PrintedPage(1, NULL, page_size));
-
- std::wstring input;
- std::wstring out;
- for (int i = 0; i < arraysize(kOverlayKeys); ++i) {
- input = StringPrintf(L"foo%lsbar", kOverlayKeys[i].key);
- out = printing::PageOverlays::ReplaceVariables(input, *doc.get(),
- *page.get());
- EXPECT_FALSE(out.empty());
- if (wcslen(kOverlayKeys[i].expected) == 0)
- continue;
- EXPECT_EQ(StringPrintf(L"foo%lsbar", kOverlayKeys[i].expected), out) <<
- kOverlayKeys[i].key;
- }
-
- // Check if SetOverlay really sets the page overlay.
- overlays.SetOverlay(printing::PageOverlays::LEFT,
- printing::PageOverlays::TOP,
- UTF16ToWide(L"Page {page}"));
- input = overlays.GetOverlay(printing::PageOverlays::LEFT,
- printing::PageOverlays::TOP);
- EXPECT_EQ(input, L"Page {page}");
-
- // Replace the variables to see if the page number is correct.
- out = printing::PageOverlays::ReplaceVariables(input, *doc.get(),
- *page.get());
- EXPECT_EQ(out, L"Page 1");
-}
diff --git a/chrome/browser/printing/page_range.cc b/chrome/browser/printing/page_range.cc
deleted file mode 100644
index 9669a9e..0000000
--- a/chrome/browser/printing/page_range.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/page_range.h"
-
-#include "base/stl_util-inl.h"
-
-namespace printing {
-
-/* static */
-std::vector<int> PageRange::GetPages(const PageRanges& ranges) {
- std::set<int> pages;
- for (unsigned i = 0; i < ranges.size(); ++i) {
- const PageRange& range = ranges[i];
- // Ranges are inclusive.
- for (int i = range.from; i <= range.to; ++i) {
- pages.insert(i);
- }
- }
- return SetToVector(pages);
-}
-
-/* static */
-int PageRange::GetTotalPages(const PageRanges& ranges) {
- // Since ranges can overlap we need to merge them before counting
- std::vector<int> pages = PageRange::GetPages(ranges);
- return pages.size();
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/page_range.h b/chrome/browser/printing/page_range.h
deleted file mode 100644
index 1f3e024..0000000
--- a/chrome/browser/printing/page_range.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PAGE_RANGE_H__
-#define CHROME_BROWSER_PRINTING_PAGE_RANGE_H__
-
-#include <vector>
-
-namespace printing {
-
-struct PageRange;
-
-typedef std::vector<PageRange> PageRanges;
-
-// Print range is inclusive. To select one page, set from == to.
-struct PageRange {
- int from;
- int to;
-
- bool operator==(const PageRange& rhs) const {
- return from == rhs.from && to == rhs.to;
- }
-
- // Retrieves the sorted list of unique pages in the page ranges.
- static std::vector<int> GetPages(const PageRanges& ranges);
-
- // Gets the total number of pages.
- static int GetTotalPages(const PageRanges& ranges);
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PAGE_RANGE_H__
diff --git a/chrome/browser/printing/page_range_unittest.cc b/chrome/browser/printing/page_range_unittest.cc
deleted file mode 100644
index a5ac563..0000000
--- a/chrome/browser/printing/page_range_unittest.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/page_range.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-TEST(PageRangeTest, RangeMerge) {
- printing::PageRanges ranges;
- printing::PageRange range;
- range.from = 1;
- range.to = 3;
- ranges.push_back(range);
- range.from = 10;
- range.to = 12;
- ranges.push_back(range);
- range.from = 2;
- range.to = 5;
- ranges.push_back(range);
- std::vector<int> pages(printing::PageRange::GetPages(ranges));
- ASSERT_EQ(8U, pages.size());
- EXPECT_EQ(1, pages[0]);
- EXPECT_EQ(2, pages[1]);
- EXPECT_EQ(3, pages[2]);
- EXPECT_EQ(4, pages[3]);
- EXPECT_EQ(5, pages[4]);
- EXPECT_EQ(10, pages[5]);
- EXPECT_EQ(11, pages[6]);
- EXPECT_EQ(12, pages[7]);
- EXPECT_EQ(8, printing::PageRange::GetTotalPages(ranges));
-}
-
-TEST(PageRangeTest, Empty) {
- printing::PageRanges ranges;
- std::vector<int> pages(printing::PageRange::GetPages(ranges));
- EXPECT_EQ(0U, pages.size());
- EXPECT_EQ(0, printing::PageRange::GetTotalPages(ranges));
-}
diff --git a/chrome/browser/printing/page_setup.cc b/chrome/browser/printing/page_setup.cc
deleted file mode 100644
index 2df670c..0000000
--- a/chrome/browser/printing/page_setup.cc
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/page_setup.h"
-
-#include "base/logging.h"
-
-namespace printing {
-
-PageMargins::PageMargins()
- : header(0),
- footer(0),
- left(0),
- right(0),
- top(0),
- bottom(0) {
-}
-
-void PageMargins::Clear() {
- header = 0;
- footer = 0;
- left = 0;
- right = 0;
- top = 0;
- bottom = 0;
-}
-
-bool PageMargins::Equals(const PageMargins& rhs) const {
- return header == rhs.header &&
- footer == rhs.footer &&
- left == rhs.left &&
- top == rhs.top &&
- right == rhs.right &&
- bottom == rhs.bottom;
-}
-
-PageSetup::PageSetup() : text_height_(0) {
-}
-
-void PageSetup::Clear() {
- physical_size_.SetSize(0, 0);
- printable_area_.SetRect(0, 0, 0, 0);
- overlay_area_.SetRect(0, 0, 0, 0);
- content_area_.SetRect(0, 0, 0, 0);
- effective_margins_.Clear();
- text_height_ = 0;
-}
-
-bool PageSetup::Equals(const PageSetup& rhs) const {
- return physical_size_ == rhs.physical_size_ &&
- printable_area_ == rhs.printable_area_ &&
- overlay_area_ == rhs.overlay_area_ &&
- content_area_ == rhs.content_area_ &&
- effective_margins_.Equals(rhs.effective_margins_) &&
- requested_margins_.Equals(rhs.requested_margins_) &&
- text_height_ == rhs.text_height_;
-}
-
-void PageSetup::Init(const gfx::Size& physical_size,
- const gfx::Rect& printable_area,
- int text_height) {
- DCHECK_LE(printable_area.right(), physical_size.width());
- // I've seen this assert triggers on Canon GP160PF PCL 5e and HP LaserJet 5.
- // Since we don't know the dpi here, just disable the check.
- // DCHECK_LE(printable_area.bottom(), physical_size.height());
- DCHECK_GE(printable_area.x(), 0);
- DCHECK_GE(printable_area.y(), 0);
- DCHECK_GE(text_height, 0);
- physical_size_ = physical_size;
- printable_area_ = printable_area;
- text_height_ = text_height;
-
- // Calculate the effective margins. The tricky part.
- effective_margins_.header = std::max(requested_margins_.header,
- printable_area_.y());
- effective_margins_.footer = std::max(requested_margins_.footer,
- physical_size.height() -
- printable_area_.bottom());
- effective_margins_.left = std::max(requested_margins_.left,
- printable_area_.x());
- effective_margins_.top = std::max(std::max(requested_margins_.top,
- printable_area_.y()),
- effective_margins_.header + text_height);
- effective_margins_.right = std::max(requested_margins_.right,
- physical_size.width() -
- printable_area_.right());
- effective_margins_.bottom = std::max(std::max(requested_margins_.bottom,
- physical_size.height() -
- printable_area_.bottom()),
- effective_margins_.footer + text_height);
-
- // Calculate the overlay area. If the margins are excessive, the overlay_area
- // size will be (0, 0).
- overlay_area_.set_x(effective_margins_.left);
- overlay_area_.set_y(effective_margins_.header);
- overlay_area_.set_width(std::max(0,
- physical_size.width() -
- effective_margins_.right -
- overlay_area_.x()));
- overlay_area_.set_height(std::max(0,
- physical_size.height() -
- effective_margins_.footer -
- overlay_area_.y()));
-
- // Calculate the content area. If the margins are excessive, the content_area
- // size will be (0, 0).
- content_area_.set_x(effective_margins_.left);
- content_area_.set_y(effective_margins_.top);
- content_area_.set_width(std::max(0,
- physical_size.width() -
- effective_margins_.right -
- content_area_.x()));
- content_area_.set_height(std::max(0,
- physical_size.height() -
- effective_margins_.bottom -
- content_area_.y()));
-}
-
-void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) {
- requested_margins_ = requested_margins;
- if (physical_size_.width() && physical_size_.height())
- Init(physical_size_, printable_area_, text_height_);
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/page_setup.h b/chrome/browser/printing/page_setup.h
deleted file mode 100644
index 6cf294e..0000000
--- a/chrome/browser/printing/page_setup.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PAGE_SETUP_H__
-#define CHROME_BROWSER_PRINTING_PAGE_SETUP_H__
-
-#include "base/gfx/rect.h"
-
-namespace printing {
-
-// Margins for a page setup.
-class PageMargins {
- public:
- PageMargins();
-
- void Clear();
-
- // Equality operator.
- bool Equals(const PageMargins& rhs) const;
-
- // Vertical space for the overlay from the top of the sheet.
- int header;
- // Vertical space for the overlay from the bottom of the sheet.
- int footer;
- // Margin on each side of the sheet.
- int left;
- int right;
- int top;
- int bottom;
-};
-
-// Settings that define the size and printable areas of a page. Unit is
-// unspecified.
-class PageSetup {
- public:
- PageSetup();
-
- void Clear();
-
- // Equality operator.
- bool Equals(const PageSetup& rhs) const;
-
- void Init(const gfx::Size& physical_size, const gfx::Rect& printable_area,
- int text_height);
-
- void SetRequestedMargins(const PageMargins& requested_margins);
-
- const gfx::Size& physical_size() const { return physical_size_; }
- const gfx::Rect& overlay_area() const { return overlay_area_; }
- const gfx::Rect& content_area() const { return content_area_; }
- const PageMargins& effective_margins() const {
- return effective_margins_;
- }
-
- private:
- // Physical size of the page, including non-printable margins.
- gfx::Size physical_size_;
-
- // The printable area as specified by the printer driver. We can't get
- // larger than this.
- gfx::Rect printable_area_;
-
- // The printable area for headers and footers.
- gfx::Rect overlay_area_;
-
- // The printable area as selected by the user's margins.
- gfx::Rect content_area_;
-
- // Effective margins.
- PageMargins effective_margins_;
-
- // Requested margins.
- PageMargins requested_margins_;
-
- // Space that must be kept free for the overlays.
- int text_height_;
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PAGE_SETUP_H__
diff --git a/chrome/browser/printing/page_setup_unittest.cc b/chrome/browser/printing/page_setup_unittest.cc
deleted file mode 100644
index 8619014..0000000
--- a/chrome/browser/printing/page_setup_unittest.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/page_setup.h"
-
-#include <stdlib.h>
-#include <time.h>
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-TEST(PageSetupTest, Random) {
- time_t seed = time(NULL);
- int kMax = 10;
- srand(static_cast<unsigned>(seed));
-
- // Margins.
- printing::PageMargins margins;
- margins.header = rand() % kMax;
- margins.footer = rand() % kMax;
- margins.left = rand() % kMax;
- margins.top = rand() % kMax;
- margins.right = rand() % kMax;
- margins.bottom = rand() % kMax;
- int kTextHeight = rand() % kMax;
-
- // Page description.
- gfx::Size page_size(100 + rand() % kMax, 200 + rand() % kMax);
- gfx::Rect printable_area(rand() % kMax, rand() % kMax, 0, 0);
- printable_area.set_width(page_size.width() - (rand() % kMax) -
- printable_area.x());
- printable_area.set_height(page_size.height() - (rand() % kMax) -
- printable_area.y());
-
- // Make the calculations.
- printing::PageSetup setup;
- setup.SetRequestedMargins(margins);
- setup.Init(page_size, printable_area, kTextHeight);
-
- // Calculate the effective margins.
- printing::PageMargins effective_margins;
- effective_margins.header = std::max(margins.header, printable_area.y());
- effective_margins.left = std::max(margins.left, printable_area.x());
- effective_margins.top = std::max(margins.top,
- effective_margins.header + kTextHeight);
- effective_margins.footer = std::max(margins.footer,
- page_size.height() -
- printable_area.bottom());
- effective_margins.right = std::max(margins.right,
- page_size.width() -
- printable_area.right());
- effective_margins.bottom = std::max(margins.bottom,
- effective_margins.footer + kTextHeight);
-
- // Calculate the overlay area.
- gfx::Rect overlay_area(effective_margins.left, effective_margins.header,
- page_size.width() - effective_margins.right -
- effective_margins.left,
- page_size.height() - effective_margins.footer -
- effective_margins.header);
-
- // Calculate the content area.
- gfx::Rect content_area(overlay_area.x(),
- effective_margins.top,
- overlay_area.width(),
- page_size.height() - effective_margins.bottom -
- effective_margins.top);
-
- // Test values.
- EXPECT_EQ(page_size, setup.physical_size()) << seed << " " << page_size <<
- " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(overlay_area, setup.overlay_area()) << seed << " " << page_size <<
- " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(content_area, setup.content_area()) << seed << " " << page_size <<
- " " << printable_area << " " << kTextHeight;
-
- EXPECT_EQ(effective_margins.header, setup.effective_margins().header) <<
- seed << " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.footer, setup.effective_margins().footer) <<
- seed << " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.left, setup.effective_margins().left) << seed <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.top, setup.effective_margins().top) << seed <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.right, setup.effective_margins().right) << seed <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.bottom, setup.effective_margins().bottom) <<
- seed << " " << page_size << " " << printable_area << " " << kTextHeight;
-}
-
-TEST(PageSetupTest, HardCoded) {
- // Margins.
- printing::PageMargins margins;
- margins.header = 2;
- margins.footer = 2;
- margins.left = 4;
- margins.top = 4;
- margins.right = 4;
- margins.bottom = 4;
- int kTextHeight = 3;
-
- // Page description.
- gfx::Size page_size(100, 100);
- gfx::Rect printable_area(3, 3, 94, 94);
-
- // Make the calculations.
- printing::PageSetup setup;
- setup.SetRequestedMargins(margins);
- setup.Init(page_size, printable_area, kTextHeight);
-
- // Calculate the effective margins.
- printing::PageMargins effective_margins;
- effective_margins.header = 3;
- effective_margins.left = 4;
- effective_margins.top = 6;
- effective_margins.footer = 3;
- effective_margins.right = 4;
- effective_margins.bottom = 6;
-
- // Calculate the overlay area.
- gfx::Rect overlay_area(4, 3, 92, 94);
-
- // Calculate the content area.
- gfx::Rect content_area(4, 6, 92, 88);
-
- // Test values.
- EXPECT_EQ(page_size, setup.physical_size()) << " " << page_size <<
- " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(overlay_area, setup.overlay_area()) << " " << page_size <<
- " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(content_area, setup.content_area()) << " " << page_size <<
- " " << printable_area << " " << kTextHeight;
-
- EXPECT_EQ(effective_margins.header, setup.effective_margins().header) <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.footer, setup.effective_margins().footer) <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.left, setup.effective_margins().left) <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.top, setup.effective_margins().top) <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.right, setup.effective_margins().right) <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
- EXPECT_EQ(effective_margins.bottom, setup.effective_margins().bottom) <<
- " " << page_size << " " << printable_area << " " << kTextHeight;
-}
diff --git a/chrome/browser/printing/print_job.cc b/chrome/browser/printing/print_job.cc
index 88f68e1..d65b7bf 100644
--- a/chrome/browser/printing/print_job.cc
+++ b/chrome/browser/printing/print_job.cc
@@ -7,9 +7,9 @@
#include "base/message_loop.h"
#include "base/timer.h"
#include "chrome/browser/printing/print_job_worker.h"
-#include "chrome/browser/printing/printed_document.h"
-#include "chrome/browser/printing/printed_page.h"
#include "chrome/common/notification_service.h"
+#include "printing/printed_document.h"
+#include "printing/printed_page.h"
#ifdef _MSC_VER
#pragma warning(disable:4355) // 'this' : used in base member initializer list
diff --git a/chrome/browser/printing/print_job_manager.cc b/chrome/browser/printing/print_job_manager.cc
index 320aa21..dc122ea 100644
--- a/chrome/browser/printing/print_job_manager.cc
+++ b/chrome/browser/printing/print_job_manager.cc
@@ -6,9 +6,9 @@
#include "chrome/browser/printing/print_job.h"
#include "chrome/browser/printing/printer_query.h"
-#include "chrome/browser/printing/printed_document.h"
-#include "chrome/browser/printing/printed_page.h"
#include "chrome/common/notification_service.h"
+#include "printing/printed_document.h"
+#include "printing/printed_page.h"
namespace printing {
diff --git a/chrome/browser/printing/print_job_unittest.cc b/chrome/browser/printing/print_job_unittest.cc
index 209b366..fe98964 100644
--- a/chrome/browser/printing/print_job_unittest.cc
+++ b/chrome/browser/printing/print_job_unittest.cc
@@ -5,9 +5,9 @@
#include "base/message_loop.h"
#include "chrome/browser/printing/print_job.h"
#include "chrome/browser/printing/print_job_worker.h"
-#include "chrome/browser/printing/printed_pages_source.h"
#include "chrome/common/notification_registrar.h"
#include "chrome/common/notification_service.h"
+#include "printing/printed_pages_source.h"
#include "googleurl/src/gurl.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc
index 728ff3d..d8c2d83 100644
--- a/chrome/browser/printing/print_job_worker.cc
+++ b/chrome/browser/printing/print_job_worker.cc
@@ -6,9 +6,9 @@
#include "base/message_loop.h"
#include "chrome/browser/printing/print_job.h"
-#include "chrome/browser/printing/printed_document.h"
-#include "chrome/browser/printing/printed_page.h"
#include "chrome/common/notification_service.h"
+#include "printing/printed_document.h"
+#include "printing/printed_page.h"
namespace printing {
diff --git a/chrome/browser/printing/print_job_worker.h b/chrome/browser/printing/print_job_worker.h
index b01881a..9ad2c39 100644
--- a/chrome/browser/printing/print_job_worker.h
+++ b/chrome/browser/printing/print_job_worker.h
@@ -7,8 +7,8 @@
#include "base/task.h"
#include "base/thread.h"
-#include "chrome/browser/printing/page_number.h"
-#include "chrome/browser/printing/win_printing_context.h"
+#include "printing/page_number.h"
+#include "printing/printing_context.h"
namespace printing {
diff --git a/chrome/browser/printing/print_job_worker_owner.h b/chrome/browser/printing/print_job_worker_owner.h
index 334c5ab..1810eca 100644
--- a/chrome/browser/printing/print_job_worker_owner.h
+++ b/chrome/browser/printing/print_job_worker_owner.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_PRINTING_PRINT_JOB_WORKER_OWNER_H__
#define CHROME_BROWSER_PRINTING_PRINT_JOB_WORKER_OWNER_H__
-#include "chrome/browser/printing/win_printing_context.h"
+#include "printing/printing_context.h"
class MessageLoop;
diff --git a/chrome/browser/printing/print_settings.cc b/chrome/browser/printing/print_settings.cc
deleted file mode 100644
index d7eeeb0..0000000
--- a/chrome/browser/printing/print_settings.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/print_settings.h"
-
-#include "base/atomic_sequence_num.h"
-#include "base/logging.h"
-#include "chrome/common/render_messages.h"
-#include "printing/units.h"
-
-namespace printing {
-
-// Global SequenceNumber used for generating unique cookie values.
-static base::AtomicSequenceNumber cookie_seq(base::LINKER_INITIALIZED);
-
-PrintSettings::PrintSettings()
- : min_shrink(1.25),
- max_shrink(2.0),
- desired_dpi(72),
- selection_only(false),
- dpi_(0),
- landscape_(false) {
-}
-
-void PrintSettings::Clear() {
- ranges.clear();
- min_shrink = 1.25;
- max_shrink = 2.;
- desired_dpi = 72;
- selection_only = false;
- printer_name_.clear();
- device_name_.clear();
- page_setup_pixels_.Clear();
- dpi_ = 0;
- landscape_ = false;
-}
-
-#ifdef WIN32
-void PrintSettings::Init(HDC hdc,
- const DEVMODE& dev_mode,
- const PageRanges& new_ranges,
- const std::wstring& new_device_name,
- bool print_selection_only) {
- DCHECK(hdc);
- printer_name_ = dev_mode.dmDeviceName;
- device_name_ = new_device_name;
- ranges = new_ranges;
- landscape_ = dev_mode.dmOrientation == DMORIENT_LANDSCAPE;
- selection_only = print_selection_only;
-
- dpi_ = GetDeviceCaps(hdc, LOGPIXELSX);
- // No printer device is known to advertise different dpi in X and Y axis; even
- // the fax device using the 200x100 dpi setting. It's ought to break so many
- // applications that it's not even needed to care about. WebKit doesn't
- // support different dpi settings in X and Y axis.
- DCHECK_EQ(dpi_, GetDeviceCaps(hdc, LOGPIXELSY));
-
- DCHECK_EQ(GetDeviceCaps(hdc, SCALINGFACTORX), 0);
- DCHECK_EQ(GetDeviceCaps(hdc, SCALINGFACTORY), 0);
-
- // Initialize page_setup_pixels_.
- gfx::Size physical_size_pixels(GetDeviceCaps(hdc, PHYSICALWIDTH),
- GetDeviceCaps(hdc, PHYSICALHEIGHT));
- gfx::Rect printable_area_pixels(GetDeviceCaps(hdc, PHYSICALOFFSETX),
- GetDeviceCaps(hdc, PHYSICALOFFSETY),
- GetDeviceCaps(hdc, HORZRES),
- GetDeviceCaps(hdc, VERTRES));
-
- SetPrinterPrintableArea(physical_size_pixels, printable_area_pixels);
-}
-#endif
-
-void PrintSettings::SetPrinterPrintableArea(
- gfx::Size const& physical_size_pixels,
- gfx::Rect const& printable_area_pixels) {
-
- int margin_printer_units = ConvertUnit(500, kHundrethsMMPerInch, dpi_);
-
- // Start by setting the user configuration
- // Hard-code text_height = 0.5cm = ~1/5 of inch
- page_setup_pixels_.Init(physical_size_pixels,
- printable_area_pixels,
- margin_printer_units);
-
- // Now apply user configured settings.
- PageMargins margins;
- margins.header = margin_printer_units;
- margins.footer = margin_printer_units;
- margins.left = margin_printer_units;
- margins.top = margin_printer_units;
- margins.right = margin_printer_units;
- margins.bottom = margin_printer_units;
- page_setup_pixels_.SetRequestedMargins(margins);
-}
-
-void PrintSettings::RenderParams(ViewMsg_Print_Params* params) const {
- DCHECK(params);
- params->printable_size.SetSize(page_setup_pixels_.content_area().width(),
- page_setup_pixels_.content_area().height());
- params->dpi = dpi_;
- // Currently hardcoded at 1.25. See PrintSettings' constructor.
- params->min_shrink = min_shrink;
- // Currently hardcoded at 2.0. See PrintSettings' constructor.
- params->max_shrink = max_shrink;
- // Currently hardcoded at 72dpi. See PrintSettings' constructor.
- params->desired_dpi = desired_dpi;
- // Always use an invalid cookie.
- params->document_cookie = 0;
- params->selection_only = selection_only;
-}
-
-bool PrintSettings::Equals(const PrintSettings& rhs) const {
- // Do not test the display device name (printer_name_) for equality since it
- // may sometimes be chopped off at 30 chars. As long as device_name is the
- // same, that's fine.
- return ranges == rhs.ranges &&
- min_shrink == rhs.min_shrink &&
- max_shrink == rhs.max_shrink &&
- desired_dpi == rhs.desired_dpi &&
- overlays.Equals(rhs.overlays) &&
- device_name_ == rhs.device_name_ &&
- page_setup_pixels_.Equals(rhs.page_setup_pixels_) &&
- dpi_ == rhs.dpi_ &&
- landscape_ == rhs.landscape_;
-}
-
-int PrintSettings::NewCookie() {
- // A cookie of 0 is used to mark a document as unassigned, count from 1.
- return cookie_seq.GetNext() + 1;
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/print_settings.h b/chrome/browser/printing/print_settings.h
deleted file mode 100644
index a82af96..0000000
--- a/chrome/browser/printing/print_settings.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PRINT_SETTINGS_H__
-#define CHROME_BROWSER_PRINTING_PRINT_SETTINGS_H__
-
-#include "base/gfx/rect.h"
-#include "chrome/browser/printing/page_overlays.h"
-#include "chrome/browser/printing/page_range.h"
-#include "chrome/browser/printing/page_setup.h"
-
-struct ViewMsg_Print_Params;
-typedef struct HDC__* HDC;
-typedef struct _devicemodeW DEVMODE;
-
-namespace printing {
-
-// OS-independent print settings.
-class PrintSettings {
- public:
- PrintSettings();
-
- // Reinitialize the settings to the default values.
- void Clear();
-
-#ifdef WIN32
- // Reads the settings from the selected device context. Calculates derived
- // values like printable_area_.
- void Init(HDC hdc,
- const DEVMODE& dev_mode,
- const PageRanges& new_ranges,
- const std::wstring& new_device_name,
- bool selection_only);
-#endif
-
- // Set printer printable area in in pixels.
- void SetPrinterPrintableArea(gfx::Size const& physical_size_pixels,
- gfx::Rect const& printable_area_pixels);
-
- // Initializes the print parameters that needs to be sent to the renderer
- // process.
- void RenderParams(ViewMsg_Print_Params* params) const;
-
- // Equality operator.
- // NOTE: printer_name is NOT tested for equality since it doesn't affect the
- // output.
- bool Equals(const PrintSettings& rhs) const;
-
- const std::wstring& printer_name() const { return printer_name_; }
- void set_device_name(const std::wstring& device_name) {
- device_name_ = device_name;
- }
- const std::wstring& device_name() const { return device_name_; }
- int dpi() const { return dpi_; }
- const PageSetup& page_setup_pixels() const { return page_setup_pixels_; }
-
- // Multi-page printing. Each PageRange describes a from-to page combination.
- // This permits printing selected pages only.
- PageRanges ranges;
-
- // By imaging to a width a little wider than the available pixels, thin pages
- // will be scaled down a little, matching the way they print in IE and Camino.
- // This lets them use fewer sheets than they would otherwise, which is
- // presumably why other browsers do this. Wide pages will be scaled down more
- // than this.
- double min_shrink;
-
- // This number determines how small we are willing to reduce the page content
- // in order to accommodate the widest line. If the page would have to be
- // reduced smaller to make the widest line fit, we just clip instead (this
- // behavior matches MacIE and Mozilla, at least)
- double max_shrink;
-
- // Desired visible dots per inch rendering for output. Printing should be
- // scaled to ScreenDpi/dpix*desired_dpi.
- int desired_dpi;
-
- // The various overlays (headers and footers).
- PageOverlays overlays;
-
- // Indicates if the user only wants to print the current selection.
- bool selection_only;
-
- // Cookie generator. It is used to initialize PrintedDocument with its
- // associated PrintSettings, to be sure that each generated PrintedPage is
- // correctly associated with its corresponding PrintedDocument.
- static int NewCookie();
-
- private:
- //////////////////////////////////////////////////////////////////////////////
- // Settings that can't be changed without side-effects.
-
- // Printer name as shown to the user.
- std::wstring printer_name_;
-
- // Printer device name as opened by the OS.
- std::wstring device_name_;
-
- // Page setup in pixel units, dpi adjusted.
- PageSetup page_setup_pixels_;
-
- // Printer's device effective dots per inch in both axis.
- int dpi_;
-
- // Is the orientation landscape or portrait.
- bool landscape_;
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PRINT_SETTINGS_H__
diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc
index 1c56d00d..d1040b2 100644
--- a/chrome/browser/printing/print_view_manager.cc
+++ b/chrome/browser/printing/print_view_manager.cc
@@ -9,7 +9,6 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/printing/print_job.h"
#include "chrome/browser/printing/print_job_manager.h"
-#include "chrome/browser/printing/printed_document.h"
#include "chrome/browser/printing/printer_query.h"
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/tab_contents/navigation_entry.h"
@@ -18,6 +17,7 @@
#include "chrome/common/render_messages.h"
#include "grit/generated_resources.h"
#include "printing/native_metafile.h"
+#include "printing/printed_document.h"
using base::TimeDelta;
diff --git a/chrome/browser/printing/print_view_manager.h b/chrome/browser/printing/print_view_manager.h
index cd95f06..2945b0c 100644
--- a/chrome/browser/printing/print_view_manager.h
+++ b/chrome/browser/printing/print_view_manager.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_PRINTING_PRINT_VIEW_MANAGER_H_
#include "base/ref_counted.h"
-#include "chrome/browser/printing/printed_pages_source.h"
#include "chrome/common/notification_registrar.h"
+#include "printing/printed_pages_source.h"
class RenderViewHost;
class TabContents;
diff --git a/chrome/browser/printing/printed_document.cc b/chrome/browser/printing/printed_document.cc
deleted file mode 100644
index ac26581..0000000
--- a/chrome/browser/printing/printed_document.cc
+++ /dev/null
@@ -1,366 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/printed_document.h"
-
-#include <set>
-
-#include "app/gfx/font.h"
-#include "app/gfx/text_elider.h"
-#include "app/win_util.h"
-#include "base/file_util.h"
-#include "base/message_loop.h"
-#include "base/singleton.h"
-#include "base/string_util.h"
-#include "base/time.h"
-#include "chrome/browser/printing/page_number.h"
-#include "chrome/browser/printing/page_overlays.h"
-#include "chrome/browser/printing/printed_pages_source.h"
-#include "chrome/browser/printing/printed_page.h"
-#include "printing/units.h"
-#include "skia/ext/platform_device.h"
-
-using base::Time;
-
-namespace {
-
-struct PrintDebugDumpPath {
- PrintDebugDumpPath()
- : enabled(false) {
- }
-
- bool enabled;
- std::wstring debug_dump_path;
-};
-
-Singleton<PrintDebugDumpPath> g_debug_dump_info;
-
-} // namespace
-
-namespace printing {
-
-PrintedDocument::PrintedDocument(const PrintSettings& settings,
- PrintedPagesSource* source,
- int cookie)
- : mutable_(source),
- immutable_(settings, source, cookie) {
-
- // Records the expected page count if a range is setup.
- if (!settings.ranges.empty()) {
- // If there is a range, set the number of page
- for (unsigned i = 0; i < settings.ranges.size(); ++i) {
- const PageRange& range = settings.ranges[i];
- mutable_.expected_page_count_ += range.to - range.from + 1;
- }
- }
-}
-
-PrintedDocument::~PrintedDocument() {
-}
-
-void PrintedDocument::SetPage(int page_number,
- NativeMetafile* metafile,
- double shrink) {
- // Notice the page_number + 1, the reason is that this is the value that will
- // be shown. Users dislike 0-based counting.
- scoped_refptr<PrintedPage> page(
- new PrintedPage(page_number + 1,
- metafile, immutable_.settings_.page_setup_pixels().physical_size()));
- {
- AutoLock lock(lock_);
- mutable_.pages_[page_number] = page;
- if (mutable_.shrink_factor == 0) {
- mutable_.shrink_factor = shrink;
- } else {
- DCHECK_EQ(mutable_.shrink_factor, shrink);
- }
- }
- DebugDump(*page);
-}
-
-bool PrintedDocument::GetPage(int page_number,
- scoped_refptr<PrintedPage>* page) {
- 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;
- }
- }
- return false;
-}
-
-void PrintedDocument::RenderPrintedPage(const PrintedPage& page,
- HDC context) const {
-#ifndef NDEBUG
- {
- // Make sure the page is from our list.
- AutoLock lock(lock_);
- DCHECK(&page == mutable_.pages_.find(page.page_number() - 1)->second.get());
- }
-#endif
-
- // Save the state to make sure the context this function call does not modify
- // the device context.
- int saved_state = SaveDC(context);
- DCHECK_NE(saved_state, 0);
- skia::PlatformDevice::InitializeDC(context);
- {
- // Save the state (again) to apply the necessary world transformation.
- int saved_state = SaveDC(context);
- DCHECK_NE(saved_state, 0);
-
- // Setup the matrix to translate and scale to the right place. Take in
- // account the actual shrinking factor.
- XFORM xform = { 0 };
- xform.eDx = static_cast<float>(
- immutable_.settings_.page_setup_pixels().content_area().x());
- xform.eDy = static_cast<float>(
- immutable_.settings_.page_setup_pixels().content_area().y());
- xform.eM11 = static_cast<float>(1. / mutable_.shrink_factor);
- xform.eM22 = static_cast<float>(1. / mutable_.shrink_factor);
- BOOL res = ModifyWorldTransform(context, &xform, MWT_LEFTMULTIPLY);
- DCHECK_NE(res, 0);
-
- if (!page.native_metafile()->SafePlayback(context)) {
- NOTREACHED();
- }
-
- res = RestoreDC(context, saved_state);
- DCHECK_NE(res, 0);
- }
-
- // Print the header and footer.
- int base_font_size = gfx::Font().height();
- int new_font_size = ConvertUnit(10,
- immutable_.settings_.desired_dpi,
- immutable_.settings_.dpi());
- DCHECK_GT(new_font_size, base_font_size);
- gfx::Font font(gfx::Font().DeriveFont(new_font_size - base_font_size));
- HGDIOBJ old_font = SelectObject(context, font.hfont());
- DCHECK(old_font != NULL);
- // We don't want a white square around the text ever if overflowing.
- SetBkMode(context, TRANSPARENT);
- PrintHeaderFooter(context, page, PageOverlays::LEFT, PageOverlays::TOP,
- font);
- PrintHeaderFooter(context, page, PageOverlays::CENTER, PageOverlays::TOP,
- font);
- PrintHeaderFooter(context, page, PageOverlays::RIGHT, PageOverlays::TOP,
- font);
- PrintHeaderFooter(context, page, PageOverlays::LEFT, PageOverlays::BOTTOM,
- font);
- PrintHeaderFooter(context, page, PageOverlays::CENTER, PageOverlays::BOTTOM,
- font);
- PrintHeaderFooter(context, page, PageOverlays::RIGHT, PageOverlays::BOTTOM,
- font);
- int res = RestoreDC(context, saved_state);
- DCHECK_NE(res, 0);
-}
-
-bool PrintedDocument::RenderPrintedPageNumber(int page_number, HDC context) {
- scoped_refptr<PrintedPage> page;
- if (!GetPage(page_number, &page))
- return false;
- RenderPrintedPage(*page.get(), context);
- return true;
-}
-
-bool PrintedDocument::IsComplete() const {
- AutoLock lock(lock_);
- if (!mutable_.page_count_)
- return false;
- PageNumber page(immutable_.settings_, mutable_.page_count_);
- if (page == PageNumber::npos())
- return false;
- for (; page != PageNumber::npos(); ++page) {
- PrintedPages::const_iterator itr = mutable_.pages_.find(page.ToInt());
- if (itr == mutable_.pages_.end() || !itr->second.get() ||
- !itr->second->native_metafile())
- return false;
- }
- return true;
-}
-
-void PrintedDocument::DisconnectSource() {
- AutoLock lock(lock_);
- mutable_.source_ = NULL;
-}
-
-size_t PrintedDocument::MemoryUsage() const {
- std::vector<scoped_refptr<PrintedPage>> pages_copy;
- {
- AutoLock lock(lock_);
- pages_copy.reserve(mutable_.pages_.size());
- PrintedPages::const_iterator end = mutable_.pages_.end();
- for (PrintedPages::const_iterator itr = mutable_.pages_.begin();
- itr != end; ++itr) {
- if (itr->second.get()) {
- pages_copy.push_back(itr->second);
- }
- }
- }
- size_t total = 0;
- for (size_t i = 0; i < pages_copy.size(); ++i) {
- total += pages_copy[i]->native_metafile()->GetDataSize();
- }
- return total;
-}
-
-void PrintedDocument::set_page_count(int max_page) {
- AutoLock lock(lock_);
- DCHECK_EQ(0, mutable_.page_count_);
- mutable_.page_count_ = max_page;
- if (immutable_.settings_.ranges.empty()) {
- mutable_.expected_page_count_ = max_page;
- } else {
- // If there is a range, don't bother since expected_page_count_ is already
- // initialized.
- DCHECK_NE(mutable_.expected_page_count_, 0);
- }
-}
-
-int PrintedDocument::page_count() const {
- AutoLock lock(lock_);
- return mutable_.page_count_;
-}
-
-int PrintedDocument::expected_page_count() const {
- AutoLock lock(lock_);
- return mutable_.expected_page_count_;
-}
-
-void PrintedDocument::PrintHeaderFooter(HDC context,
- const PrintedPage& page,
- PageOverlays::HorizontalPosition x,
- PageOverlays::VerticalPosition y,
- const gfx::Font& font) const {
- const PrintSettings& settings = immutable_.settings_;
- const std::wstring& line = settings.overlays.GetOverlay(x, y);
- if (line.empty()) {
- return;
- }
- std::wstring output(PageOverlays::ReplaceVariables(line, *this, page));
- if (output.empty()) {
- // May happens if document name or url is empty.
- return;
- }
- const gfx::Size string_size(font.GetStringWidth(output), font.height());
- gfx::Rect bounding;
- bounding.set_height(string_size.height());
- const gfx::Rect& overlay_area(settings.page_setup_pixels().overlay_area());
- // Hard code .25 cm interstice between overlays. Make sure that some space is
- // kept between each headers.
- const int interstice = ConvertUnit(250, kHundrethsMMPerInch, settings.dpi());
- const int max_width = overlay_area.width() / 3 - interstice;
- const int actual_width = std::min(string_size.width(), max_width);
- switch (x) {
- case PageOverlays::LEFT:
- bounding.set_x(overlay_area.x());
- bounding.set_width(max_width);
- break;
- case PageOverlays::CENTER:
- bounding.set_x(overlay_area.x() +
- (overlay_area.width() - actual_width) / 2);
- bounding.set_width(actual_width);
- break;
- case PageOverlays::RIGHT:
- bounding.set_x(overlay_area.right() - actual_width);
- bounding.set_width(actual_width);
- break;
- }
-
- DCHECK_LE(bounding.right(), overlay_area.right());
-
- switch (y) {
- case PageOverlays::BOTTOM:
- bounding.set_y(overlay_area.bottom() - string_size.height());
- break;
- case PageOverlays::TOP:
- bounding.set_y(overlay_area.y());
- break;
- }
-
- if (string_size.width() > bounding.width()) {
- if (line == PageOverlays::kUrl) {
- output = gfx::ElideUrl(url(), font, bounding.width(), std::wstring());
- } else {
- output = gfx::ElideText(output, font, bounding.width());
- }
- }
-
- // Save the state (again) for the clipping region.
- int saved_state = SaveDC(context);
- DCHECK_NE(saved_state, 0);
-
- int result = IntersectClipRect(context, bounding.x(), bounding.y(),
- bounding.right() + 1, bounding.bottom() + 1);
- DCHECK(result == SIMPLEREGION || result == COMPLEXREGION);
- TextOut(context,
- bounding.x(), bounding.y(),
- output.c_str(),
- static_cast<int>(output.size()));
- int res = RestoreDC(context, saved_state);
- DCHECK_NE(res, 0);
-}
-
-void PrintedDocument::DebugDump(const PrintedPage& page)
-{
- if (!g_debug_dump_info->enabled)
- return;
-
- std::wstring filename;
- filename += date();
- filename += L"_";
- filename += time();
- filename += L"_";
- filename += name();
- filename += L"_";
- filename += StringPrintf(L"%02d", page.page_number());
- filename += L"_.emf";
- file_util::ReplaceIllegalCharacters(&filename, '_');
- std::wstring path(g_debug_dump_info->debug_dump_path);
- file_util::AppendToPath(&path, filename);
- page.native_metafile()->SaveTo(path);
-}
-
-void PrintedDocument::set_debug_dump_path(const std::wstring& debug_dump_path) {
- g_debug_dump_info->enabled = !debug_dump_path.empty();
- g_debug_dump_info->debug_dump_path = debug_dump_path;
-}
-
-const std::wstring& PrintedDocument::debug_dump_path() {
- return g_debug_dump_info->debug_dump_path;
-}
-
-PrintedDocument::Mutable::Mutable(PrintedPagesSource* source)
- : source_(source),
- expected_page_count_(0),
- page_count_(0),
- shrink_factor(0) {
-}
-
-PrintedDocument::Immutable::Immutable(const PrintSettings& settings,
- PrintedPagesSource* source,
- int cookie)
- : settings_(settings),
- source_message_loop_(MessageLoop::current()),
- name_(source->RenderSourceName()),
- url_(source->RenderSourceUrl()),
- cookie_(cookie) {
- // Setup the document's date.
-#ifdef WIN32
- // On Windows, use the native time formatting for printing.
- SYSTEMTIME systemtime;
- GetLocalTime(&systemtime);
- date_ = win_util::FormatSystemDate(systemtime, std::wstring());
- time_ = win_util::FormatSystemTime(systemtime, std::wstring());
-#else
- Time now = Time::Now();
- date_ = TimeFormat::ShortDateNumeric(now);
- time_ = TimeFormat::TimeOfDay(now);
-#endif // WIN32
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/printed_document.h b/chrome/browser/printing/printed_document.h
deleted file mode 100644
index 0d1480d..0000000
--- a/chrome/browser/printing/printed_document.h
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PRINTED_DOCUMENT_H__
-#define CHROME_BROWSER_PRINTING_PRINTED_DOCUMENT_H__
-
-#include <map>
-
-#include "base/lock.h"
-#include "base/ref_counted.h"
-#include "base/scoped_ptr.h"
-#include "chrome/browser/printing/print_settings.h"
-#include "printing/native_metafile.h"
-#include "googleurl/src/gurl.h"
-
-class MessageLoop;
-
-namespace gfx {
-class Font;
-}
-
-namespace printing {
-
-class PrintedPage;
-class PrintedPagesSource;
-
-// A collection of rendered pages. The settings are immutable. If the print
-// settings are changed, a new PrintedDocument must be created.
-// Warning: May be accessed from many threads at the same time. Only one thread
-// will have write access. Sensible functions are protected by a lock.
-// Warning: Once a page is loaded, it cannot be replaced. Pages may be discarded
-// under low memory conditions.
-class PrintedDocument : public base::RefCountedThreadSafe<PrintedDocument> {
- public:
- // The cookie shall be unique and has a specific relationship with its
- // originating source and settings.
- PrintedDocument(const PrintSettings& settings,
- PrintedPagesSource* source,
- int cookie);
- ~PrintedDocument();
-
- // Sets a page's data. 0-based. Takes metafile ownership.
- // Note: locks for a short amount of time.
- void SetPage(int page_number, NativeMetafile* metafile, double shrink);
-
- // Retrieves a page. If the page is not available right now, it
- // requests to have this page be rendered and returns false.
- // Note: locks for a short amount of time.
- bool GetPage(int page_number, scoped_refptr<PrintedPage>* page);
-
- // Draws the page in the context.
- // Note: locks for a short amount of time in debug only.
- void RenderPrintedPage(const PrintedPage& page, HDC context) const;
-
- // Draws the page in the context. If the page is not available right now, it
- // requests to have this page be rendered and returns false.
- // Note: locks for a short amount of time.
- bool RenderPrintedPageNumber(int page_number, HDC context);
-
- // Returns true if all the necessary pages for the settings are already
- // rendered.
- // Note: locks while parsing the whole tree.
- bool IsComplete() const;
-
- // Disconnects the PrintedPage source (PrintedPagesSource). It is done when
- // the source is being destroyed.
- void DisconnectSource();
-
- // Retrieves the current memory usage of the renderer pages.
- // Note: locks for a short amount of time.
- size_t MemoryUsage() const;
-
- // Sets the number of pages in the document to be rendered. Can only be set
- // once.
- // Note: locks for a short amount of time.
- void set_page_count(int max_page);
-
- // Number of pages in the document. Used for headers/footers.
- // Note: locks for a short amount of time.
- int page_count() const;
-
- // Returns the number of expected pages to be rendered. It is a non-linear
- // series if settings().ranges is not empty. It is the same value as
- // document_page_count() otherwise.
- // Note: locks for a short amount of time.
- int expected_page_count() const;
-
- // Getters. All these items are immutable hence thread-safe.
- const PrintSettings& settings() const { return immutable_.settings_; }
- const std::wstring& name() const {
- return immutable_.name_;
- }
- const GURL& url() const { return immutable_.url_; }
- const std::wstring& date() const { return immutable_.date_; }
- const std::wstring& time() const { return immutable_.time_; }
- const int cookie() const { return immutable_.cookie_; }
-
- // Sets a path where to dump printing output files for debugging. If never set
- // no files are generated.
- static void set_debug_dump_path(const std::wstring& debug_dump_path);
-
- static const std::wstring& debug_dump_path();
-
- private:
- // Array of data for each print previewed page.
- typedef std::map<int, scoped_refptr<PrintedPage>> PrintedPages;
-
- // Contains all the mutable stuff. All this stuff MUST be accessed with the
- // lock held.
- struct Mutable {
- Mutable(PrintedPagesSource* source);
-
- // Source that generates the PrintedPage's (i.e. a TabContents). It will be
- // set back to NULL if the source is deleted before this object.
- PrintedPagesSource* source_;
-
- // Contains the pages' representation. This is a collection of PrintedPage.
- // Warning: Lock must be held when accessing this member.
- PrintedPages pages_;
-
- // Number of expected pages to be rendered.
- // Warning: Lock must be held when accessing this member.
- int expected_page_count_;
-
- // The total number of pages in the document.
- int page_count_;
-
- // Shrink done in comparison to desired_dpi.
- double shrink_factor;
- };
-
- // Contains all the immutable stuff. All this stuff can be accessed without
- // any lock held. This is because it can't be changed after the object's
- // construction.
- struct Immutable {
- Immutable(const PrintSettings& settings, PrintedPagesSource* source,
- int cookie);
-
- // Print settings used to generate this document. Immutable.
- PrintSettings settings_;
-
- // Native thread for the render source.
- MessageLoop* source_message_loop_;
-
- // Document name. Immutable.
- std::wstring name_;
-
- // URL that generated this document. Immutable.
- GURL url_;
-
- // The date on which this job started. Immutable.
- std::wstring date_;
-
- // The time at which this job started. Immutable.
- std::wstring time_;
-
- // Cookie to uniquely identify this document. It is used to make sure that a
- // PrintedPage is correctly belonging to the PrintedDocument. Since
- // PrintedPage generation is completely asynchronous, it could be easy to
- // mess up and send the page to the wrong document. It can be viewed as a
- // simpler hash of PrintSettings since a new document is made each time the
- // print settings change.
- int cookie_;
- };
-
- // Prints the headers and footers for one page in the specified context
- // according to the current settings.
- void PrintHeaderFooter(HDC context,
- const PrintedPage& page,
- PageOverlays::HorizontalPosition x,
- PageOverlays::VerticalPosition y,
- const gfx::Font& font) const;
-
- void DebugDump(const PrintedPage& page);
-
- // All writable data member access must be guarded by this lock. Needs to be
- // mutable since it can be acquired from const member functions.
- mutable Lock lock_;
-
- // All the mutable members.
- Mutable mutable_;
-
- // All the immutable members.
- const Immutable immutable_;
-
- DISALLOW_EVIL_CONSTRUCTORS(PrintedDocument);
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PRINTED_DOCUMENT_H__
diff --git a/chrome/browser/printing/printed_page.cc b/chrome/browser/printing/printed_page.cc
deleted file mode 100644
index 4c44acc..0000000
--- a/chrome/browser/printing/printed_page.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/printed_page.h"
-
-namespace printing {
-
-PrintedPage::PrintedPage(int page_number,
- NativeMetafile* native_metafile,
- const gfx::Size& page_size)
- : page_number_(page_number),
- native_metafile_(native_metafile),
- page_size_(page_size) {
-}
-
-PrintedPage::~PrintedPage() {
-}
-
-const NativeMetafile* PrintedPage::native_metafile() const {
- return native_metafile_.get();
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/printed_page.h b/chrome/browser/printing/printed_page.h
deleted file mode 100644
index b60c93d..0000000
--- a/chrome/browser/printing/printed_page.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PRINTED_PAGE_H__
-#define CHROME_BROWSER_PRINTING_PRINTED_PAGE_H__
-
-#include "base/gfx/rect.h"
-#include "base/gfx/size.h"
-#include "base/ref_counted.h"
-#include "base/scoped_ptr.h"
-#include "printing/native_metafile.h"
-
-namespace printing {
-
-// Contains the data to reproduce a printed page, either on screen or on
-// paper. Once created, this object is immutable. It has no reference to the
-// PrintedDocument containing this page.
-// Note: May be accessed from many threads at the same time. This is an non
-// issue since this object is immutable. The reason is that a page may be
-// printed and be displayed at the same time.
-class PrintedPage : public base::RefCountedThreadSafe<PrintedPage> {
- public:
- PrintedPage(int page_number,
- NativeMetafile* native_metafile,
- const gfx::Size& page_size);
- ~PrintedPage();
-
- // Getters
- int page_number() const { return page_number_; }
- const NativeMetafile* native_metafile() const;
- const gfx::Size& page_size() const { return page_size_; }
-
- private:
- // Page number inside the printed document.
- const int page_number_;
-
- // Actual paint data.
- const scoped_ptr<NativeMetafile> native_metafile_;
-
- // The physical page size. To support multiple page formats inside on print
- // job.
- const gfx::Size page_size_;
-
- DISALLOW_EVIL_CONSTRUCTORS(PrintedPage);
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PRINTED_PAGE_H__
diff --git a/chrome/browser/printing/printed_pages_source.h b/chrome/browser/printing/printed_pages_source.h
deleted file mode 100644
index c23bd34..0000000
--- a/chrome/browser/printing/printed_pages_source.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PRINTED_PAGES_SOURCE_H__
-#define CHROME_BROWSER_PRINTING_PRINTED_PAGES_SOURCE_H__
-
-#include <string>
-
-class GURL;
-class MessageLoop;
-
-namespace printing {
-
-class PrintedDocument;
-
-// Source of printed pages.
-class PrintedPagesSource {
- public:
- // Returns the document title.
- virtual std::wstring RenderSourceName() = 0;
-
- // Returns the URL's source of the document if applicable.
- virtual GURL RenderSourceUrl() = 0;
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_PRINTED_PAGES_SOURCE_H__
diff --git a/chrome/browser/printing/printing_layout_uitest.cc b/chrome/browser/printing/printing_layout_uitest.cc
index e9f6c27..8455c11 100644
--- a/chrome/browser/printing/printing_layout_uitest.cc
+++ b/chrome/browser/printing/printing_layout_uitest.cc
@@ -15,8 +15,8 @@
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/ui/ui_test.h"
-#include "chrome/browser/printing/printing_test.h"
#include "net/url_request/url_request_unittest.h"
+#include "printing/printing_test.h"
#include "printing/native_metafile.h"
namespace {
diff --git a/chrome/browser/printing/printing_test.h b/chrome/browser/printing/printing_test.h
deleted file mode 100644
index 3237813..0000000
--- a/chrome/browser/printing/printing_test.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_PRINTING_TEST_H__
-#define CHROME_BROWSER_PRINTING_PRINTING_TEST_H__
-
-#include <windows.h>
-#include <winspool.h>
-
-// Disable the whole test case when executing on a computer that has no printer
-// installed.
-// Note: Parent should be testing::Test or UITest.
-template<typename Parent>
-class PrintingTest : public Parent {
- public:
- static bool IsTestCaseDisabled() {
- return GetDefaultPrinter().empty();
- }
- static std::wstring GetDefaultPrinter() {
- wchar_t printer_name[MAX_PATH];
- DWORD size = arraysize(printer_name);
- BOOL result = ::GetDefaultPrinter(printer_name, &size);
- if (result == 0) {
- if (GetLastError() == ERROR_FILE_NOT_FOUND) {
- printf("There is no printer installed, printing can't be tested!\n");
- return std::wstring();
- }
- printf("INTERNAL PRINTER ERROR!\n");
- return std::wstring();
- }
- return printer_name;
- }
-};
-
-#endif // CHROME_BROWSER_PRINTING_PRINTING_TEST_H__
diff --git a/chrome/browser/printing/win_printing_context.cc b/chrome/browser/printing/win_printing_context.cc
deleted file mode 100644
index 0182417..0000000
--- a/chrome/browser/printing/win_printing_context.cc
+++ /dev/null
@@ -1,608 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/win_printing_context.h"
-
-#include <winspool.h>
-
-#include "base/file_util.h"
-#include "base/message_loop.h"
-#include "base/time.h"
-#include "base/time_format.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/printing/printed_document.h"
-#include "skia/ext/platform_device_win.h"
-
-using base::Time;
-
-namespace {
-
-// Retrieves the content of a GetPrinter call.
-void GetPrinterHelper(HANDLE printer, int level, scoped_array<uint8>* buffer) {
- DWORD buf_size = 0;
- GetPrinter(printer, level, NULL, 0, &buf_size);
- if (buf_size) {
- buffer->reset(new uint8[buf_size]);
- memset(buffer->get(), 0, buf_size);
- if (!GetPrinter(printer, level, buffer->get(), buf_size, &buf_size)) {
- buffer->reset();
- }
- }
-}
-
-} // namespace
-
-namespace printing {
-
-class PrintingContext::CallbackHandler
- : public IPrintDialogCallback,
- public IObjectWithSite {
- public:
- CallbackHandler(PrintingContext& owner, HWND owner_hwnd)
- : owner_(owner),
- owner_hwnd_(owner_hwnd),
- services_(NULL) {
- }
-
- ~CallbackHandler() {
- if (services_)
- services_->Release();
- }
-
- IUnknown* ToIUnknown() {
- return static_cast<IUnknown*>(static_cast<IPrintDialogCallback*>(this));
- }
-
- // IUnknown
- virtual HRESULT WINAPI QueryInterface(REFIID riid, void**object) {
- if (riid == IID_IUnknown) {
- *object = ToIUnknown();
- } else if (riid == IID_IPrintDialogCallback) {
- *object = static_cast<IPrintDialogCallback*>(this);
- } else if (riid == IID_IObjectWithSite) {
- *object = static_cast<IObjectWithSite*>(this);
- } else {
- return E_NOINTERFACE;
- }
- return S_OK;
- }
-
- // No real ref counting.
- virtual ULONG WINAPI AddRef() {
- return 1;
- }
- virtual ULONG WINAPI Release() {
- return 1;
- }
-
- // IPrintDialogCallback methods
- virtual HRESULT WINAPI InitDone() {
- return S_OK;
- }
-
- virtual HRESULT WINAPI SelectionChange() {
- if (services_) {
- // TODO(maruel): Get the devmode for the new printer with
- // services_->GetCurrentDevMode(&devmode, &size), send that information
- // back to our client and continue. The client needs to recalculate the
- // number of rendered pages and send back this information here.
- }
- return S_OK;
- }
-
- virtual HRESULT WINAPI HandleMessage(HWND dialog,
- UINT message,
- WPARAM wparam,
- LPARAM lparam,
- LRESULT* result) {
- // Cheap way to retrieve the window handle.
- if (!owner_.dialog_box_) {
- // The handle we receive is the one of the groupbox in the General tab. We
- // need to get the grand-father to get the dialog box handle.
- owner_.dialog_box_ = GetAncestor(dialog, GA_ROOT);
- // Trick to enable the owner window. This can cause issues with navigation
- // events so it may have to be disabled if we don't fix the side-effects.
- EnableWindow(owner_hwnd_, TRUE);
- }
- return S_FALSE;
- }
-
- virtual HRESULT WINAPI SetSite(IUnknown* site) {
- if (!site) {
- DCHECK(services_);
- services_->Release();
- services_ = NULL;
- // The dialog box is destroying, PrintJob::Worker don't need the handle
- // anymore.
- owner_.dialog_box_ = NULL;
- } else {
- DCHECK(services_ == NULL);
- HRESULT hr = site->QueryInterface(IID_IPrintDialogServices,
- reinterpret_cast<void**>(&services_));
- DCHECK(SUCCEEDED(hr));
- }
- return S_OK;
- }
-
- virtual HRESULT WINAPI GetSite(REFIID riid, void** site) {
- return E_NOTIMPL;
- }
-
- private:
- PrintingContext& owner_;
- HWND owner_hwnd_;
- IPrintDialogServices* services_;
-
- DISALLOW_EVIL_CONSTRUCTORS(CallbackHandler);
-};
-
-PrintingContext::PrintingContext()
- : hdc_(NULL),
-#ifndef NDEBUG
- page_number_(-1),
-#endif
- dialog_box_(NULL),
- dialog_box_dismissed_(false),
- abort_printing_(false),
- in_print_job_(false) {
-}
-
-PrintingContext::~PrintingContext() {
- ResetSettings();
-}
-
-PrintingContext::Result PrintingContext::AskUserForSettings(
- HWND window,
- int max_pages,
- bool has_selection) {
- DCHECK(window);
- DCHECK(!in_print_job_);
- dialog_box_dismissed_ = false;
- // Show the OS-dependent dialog box.
- // If the user press
- // - OK, the settings are reset and reinitialized with the new settings. OK is
- // returned.
- // - Apply then Cancel, the settings are reset and reinitialized with the new
- // settings. CANCEL is returned.
- // - Cancel, the settings are not changed, the previous setting, if it was
- // initialized before, are kept. CANCEL is returned.
- // On failure, the settings are reset and FAILED is returned.
- PRINTDLGEX dialog_options = { sizeof(PRINTDLGEX) };
- dialog_options.hwndOwner = window;
- // Disable options we don't support currently.
- // TODO(maruel): Reuse the previously loaded settings!
- dialog_options.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE |
- PD_NOCURRENTPAGE | PD_HIDEPRINTTOFILE;
- if (!has_selection)
- dialog_options.Flags |= PD_NOSELECTION;
-
- PRINTPAGERANGE ranges[32];
- dialog_options.nStartPage = START_PAGE_GENERAL;
- if (max_pages) {
- // Default initialize to print all the pages.
- memset(ranges, 0, sizeof(ranges));
- ranges[0].nFromPage = 1;
- ranges[0].nToPage = max_pages;
- dialog_options.nPageRanges = 1;
- dialog_options.nMaxPageRanges = arraysize(ranges);
- dialog_options.nMinPage = 1;
- dialog_options.nMaxPage = max_pages;
- dialog_options.lpPageRanges = ranges;
- } else {
- // No need to bother, we don't know how many pages are available.
- dialog_options.Flags |= PD_NOPAGENUMS;
- }
-
- {
- if (PrintDlgEx(&dialog_options) != S_OK) {
- ResetSettings();
- return FAILED;
- }
- }
- // TODO(maruel): Support PD_PRINTTOFILE.
- return ParseDialogResultEx(dialog_options);
-}
-
-PrintingContext::Result PrintingContext::UseDefaultSettings() {
- DCHECK(!in_print_job_);
-
- PRINTDLG dialog_options = { sizeof(PRINTDLG) };
- dialog_options.Flags = PD_RETURNDC | PD_RETURNDEFAULT;
- if (PrintDlg(&dialog_options) == 0) {
- ResetSettings();
- return FAILED;
- }
- return ParseDialogResult(dialog_options);
-}
-
-PrintingContext::Result PrintingContext::InitWithSettings(
- const PrintSettings& settings) {
- DCHECK(!in_print_job_);
- settings_ = settings;
- // TODO(maruel): settings_->ToDEVMODE()
- HANDLE printer;
- if (!OpenPrinter(const_cast<wchar_t*>(settings_.device_name().c_str()),
- &printer,
- NULL))
- return FAILED;
-
- Result status = OK;
-
- if (!GetPrinterSettings(printer, settings_.device_name()))
- status = FAILED;
-
- // Close the printer after retrieving the context.
- ClosePrinter(printer);
-
- if (status != OK)
- ResetSettings();
- return status;
-}
-
-void PrintingContext::ResetSettings() {
- if (hdc_ != NULL) {
- DeleteDC(hdc_);
- hdc_ = NULL;
- }
- settings_.Clear();
- in_print_job_ = false;
-
-#ifndef NDEBUG
- page_number_ = -1;
-#endif
-}
-
-PrintingContext::Result PrintingContext::NewDocument(
- const std::wstring& document_name) {
- DCHECK(!in_print_job_);
- if (!hdc_)
- return OnError();
-
- // Set the flag used by the AbortPrintJob dialog procedure.
- abort_printing_ = false;
-
- in_print_job_ = true;
-
- // Register the application's AbortProc function with GDI.
- if (SP_ERROR == SetAbortProc(hdc_, &AbortProc))
- return OnError();
-
- DOCINFO di = { sizeof(DOCINFO) };
- di.lpszDocName = document_name.c_str();
-
- // Is there a debug dump directory specified? If so, force to print to a file.
- std::wstring debug_dump_path = PrintedDocument::debug_dump_path();
- if (!debug_dump_path.empty()) {
- // Create a filename.
- std::wstring filename;
- Time now(Time::Now());
- filename = base::TimeFormatShortDateNumeric(now);
- filename += L"_";
- filename += base::TimeFormatTimeOfDay(now);
- filename += L"_";
- filename += document_name;
- filename += L"_";
- filename += L"buffer.prn";
- file_util::ReplaceIllegalCharacters(&filename, '_');
- file_util::AppendToPath(&debug_dump_path, filename);
- di.lpszOutput = debug_dump_path.c_str();
- }
-
- DCHECK_EQ(MessageLoop::current()->NestableTasksAllowed(), false);
- // Begin a print job by calling the StartDoc function.
- // NOTE: StartDoc() starts a message loop. That causes a lot of problems with
- // IPC. Make sure recursive task processing is disabled.
- if (StartDoc(hdc_, &di) <= 0)
- return OnError();
-
-#ifndef NDEBUG
- page_number_ = 0;
-#endif
- return OK;
-}
-
-PrintingContext::Result PrintingContext::NewPage() {
- if (abort_printing_)
- return CANCEL;
- DCHECK(in_print_job_);
-
- // Inform the driver that the application is about to begin sending data.
- if (StartPage(hdc_) <= 0)
- return OnError();
-
-#ifndef NDEBUG
- ++page_number_;
-#endif
-
- return OK;
-}
-
-PrintingContext::Result PrintingContext::PageDone() {
- if (abort_printing_)
- return CANCEL;
- DCHECK(in_print_job_);
-
- if (EndPage(hdc_) <= 0)
- return OnError();
- return OK;
-}
-
-PrintingContext::Result PrintingContext::DocumentDone() {
- if (abort_printing_)
- return CANCEL;
- DCHECK(in_print_job_);
-
- // Inform the driver that document has ended.
- if (EndDoc(hdc_) <= 0)
- return OnError();
-
- ResetSettings();
- return OK;
-}
-
-void PrintingContext::Cancel() {
- abort_printing_ = true;
- in_print_job_ = false;
- if (hdc_)
- CancelDC(hdc_);
- DismissDialog();
-}
-
-void PrintingContext::DismissDialog() {
- if (dialog_box_) {
- DestroyWindow(dialog_box_);
- dialog_box_dismissed_ = true;
- }
-}
-
-PrintingContext::Result PrintingContext::OnError() {
- // This will close hdc_ and clear settings_.
- ResetSettings();
- return abort_printing_ ? CANCEL : FAILED;
-}
-
-// static
-BOOL PrintingContext::AbortProc(HDC hdc, int nCode) {
- if (nCode) {
- // TODO(maruel): Need a way to find the right instance to set. Should
- // leverage PrintJobManager here?
- // abort_printing_ = true;
- }
- return true;
-}
-
-bool PrintingContext::InitializeSettings(const DEVMODE& dev_mode,
- const std::wstring& new_device_name,
- const PRINTPAGERANGE* ranges,
- int number_ranges,
- bool selection_only) {
- skia::PlatformDevice::InitializeDC(hdc_);
- DCHECK(GetDeviceCaps(hdc_, CLIPCAPS));
- DCHECK(GetDeviceCaps(hdc_, RASTERCAPS) & RC_STRETCHDIB);
- DCHECK(GetDeviceCaps(hdc_, RASTERCAPS) & RC_BITMAP64);
- // Some printers don't advertise these.
- // DCHECK(GetDeviceCaps(hdc_, RASTERCAPS) & RC_SCALING);
- // DCHECK(GetDeviceCaps(hdc_, SHADEBLENDCAPS) & SB_CONST_ALPHA);
- // DCHECK(GetDeviceCaps(hdc_, SHADEBLENDCAPS) & SB_PIXEL_ALPHA);
-
- // StretchDIBits() support is needed for printing.
- if (!(GetDeviceCaps(hdc_, RASTERCAPS) & RC_STRETCHDIB) ||
- !(GetDeviceCaps(hdc_, RASTERCAPS) & RC_BITMAP64)) {
- NOTREACHED();
- ResetSettings();
- return false;
- }
-
- DCHECK(!in_print_job_);
- DCHECK(hdc_);
- PageRanges ranges_vector;
- if (!selection_only) {
- // Convert the PRINTPAGERANGE array to a PrintSettings::PageRanges vector.
- ranges_vector.reserve(number_ranges);
- for (int i = 0; i < number_ranges; ++i) {
- PageRange range;
- // Transfer from 1-based to 0-based.
- range.from = ranges[i].nFromPage - 1;
- range.to = ranges[i].nToPage - 1;
- ranges_vector.push_back(range);
- }
- }
- settings_.Init(hdc_,
- dev_mode,
- ranges_vector,
- new_device_name,
- selection_only);
- return true;
-}
-
-bool PrintingContext::GetPrinterSettings(HANDLE printer,
- const std::wstring& device_name) {
- DCHECK(!in_print_job_);
- scoped_array<uint8> buffer;
-
- // A PRINTER_INFO_9 structure specifying the per-user default printer
- // settings.
- GetPrinterHelper(printer, 9, &buffer);
- if (buffer.get()) {
- PRINTER_INFO_9* info_9 = reinterpret_cast<PRINTER_INFO_9*>(buffer.get());
- if (info_9->pDevMode != NULL) {
- if (!AllocateContext(device_name, info_9->pDevMode)) {
- ResetSettings();
- return false;
- }
- return InitializeSettings(*info_9->pDevMode, device_name, NULL, 0, false);
- }
- buffer.reset();
- }
-
- // A PRINTER_INFO_8 structure specifying the global default printer settings.
- GetPrinterHelper(printer, 8, &buffer);
- if (buffer.get()) {
- PRINTER_INFO_8* info_8 = reinterpret_cast<PRINTER_INFO_8*>(buffer.get());
- if (info_8->pDevMode != NULL) {
- if (!AllocateContext(device_name, info_8->pDevMode)) {
- ResetSettings();
- return false;
- }
- return InitializeSettings(*info_8->pDevMode, device_name, NULL, 0, false);
- }
- buffer.reset();
- }
-
- // A PRINTER_INFO_2 structure specifying the driver's default printer
- // settings.
- GetPrinterHelper(printer, 2, &buffer);
- if (buffer.get()) {
- PRINTER_INFO_2* info_2 = reinterpret_cast<PRINTER_INFO_2*>(buffer.get());
- if (info_2->pDevMode != NULL) {
- if (!AllocateContext(device_name, info_2->pDevMode)) {
- ResetSettings();
- return false;
- }
- return InitializeSettings(*info_2->pDevMode, device_name, NULL, 0, false);
- }
- buffer.reset();
- }
- // Failed to retrieve the printer settings.
- ResetSettings();
- return false;
-}
-
-bool PrintingContext::AllocateContext(const std::wstring& printer_name,
- const DEVMODE* dev_mode) {
- hdc_ = CreateDC(L"WINSPOOL", printer_name.c_str(), NULL, dev_mode);
- DCHECK(hdc_);
- return hdc_ != NULL;
-}
-
-PrintingContext::Result PrintingContext::ParseDialogResultEx(
- const PRINTDLGEX& dialog_options) {
- // If the user clicked OK or Apply then Cancel, but not only Cancel.
- if (dialog_options.dwResultAction != PD_RESULT_CANCEL) {
- // Start fresh.
- ResetSettings();
-
- DEVMODE* dev_mode = NULL;
- if (dialog_options.hDevMode) {
- dev_mode =
- reinterpret_cast<DEVMODE*>(GlobalLock(dialog_options.hDevMode));
- DCHECK(dev_mode);
- }
-
- std::wstring device_name;
- if (dialog_options.hDevNames) {
- DEVNAMES* dev_names =
- reinterpret_cast<DEVNAMES*>(GlobalLock(dialog_options.hDevNames));
- DCHECK(dev_names);
- if (dev_names) {
- device_name =
- reinterpret_cast<const wchar_t*>(
- reinterpret_cast<const wchar_t*>(dev_names) +
- dev_names->wDeviceOffset);
- GlobalUnlock(dialog_options.hDevNames);
- }
- }
-
- bool success = false;
- if (dev_mode && !device_name.empty()) {
- hdc_ = dialog_options.hDC;
- PRINTPAGERANGE* page_ranges = NULL;
- DWORD num_page_ranges = 0;
- bool print_selection_only = false;
- if (dialog_options.Flags & PD_PAGENUMS) {
- page_ranges = dialog_options.lpPageRanges;
- num_page_ranges = dialog_options.nPageRanges;
- }
- if (dialog_options.Flags & PD_SELECTION) {
- print_selection_only = true;
- }
- success = InitializeSettings(*dev_mode,
- device_name,
- dialog_options.lpPageRanges,
- dialog_options.nPageRanges,
- print_selection_only);
- }
-
- if (!success && dialog_options.hDC) {
- DeleteDC(dialog_options.hDC);
- hdc_ = NULL;
- }
-
- if (dev_mode) {
- GlobalUnlock(dialog_options.hDevMode);
- }
- } else {
- if (dialog_options.hDC) {
- DeleteDC(dialog_options.hDC);
- }
- }
-
- if (dialog_options.hDevMode != NULL)
- GlobalFree(dialog_options.hDevMode);
- if (dialog_options.hDevNames != NULL)
- GlobalFree(dialog_options.hDevNames);
-
- switch (dialog_options.dwResultAction) {
- case PD_RESULT_PRINT:
- return hdc_ ? OK : FAILED;
- case PD_RESULT_APPLY:
- return hdc_ ? CANCEL : FAILED;
- case PD_RESULT_CANCEL:
- return CANCEL;
- default:
- return FAILED;
- }
-}
-
-PrintingContext::Result PrintingContext::ParseDialogResult(
- const PRINTDLG& dialog_options) {
- // If the user clicked OK or Apply then Cancel, but not only Cancel.
- // Start fresh.
- ResetSettings();
-
- DEVMODE* dev_mode = NULL;
- if (dialog_options.hDevMode) {
- dev_mode =
- reinterpret_cast<DEVMODE*>(GlobalLock(dialog_options.hDevMode));
- DCHECK(dev_mode);
- }
-
- std::wstring device_name;
- if (dialog_options.hDevNames) {
- DEVNAMES* dev_names =
- reinterpret_cast<DEVNAMES*>(GlobalLock(dialog_options.hDevNames));
- DCHECK(dev_names);
- if (dev_names) {
- device_name =
- reinterpret_cast<const wchar_t*>(
- reinterpret_cast<const wchar_t*>(dev_names) +
- dev_names->wDeviceOffset);
- GlobalUnlock(dialog_options.hDevNames);
- }
- }
-
- bool success = false;
- if (dev_mode && !device_name.empty()) {
- hdc_ = dialog_options.hDC;
- success = InitializeSettings(*dev_mode, device_name, NULL, 0, false);
- }
-
- if (!success && dialog_options.hDC) {
- DeleteDC(dialog_options.hDC);
- hdc_ = NULL;
- }
-
- if (dev_mode) {
- GlobalUnlock(dialog_options.hDevMode);
- }
-
- if (dialog_options.hDevMode != NULL)
- GlobalFree(dialog_options.hDevMode);
- if (dialog_options.hDevNames != NULL)
- GlobalFree(dialog_options.hDevNames);
-
- return hdc_ ? OK : FAILED;
-}
-
-} // namespace printing
diff --git a/chrome/browser/printing/win_printing_context.h b/chrome/browser/printing/win_printing_context.h
deleted file mode 100644
index 320a512..0000000
--- a/chrome/browser/printing/win_printing_context.h
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifndef CHROME_BROWSER_PRINTING_WIN_PRINTING_CONTEXT_H__
-#define CHROME_BROWSER_PRINTING_WIN_PRINTING_CONTEXT_H__
-
-#include <ocidl.h>
-#include <commdlg.h>
-#include <string>
-
-#include "base/basictypes.h"
-#include "chrome/browser/printing/print_settings.h"
-
-namespace printing {
-
-// Describe the user selected printing context for Windows. This includes the
-// OS-dependent UI to ask the user about the print settings. This class directly
-// talk to the printer and manages the document and pages breaks.
-class PrintingContext {
- public:
- // Tri-state result for user behavior-dependent functions.
- enum Result {
- OK,
- CANCEL,
- FAILED,
- };
-
- PrintingContext();
- ~PrintingContext();
-
- // Asks the user what printer and format should be used to print. Updates the
- // context with the select device settings.
- Result AskUserForSettings(HWND window, int max_pages, bool has_selection);
-
- // Selects the user's default printer and format. Updates the context with the
- // default device settings.
- Result UseDefaultSettings();
-
- // Initializes with predefined settings.
- Result InitWithSettings(const PrintSettings& settings);
-
- // Reinitializes the settings to uninitialized for object reuse.
- void ResetSettings();
-
- // Does platform specific setup of the printer before the printing. Signal the
- // printer that a document is about to be spooled.
- // Warning: This function enters a message loop. That may cause side effects
- // like IPC message processing! Some printers have side-effects on this call
- // like virtual printers that ask the user for the path of the saved document;
- // for example a PDF printer.
- Result NewDocument(const std::wstring& document_name);
-
- // Starts a new page.
- Result NewPage();
-
- // Closes the printed page.
- Result PageDone();
-
- // Closes the printing job. After this call the object is ready to start a new
- // document.
- Result DocumentDone();
-
- // Cancels printing. Can be used in a multithreaded context. Takes effect
- // immediately.
- void Cancel();
-
- // Dismiss the Print... dialog box if shown.
- void DismissDialog();
-
- HDC context() {
- return hdc_;
- }
-
- const PrintSettings& settings() const {
- return settings_;
- }
-
- private:
- // Class that manages the PrintDlgEx() callbacks. This is meant to be a
- // temporary object used during the Print... dialog display.
- class CallbackHandler;
-
- // Does bookkeeping when an error occurs.
- PrintingContext::Result OnError();
-
- // Used in response to the user canceling the printing.
- static BOOL CALLBACK AbortProc(HDC hdc, int nCode);
-
- // Reads the settings from the selected device context. Updates settings_ and
- // its margins.
- bool InitializeSettings(const DEVMODE& dev_mode,
- const std::wstring& new_device_name,
- const PRINTPAGERANGE* ranges,
- int number_ranges,
- bool selection_only);
-
- // Retrieves the printer's default low-level settings. hdc_ is allocated with
- // this call.
- bool GetPrinterSettings(HANDLE printer,
- const std::wstring& device_name);
-
- // Allocates the HDC for a specific DEVMODE.
- bool AllocateContext(const std::wstring& printer_name,
- const DEVMODE* dev_mode);
-
- // Parses the result of a PRINTDLGEX result.
- Result ParseDialogResultEx(const PRINTDLGEX& dialog_options);
- Result ParseDialogResult(const PRINTDLG& dialog_options);
-
- // The selected printer context.
- HDC hdc_;
-
- // Complete print context settings.
- PrintSettings settings_;
-
-#ifndef NDEBUG
- // Current page number in the print job.
- int page_number_;
-#endif
-
- // The dialog box for the time it is shown.
- volatile HWND dialog_box_;
-
- // The dialog box has been dismissed.
- volatile bool dialog_box_dismissed_;
-
- // Is a print job being done.
- volatile bool in_print_job_;
-
- // Did the user cancel the print job.
- volatile bool abort_printing_;
-
- DISALLOW_EVIL_CONSTRUCTORS(PrintingContext);
-};
-
-} // namespace printing
-
-#endif // CHROME_BROWSER_PRINTING_WIN_PRINTING_CONTEXT_H__
diff --git a/chrome/browser/printing/win_printing_context_unittest.cc b/chrome/browser/printing/win_printing_context_unittest.cc
deleted file mode 100644
index e2a03a1..0000000
--- a/chrome/browser/printing/win_printing_context_unittest.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2006-2008 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 "chrome/browser/printing/win_printing_context.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "chrome/browser/printing/printing_test.h"
-#include "chrome/browser/printing/print_settings.h"
-
-// This test is automatically disabled if no printer is available.
-class PrintingContextTest : public PrintingTest<testing::Test> {
-};
-
-TEST_F(PrintingContextTest, Base) {
- printing::PrintSettings settings;
-
- settings.set_device_name(GetDefaultPrinter());
- // Initialize it.
- printing::PrintingContext context;
- EXPECT_EQ(context.InitWithSettings(settings), printing::PrintingContext::OK);
-
- ;
- // The print may lie to use and may not support world transformation.
- // Verify right now.
- XFORM random_matrix = { 1, 0.1f, 0, 1.5f, 0, 1 };
- EXPECT_TRUE(SetWorldTransform(context.context(), &random_matrix));
- EXPECT_TRUE(ModifyWorldTransform(context.context(), NULL, MWT_IDENTITY));
-}
diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc
index 53baac3..f4168da 100644
--- a/chrome/browser/renderer_host/resource_message_filter.cc
+++ b/chrome/browser/renderer_host/resource_message_filter.cc
@@ -113,6 +113,27 @@ class WriteClipboardTask : public Task {
scoped_ptr<Clipboard::ObjectMap> objects_;
};
+void RenderParamsFromPrintSettings(const printing::PrintSettings& settings,
+ ViewMsg_Print_Params* params) {
+ DCHECK(params);
+#if defined(OS_WIN)
+ params->printable_size.SetSize(
+ settings.page_setup_pixels().content_area().width(),
+ settings.page_setup_pixels().content_area().height());
+ params->dpi = settings.dpi();
+ // Currently hardcoded at 1.25. See PrintSettings' constructor.
+ params->min_shrink = settings.min_shrink;
+ // Currently hardcoded at 2.0. See PrintSettings' constructor.
+ params->max_shrink = settings.max_shrink;
+ // Currently hardcoded at 72dpi. See PrintSettings' constructor.
+ params->desired_dpi = settings.desired_dpi;
+ // Always use an invalid cookie.
+ params->document_cookie = 0;
+ params->selection_only = settings.selection_only;
+#else
+ NOTIMPLEMENTED();
+#endif
+}
} // namespace
@@ -724,7 +745,7 @@ void ResourceMessageFilter::OnGetDefaultPrintSettingsReply(
if (printer_query->last_status() != printing::PrintingContext::OK) {
memset(&params, 0, sizeof(params));
} else {
- printer_query->settings().RenderParams(&params);
+ RenderParamsFromPrintSettings(printer_query->settings(), &params);
params.document_cookie = printer_query->cookie();
}
ViewHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg, params);
@@ -781,7 +802,7 @@ void ResourceMessageFilter::OnScriptedPrintReply(
!printer_query->settings().dpi()) {
memset(&params, 0, sizeof(params));
} else {
- printer_query->settings().RenderParams(&params.params);
+ RenderParamsFromPrintSettings(printer_query->settings(), &params.params);
params.params.document_cookie = printer_query->cookie();
params.pages =
printing::PageRange::GetPages(printer_query->settings().ranges);