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

Unified Diff: chrome/browser/ui/browser.cc

Issue 10483006: Print support for Windows Metro... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Working version Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/browser.cc
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index b92d4094b1ed9162f45703387239297573ed48db..98e2619d25efc74bc381fcba9a15f254eb51fb5e 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -26,6 +26,7 @@
#include "base/threading/thread_restrictions.h"
#include "base/time.h"
#include "base/utf_string_conversions.h"
+#include "base/win/metro.h"
Albert Bodenhamer 2012/06/15 18:41:24 Safe to include this here?
MAD 2012/06/19 14:24:10 Right, I need to wrap it within #if defined (OS_WI
MAD 2012/06/28 15:48:14 Done.
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/autofill/personal_data_manager_factory.h"
#include "chrome/browser/background/background_contents_service.h"
@@ -179,6 +180,7 @@
#include "net/base/registry_controlled_domain.h"
#include "net/cookies/cookie_monster.h"
#include "net/url_request/url_request_context.h"
+#include "printing/printed_document.h"
#include "ui/base/animation/animation.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/point.h"
@@ -1616,6 +1618,47 @@ void Browser::AdvancedPrint() {
GetActiveTabContents()->print_view_manager()->AdvancedPrintNow();
}
+void Browser::PrintToDelegate() {
Albert Bodenhamer 2012/06/15 18:41:24 Does this need to live in browser? If you pull Me
MAD 2012/06/19 14:24:10 Good point, will move it to a more sensible place.
MAD 2012/06/28 15:48:14 Actually, I would look the interface pointer to co
+ scoped_refptr<printing::PrintedDocument::Delegate> printed_document_delegate;
+#if defined(OS_WIN)
+ class MetroPrintingDelegate : public printing::PrintedDocument::Delegate {
Albert Bodenhamer 2012/06/15 18:41:24 Pull this into its own .cc/.h
MAD 2012/06/19 14:24:10 Yep, will do...
MAD 2012/06/28 15:48:14 Done.
+ public:
+ MetroPrintingDelegate()
+ : metro_set_print_page_count_(NULL),
+ metro_set_print_page_content_(NULL) {
+ HMODULE metro_module = base::win::GetMetroModule();
+ if (metro_module != NULL) {
+ metro_set_print_page_count_ =
+ reinterpret_cast<MetroSetPrintPageCount>(
+ ::GetProcAddress(metro_module, "MetroSetPrintPageCount"));
+ metro_set_print_page_content_ =
+ reinterpret_cast<MetroSetPrintPageContent>(
+ ::GetProcAddress(metro_module, "MetroSetPrintPageContent"));
+ }
+ }
+ virtual void SetPageCount(int page_count) {
+ if (metro_set_print_page_count_)
+ metro_set_print_page_count_(page_count);
+ }
+
+ virtual void SetPageContent(int page_number,
+ void* content,
+ size_t content_size) {
+ if (metro_set_print_page_content_)
+ metro_set_print_page_content_(page_number - 1, content, content_size);
+ }
+ private:
+ typedef void (*MetroSetPrintPageCount)(INT);
+ typedef void (*MetroSetPrintPageContent)(INT, VOID*, UINT32);
+ MetroSetPrintPageCount metro_set_print_page_count_;
+ MetroSetPrintPageContent metro_set_print_page_content_;
+ };
+ printed_document_delegate = new MetroPrintingDelegate();
+#endif // defined(OS_WIN)
+ GetActiveTabContents()->print_view_manager()->PrintToDelegate(
+ printed_document_delegate.get());
+}
+
void Browser::EmailPageLocation() {
content::RecordAction(UserMetricsAction("EmailPageLocation"));
WebContents* wc = GetActiveWebContents();
@@ -2516,6 +2559,7 @@ void Browser::ExecuteCommandWithDisposition(
case IDC_VIEW_SOURCE: ViewSelectedSource(); break;
case IDC_EMAIL_PAGE_LOCATION: EmailPageLocation(); break;
case IDC_PRINT: Print(); break;
+ case IDC_PRINT_TO_FILE : PrintToDelegate(); break;
case IDC_ADVANCED_PRINT: AdvancedPrint(); break;
case IDC_CHROME_TO_MOBILE_PAGE: ShowChromeToMobileBubble(); break;
case IDC_ENCODING_AUTO_DETECT: ToggleEncodingAutoDetect(); break;
@@ -4458,6 +4502,7 @@ void Browser::UpdatePrintingState(int content_restrictions) {
command_updater_.UpdateCommandEnabled(IDC_PRINT, print_enabled);
command_updater_.UpdateCommandEnabled(IDC_ADVANCED_PRINT,
advanced_print_enabled);
+ command_updater_.UpdateCommandEnabled(IDC_PRINT_TO_FILE, print_enabled);
}
void Browser::UpdateSaveAsState(int content_restrictions) {

Powered by Google App Engine
This is Rietveld 408576698