summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authorsanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-12 05:29:07 +0000
committersanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-12 05:29:07 +0000
commit38bba4f8e2f93dd789c3483a3f0c153ca5809793 (patch)
tree18ec7bd6d8cf84dd7492b1f986f210621a79db00 /webkit/glue
parent31548a10135c11ff689074896237d2b7a404959c (diff)
downloadchromium_src-38bba4f8e2f93dd789c3483a3f0c153ca5809793.zip
chromium_src-38bba4f8e2f93dd789c3483a3f0c153ca5809793.tar.gz
chromium_src-38bba4f8e2f93dd789c3483a3f0c153ca5809793.tar.bz2
Changes made to the printing logic to allow plugins to participate in the browser's print workflow. These changes mainly involve allowing the plugin to specify
whether it wants the browser to use overlays and also changes to the EMF code on Windows to decompress JPEGs/PNGs in the metafile. The related webkit change is https://bugs.webkit.org/show_bug.cgi?id=35550 BUG=None TEST=Test printing with new Pepper plugins that support custom printing. Review URL: http://codereview.chromium.org/745001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41400 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r--webkit/glue/webplugin_impl.cc39
-rw-r--r--webkit/glue/webplugin_impl.h28
2 files changed, 66 insertions, 1 deletions
diff --git a/webkit/glue/webplugin_impl.cc b/webkit/glue/webplugin_impl.cc
index c5877e3..ec7bf71 100644
--- a/webkit/glue/webplugin_impl.cc
+++ b/webkit/glue/webplugin_impl.cc
@@ -24,7 +24,6 @@
#include "third_party/WebKit/WebKit/chromium/public/WebKitClient.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPluginContainer.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPluginParams.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
#include "third_party/WebKit/WebKit/chromium/public/WebURL.h"
#include "third_party/WebKit/WebKit/chromium/public/WebURLError.h"
#include "third_party/WebKit/WebKit/chromium/public/WebURLLoader.h"
@@ -377,6 +376,44 @@ void WebPluginImpl::didFailLoadingFrameRequest(
url, reason, reinterpret_cast<intptr_t>(notify_data));
}
+bool WebPluginImpl::supportsPaginatedPrint() {
+ if (!delegate_)
+ return false;
+ return delegate_->PrintSupportsPrintExtension();
+}
+
+int WebPluginImpl::printBegin(const WebRect& printable_area, int printer_dpi) {
+ if (!delegate_)
+ return 0;
+
+ if (!supportsPaginatedPrint())
+ return 0;
+
+ print_settings_.is_printing = true;
+ print_settings_.printable_area = printable_area;
+ print_settings_.printer_dpi = printer_dpi;
+ return delegate_->PrintBegin(printable_area, printer_dpi);
+}
+
+bool WebPluginImpl::printPage(int page_number, WebCanvas* canvas) {
+ if (!delegate_)
+ return false;
+ if (!print_settings_.is_printing) {
+ NOTREACHED();
+ return false;
+ }
+ return delegate_->PrintPage(page_number, print_settings_.printable_area,
+ print_settings_.printer_dpi, canvas);
+}
+
+void WebPluginImpl::printEnd() {
+ DCHECK(print_settings_.is_printing);
+ print_settings_.Clear();
+ if (delegate_)
+ delegate_->PrintEnd();
+}
+
+
// -----------------------------------------------------------------------------
WebPluginImpl::WebPluginImpl(
diff --git a/webkit/glue/webplugin_impl.h b/webkit/glue/webplugin_impl.h
index 86e9df4..ced39f5 100644
--- a/webkit/glue/webplugin_impl.h
+++ b/webkit/glue/webplugin_impl.h
@@ -16,6 +16,7 @@
#include "base/weak_ptr.h"
#include "googleurl/src/gurl.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPlugin.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
#include "third_party/WebKit/WebKit/chromium/public/WebURLLoaderClient.h"
#include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h"
@@ -84,6 +85,11 @@ class WebPluginImpl : public WebPlugin,
virtual void didFailLoadingFrameRequest(
const WebKit::WebURL& url, void* notify_data,
const WebKit::WebURLError& error);
+ virtual bool supportsPaginatedPrint();
+ virtual int printBegin(const WebKit::WebRect& printable_area,
+ int printer_dpi);
+ virtual bool printPage(int page_number, WebKit::WebCanvas* canvas);
+ virtual void printEnd();
// WebPlugin implementation:
void SetWindow(gfx::PluginWindowHandle window);
@@ -305,6 +311,28 @@ class WebPluginImpl : public WebPlugin,
std::vector<std::string> arg_names_;
std::vector<std::string> arg_values_;
+ struct PrintSettings {
+ // This is set to true when printBegin is called and false when printEnd is
+ // called.
+ bool is_printing;
+ // The remembered printable_area from the last printBegin call. It is
+ // cleared in printEnd.
+ WebKit::WebRect printable_area;
+ // The remembered printer_dpi from the last printBegin call. It is cleared
+ // in printEnd.
+ int printer_dpi;
+ PrintSettings() {
+ Clear();
+ }
+ void Clear() {
+ is_printing = false;
+ printable_area = WebKit::WebRect(0, 0, 0, 0);
+ printer_dpi = 0;
+ }
+ };
+
+ PrintSettings print_settings_;
+
ScopedRunnableMethodFactory<WebPluginImpl> method_factory_;
DISALLOW_COPY_AND_ASSIGN(WebPluginImpl);