[SCM] WebKit Debian packaging branch, webkit-1.3, updated. upstream/1.3.7-4207-g178b198
jam at chromium.org
jam at chromium.org
Sun Feb 20 22:55:28 UTC 2011
The following commit has been merged in the webkit-1.3 branch:
commit ca3890fe74d94d85d6bfa48f9ea497b094d8e717
Author: jam at chromium.org <jam at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Jan 13 20:07:25 2011 +0000
2011-01-11 John Abd-El-Malek <jam at chromium.org>
Reviewed by Darin Fisher.
[chromium] Add support to allow printing just a plugin in a frame
https://bugs.webkit.org/show_bug.cgi?id=52134
* public/WebContextMenuData.h:
* public/WebFrame.h:
* src/ContextMenuClientImpl.cpp:
(WebKit::ContextMenuClientImpl::getCustomMenuFromDefaultItems):
* src/WebFrameImpl.cpp:
(WebKit::ChromePluginPrintContext::ChromePluginPrintContext):
(WebKit::ChromePluginPrintContext::end):
(WebKit::ChromePluginPrintContext::computePageRects):
(WebKit::ChromePluginPrintContext::spoolPage):
(WebKit::WebFrameImpl::printBegin):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75730 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 6710785..0531e1e 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,21 @@
+2011-01-11 John Abd-El-Malek <jam at chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Add support to allow printing just a plugin in a frame
+ https://bugs.webkit.org/show_bug.cgi?id=52134
+
+ * public/WebContextMenuData.h:
+ * public/WebFrame.h:
+ * src/ContextMenuClientImpl.cpp:
+ (WebKit::ContextMenuClientImpl::getCustomMenuFromDefaultItems):
+ * src/WebFrameImpl.cpp:
+ (WebKit::ChromePluginPrintContext::ChromePluginPrintContext):
+ (WebKit::ChromePluginPrintContext::end):
+ (WebKit::ChromePluginPrintContext::computePageRects):
+ (WebKit::ChromePluginPrintContext::spoolPage):
+ (WebKit::WebFrameImpl::printBegin):
+
2011-01-13 Tony Chang <tony at chromium.org>
Reviewed by Kent Tamura.
diff --git a/WebKit/chromium/public/WebContextMenuData.h b/WebKit/chromium/public/WebContextMenuData.h
index e3aee4e..606994b 100644
--- a/WebKit/chromium/public/WebContextMenuData.h
+++ b/WebKit/chromium/public/WebContextMenuData.h
@@ -32,6 +32,7 @@
#define WebContextMenuData_h
#include "WebMenuItemInfo.h"
+#include "WebNode.h"
#include "WebPoint.h"
#include "WebString.h"
#include "WebURL.h"
@@ -50,6 +51,8 @@ struct WebContextMenuData {
MediaTypeVideo,
// An audio node is selected.
MediaTypeAudio,
+ // A plugin node is selected.
+ MediaTypePlugin,
};
// The type of media the context menu is being invoked on.
MediaType mediaType;
@@ -85,6 +88,7 @@ struct WebContextMenuData {
MediaHasAudio = 0x20,
MediaHasVideo = 0x40,
MediaControls = 0x80,
+ MediaCanPrint = 0x100,
};
// Extra attributes describing media elements.
@@ -136,6 +140,9 @@ struct WebContextMenuData {
// Custom context menu items provided by the WebCore internals.
WebVector<WebMenuItemInfo> customItems;
+ // The node that was clicked.
+ WebNode node;
+
WebContextMenuData()
: mediaType(MediaTypeNone)
, isImageBlocked(false)
diff --git a/WebKit/chromium/public/WebFrame.h b/WebKit/chromium/public/WebFrame.h
index 30bf03b..c2a0650 100644
--- a/WebKit/chromium/public/WebFrame.h
+++ b/WebKit/chromium/public/WebFrame.h
@@ -32,6 +32,7 @@
#define WebFrame_h
#include "WebCanvas.h"
+#include "WebNode.h"
#include "WebURL.h"
struct NPObject;
@@ -71,6 +72,9 @@ struct WebScriptSource;
struct WebSize;
template <typename T> class WebVector;
+// FIXME(jam): take this out once Chromium has this
+#define WEBFRAME_PRINTBEGIN_TAKES_NODE
+
class WebFrame {
public:
// Returns the number of live WebFrame objects, used for leak checking.
@@ -397,12 +401,16 @@ public:
// Printing ------------------------------------------------------------
// Reformats the WebFrame for printing. pageSize is the page size in
- // points (a point in 1/72 of an inch). printerDPI is the user selected,
- // DPI for the printer. Returns the number of pages that
- // can be printed at the given page size. The out param useBrowserOverlays
+ // points (a point in 1/72 of an inch). If |constrainToNode| node is
+ // specified, then only the given node is printed (for now only plugins are
+ // supported), instead of the entire frame. printerDPI is the user
+ // selected, DPI for the printer. Returns the number of pages that can be
+ // printed at the given page size. The out param useBrowserOverlays
// specifies whether the browser process should use its overlays (header,
// footer, margins etc) or whether the renderer controls this.
- virtual int printBegin(const WebSize& pageSize, int printerDPI = 72,
+ virtual int printBegin(const WebSize& pageSize,
+ const WebNode& constrainToNode = WebNode(),
+ int printerDPI = 72,
bool* useBrowserOverlays = 0) = 0;
// Returns the page shrinking factor calculated by webkit (usually
diff --git a/WebKit/chromium/src/ContextMenuClientImpl.cpp b/WebKit/chromium/src/ContextMenuClientImpl.cpp
index 7bd1a2b..d166d9d 100644
--- a/WebKit/chromium/src/ContextMenuClientImpl.cpp
+++ b/WebKit/chromium/src/ContextMenuClientImpl.cpp
@@ -44,6 +44,7 @@
#include "HitTestResult.h"
#include "HTMLMediaElement.h"
#include "HTMLNames.h"
+#include "HTMLPlugInImageElement.h"
#include "KURL.h"
#include "MediaError.h"
#include "Page.h"
@@ -211,6 +212,7 @@ PlatformMenuDescription ContextMenuClientImpl::getCustomMenuFromDefaultItems(
if (object && object->isWidget()) {
Widget* widget = toRenderWidget(object)->widget();
if (widget && widget->isPluginContainer()) {
+ data.mediaType = WebContextMenuData::MediaTypePlugin;
WebPluginContainerImpl* plugin = static_cast<WebPluginContainerImpl*>(widget);
WebString text = plugin->plugin()->selectionAsText();
if (!text.isEmpty()) {
@@ -219,6 +221,12 @@ PlatformMenuDescription ContextMenuClientImpl::getCustomMenuFromDefaultItems(
}
data.editFlags &= ~WebContextMenuData::CanTranslate;
data.linkURL = plugin->plugin()->linkAtPosition(data.mousePosition);
+ if (plugin->plugin()->supportsPaginatedPrint())
+ data.mediaFlags |= WebContextMenuData::MediaCanPrint;
+
+ HTMLPlugInImageElement* pluginElement = static_cast<HTMLPlugInImageElement*>(r.innerNonSharedNode());
+ data.srcURL = pluginElement->document()->completeURL(pluginElement->url());
+ data.mediaFlags |= WebContextMenuData::MediaCanSave;
}
}
}
@@ -268,6 +276,8 @@ PlatformMenuDescription ContextMenuClientImpl::getCustomMenuFromDefaultItems(
// Filter out custom menu elements and add them into the data.
populateCustomMenuItems(defaultMenu, &data);
+ data.node = r.innerNonSharedNode();
+
WebFrame* selected_web_frame = WebFrameImpl::fromFrame(selectedFrame);
if (m_webView->client())
m_webView->client()->showContextMenu(selected_web_frame, data);
diff --git a/WebKit/chromium/src/WebFrameImpl.cpp b/WebKit/chromium/src/WebFrameImpl.cpp
index 1237ddd..18e6d4c 100644
--- a/WebKit/chromium/src/WebFrameImpl.cpp
+++ b/WebKit/chromium/src/WebFrameImpl.cpp
@@ -106,6 +106,7 @@
#include "PluginDocument.h"
#include "PrintContext.h"
#include "RenderFrame.h"
+#include "RenderObject.h"
#include "RenderTreeAsText.h"
#include "RenderView.h"
#include "RenderWidget.h"
@@ -134,6 +135,7 @@
#include "WebFrameClient.h"
#include "WebHistoryItem.h"
#include "WebInputElement.h"
+#include "WebNode.h"
#include "WebPasswordAutocompleteListener.h"
#include "WebPerformance.h"
#include "WebPlugin.h"
@@ -355,11 +357,9 @@ private:
// want to delegate all printing related calls to the plugin.
class ChromePluginPrintContext : public ChromePrintContext {
public:
- ChromePluginPrintContext(Frame* frame, int printerDPI)
- : ChromePrintContext(frame), m_pageCount(0), m_printerDPI(printerDPI)
+ ChromePluginPrintContext(Frame* frame, WebPluginContainerImpl* plugin, int printerDPI)
+ : ChromePrintContext(frame), m_plugin(plugin), m_pageCount(0), m_printerDPI(printerDPI)
{
- // This HAS to be a frame hosting a full-mode plugin
- ASSERT(frame->document()->isPluginDocument());
}
virtual void begin(float width)
@@ -368,11 +368,7 @@ public:
virtual void end()
{
- WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(m_frame);
- if (pluginContainer && pluginContainer->supportsPaginatedPrint())
- pluginContainer->printEnd();
- else
- ASSERT_NOT_REACHED();
+ m_plugin->printEnd();
}
virtual float getPageShrink(int pageNumber) const
@@ -383,11 +379,7 @@ public:
virtual void computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight)
{
- WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(m_frame);
- if (pluginContainer && pluginContainer->supportsPaginatedPrint())
- m_pageCount = pluginContainer->printBegin(IntRect(printRect), m_printerDPI);
- else
- ASSERT_NOT_REACHED();
+ m_pageCount = m_plugin->printBegin(IntRect(printRect), m_printerDPI);
}
virtual int pageCount() const
@@ -400,11 +392,7 @@ public:
// instead. Returns the scale to be applied.
virtual float spoolPage(GraphicsContext& ctx, int pageNumber)
{
- WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(m_frame);
- if (pluginContainer && pluginContainer->supportsPaginatedPrint())
- pluginContainer->printPage(pageNumber, &ctx);
- else
- ASSERT_NOT_REACHED();
+ m_plugin->printPage(pageNumber, &ctx);
return 1.0;
}
@@ -415,6 +403,7 @@ public:
private:
// Set when printing.
+ WebPluginContainerImpl* m_plugin;
int m_pageCount;
int m_printerDPI;
};
@@ -1284,14 +1273,32 @@ bool WebFrameImpl::selectWordAroundCaret()
return true;
}
-int WebFrameImpl::printBegin(const WebSize& pageSize, int printerDPI, bool *useBrowserOverlays)
+int WebFrameImpl::printBegin(const WebSize& pageSize,
+ const WebNode& constrainToNode,
+ int printerDPI,
+ bool* useBrowserOverlays)
{
ASSERT(!frame()->document()->isFrameSet());
- // If this is a plugin document, check if the plugin supports its own
- // printing. If it does, we will delegate all printing to that.
- WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame());
+ WebPluginContainerImpl* pluginContainer = 0;
+ if (constrainToNode.isNull()) {
+ // If this is a plugin document, check if the plugin supports its own
+ // printing. If it does, we will delegate all printing to that.
+ pluginContainer = pluginContainerFromFrame(frame());
+ } else {
+ // We only support printing plugin nodes for now.
+ const Node* coreNode = constrainToNode.constUnwrap<Node>();
+ if (coreNode->hasTagName(HTMLNames::objectTag) && coreNode->hasTagName(HTMLNames::embedTag)) {
+ RenderObject* object = coreNode->renderer();
+ if (object && object->isWidget()) {
+ Widget* widget = toRenderWidget(object)->widget();
+ if (widget && widget->isPluginContainer())
+ pluginContainer = static_cast<WebPluginContainerImpl*>(widget);
+ }
+ }
+ }
+
if (pluginContainer && pluginContainer->supportsPaginatedPrint())
- m_printContext.set(new ChromePluginPrintContext(frame(), printerDPI));
+ m_printContext.set(new ChromePluginPrintContext(frame(), pluginContainer, printerDPI));
else
m_printContext.set(new ChromePrintContext(frame()));
diff --git a/WebKit/chromium/src/WebFrameImpl.h b/WebKit/chromium/src/WebFrameImpl.h
index 52d9db4..b7ac100 100644
--- a/WebKit/chromium/src/WebFrameImpl.h
+++ b/WebKit/chromium/src/WebFrameImpl.h
@@ -150,7 +150,9 @@ public:
virtual WebString selectionAsText() const;
virtual WebString selectionAsMarkup() const;
virtual bool selectWordAroundCaret();
- virtual int printBegin(const WebSize& pageSize, int printerDPI,
+ virtual int printBegin(const WebSize& pageSize,
+ const WebNode& constrainToNode,
+ int printerDPI,
bool* useBrowserOverlays);
virtual float printPage(int pageToPrint, WebCanvas*);
virtual float getPrintPageShrink(int page);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list