Changeset 135047 in webkit
- Timestamp:
- Nov 17, 2012, 10:02:48 AM (13 years ago)
- Location:
- trunk/Source/WebKit/chromium
- Files:
-
- 4 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/chromium/ChangeLog
r135016 r135047 1 2012-11-17 Istiaque Ahmed <lazyboy@chromium.org> 2 3 Provide page/window coordinates to plugin's local coordinates translation in WebPluginContainer. 4 https://bugs.webkit.org/show_bug.cgi?id=102339 5 6 Reviewed by Adam Barth. 7 8 This change will allow converting a page's window coordinates to plugins's local coordinates, 9 taking CSS transformations into account. Embedder page of the plugin can use this information 10 for targetting elements inside the plugin (e.g. devtools can inspect a specific element at the 11 local coordinate position inside plugin). 12 Attempting to re-land after Windows build fix. 13 14 * WebKit.gyp: 15 * WebKit.gypi: 16 * public/WebNode.h: 17 (WebKit): 18 * public/WebPluginContainer.h: 19 (WebKit): 20 (WebPluginContainer): 21 * src/WebFrameImpl.cpp: 22 (WebKit::WebFrameImpl::executeCommand): 23 (WebKit::WebFrameImpl::printBegin): 24 (WebKit::WebFrameImpl::isPrintScalingDisabledForPlugin): 25 * src/WebNode.cpp: 26 (WebKit::WebNode::pluginContainer): 27 (WebKit): 28 * src/WebPluginContainerImpl.cpp: 29 (WebKit::WebPluginContainerImpl::windowToLocalPoint): 30 (WebKit): 31 * src/WebPluginContainerImpl.h: 32 (WebPluginContainerImpl): 33 * tests/FakeWebPlugin.cpp: Added. 34 (WebKit): 35 (WebKit::FakeWebPlugin::FakeWebPlugin): 36 (WebKit::FakeWebPlugin::~FakeWebPlugin): 37 (WebKit::FakeWebPlugin::initialize): 38 (WebKit::FakeWebPlugin::destroy): 39 * tests/FakeWebPlugin.h: Added. 40 (WebKit): 41 (FakeWebPlugin): 42 * tests/WebPluginContainerTest.cpp: Added. 43 (WebKit): 44 (WebPluginContainerTest): 45 (WebKit::WebPluginContainerTest::WebPluginContainerTest): 46 (WebKit::WebPluginContainerTest::TearDown): 47 (WebKit::getWebPluginContainer): 48 (WebKit::TEST_F): 49 * tests/data/plugin_container.html: Added. 50 1 51 2012-11-16 Raman Kumar <ramankk@chromium.org> 2 52 -
trunk/Source/WebKit/chromium/WebKit.gyp
r135013 r135047 716 716 'tests/AssociatedURLLoaderTest.cpp', 717 717 'tests/EventListenerTest.cpp', 718 'tests/FakeWebPlugin.cpp', 718 719 'tests/FrameTestHelpers.cpp', 719 720 'tests/IDBBindingUtilitiesTest.cpp', … … 730 731 'tests/WebPageNewSerializerTest.cpp', 731 732 'tests/WebPageSerializerTest.cpp', 733 'tests/WebPluginContainerTest.cpp' 732 734 'tests/WebViewTest.cpp', 733 735 ], -
trunk/Source/WebKit/chromium/WebKit.gypi
r134907 r135047 65 65 'tests/DragImageTest.cpp', 66 66 'tests/EventListenerTest.cpp', 67 'tests/FakeWebPlugin.cpp', 68 'tests/FakeWebPlugin.h', 67 69 'tests/FakeWebCompositorOutputSurface.h', 68 70 'tests/FakeWebGraphicsContext3D.h', … … 114 116 'tests/WebPageNewSerializerTest.cpp', 115 117 'tests/WebPageSerializerTest.cpp', 118 'tests/WebPluginContainerTest.cpp', 116 119 'tests/WebSocketDeflaterTest.cpp', 117 120 'tests/WebSocketExtensionDispatcherTest.cpp', -
trunk/Source/WebKit/chromium/public/WebNode.h
r134907 r135047 46 46 class WebFrame; 47 47 class WebNodeList; 48 class WebPluginContainer; 48 49 49 50 // Provides access to some properties of a DOM node. … … 120 121 // Note: This method only works properly after layout has occurred. 121 122 WEBKIT_EXPORT bool hasNonEmptyBoundingBox() const; 123 WEBKIT_EXPORT WebPluginContainer* pluginContainer() const; 122 124 123 125 template<typename T> T to() -
trunk/Source/WebKit/chromium/public/WebPluginContainer.h
r134907 r135047 32 32 #define WebPluginContainer_h 33 33 34 #include "platform/WebCommon.h" 35 34 36 struct NPObject; 35 37 … … 41 43 class WebURL; 42 44 class WebURLRequest; 45 struct WebPoint; 43 46 struct WebRect; 44 47 … … 112 115 virtual void setIsAcceptingTouchEvents(bool) = 0; 113 116 117 // Converts view's window coordinates to plugin's local coordinates. 118 virtual WebPoint windowToLocalPoint(const WebPoint&) = 0; 119 114 120 virtual WebPlugin* plugin() = 0; 115 121 virtual void setPlugin(WebPlugin*) = 0; -
trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp
r134907 r135047 131 131 #include "RenderTreeAsText.h" 132 132 #include "RenderView.h" 133 #include "RenderWidget.h"134 133 #include "ResourceHandle.h" 135 134 #include "ResourceRequest.h" … … 305 304 } 306 305 307 static WebPluginContainerImpl* pluginContainerFromNode(const WebNode& node)308 {309 if (node.isNull())310 return 0;311 312 const Node* coreNode = node.constUnwrap<Node>();313 if (coreNode->hasTagName(HTMLNames::objectTag) || coreNode->hasTagName(HTMLNames::embedTag)) {314 RenderObject* object = coreNode->renderer();315 if (object && object->isWidget()) {316 Widget* widget = toRenderWidget(object)->widget();317 if (widget && widget->isPluginContainer())318 return static_cast<WebPluginContainerImpl*>(widget);319 }320 }321 return 0;322 }323 324 306 WebPluginContainerImpl* WebFrameImpl::pluginContainerFromFrame(Frame* frame) 325 307 { … … 1233 1215 WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame()); 1234 1216 if (!pluginContainer) 1235 pluginContainer = pluginContainerFromNode(node);1217 pluginContainer = static_cast<WebPluginContainerImpl*>(node.pluginContainer()); 1236 1218 if (pluginContainer) { 1237 1219 pluginContainer->copy(); … … 1429 1411 } else { 1430 1412 // We only support printing plugin nodes for now. 1431 pluginContainer = pluginContainerFromNode(constrainToNode);1413 pluginContainer = static_cast<WebPluginContainerImpl*>(constrainToNode.pluginContainer()); 1432 1414 } 1433 1415 … … 1478 1460 bool WebFrameImpl::isPrintScalingDisabledForPlugin(const WebNode& node) 1479 1461 { 1480 WebPluginContainerImpl* pluginContainer = node.isNull() ? pluginContainerFromFrame(frame()) : pluginContainerFromNode(node);1462 WebPluginContainerImpl* pluginContainer = node.isNull() ? pluginContainerFromFrame(frame()) : static_cast<WebPluginContainerImpl*>(node.pluginContainer()); 1481 1463 1482 1464 if (!pluginContainer || !pluginContainer->supportsPaginatedPrint()) -
trunk/Source/WebKit/chromium/src/WebNode.cpp
r135000 r135047 39 39 #include "NodeList.h" 40 40 #include "EventListenerWrapper.h" 41 #include "RenderObject.h" 42 #include "RenderWidget.h" 41 43 #include "WebDOMEvent.h" 42 44 #include "WebDOMEventListener.h" … … 45 47 #include "WebFrameImpl.h" 46 48 #include "WebNodeList.h" 49 #include "WebPluginContainer.h" 50 #include "WebPluginContainerImpl.h" 51 #include "Widget.h" 47 52 #include "markup.h" 48 53 #include <public/WebString.h> … … 236 241 } 237 242 243 WebPluginContainer* WebNode::pluginContainer() const 244 { 245 if (isNull()) 246 return 0; 247 const Node* coreNode = constUnwrap<Node>(); 248 if (coreNode->hasTagName(HTMLNames::objectTag) || coreNode->hasTagName(HTMLNames::embedTag)) { 249 RenderObject* object = coreNode->renderer(); 250 if (object && object->isWidget()) { 251 Widget* widget = WebCore::toRenderWidget(object)->widget(); 252 if (widget && widget->isPluginContainer()) 253 return static_cast<WebPluginContainerImpl*>(widget); 254 } 255 } 256 return 0; 257 } 258 238 259 WebNode::WebNode(const PassRefPtr<Node>& node) 239 260 : m_private(node) -
trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
r134907 r135047 532 532 } 533 533 534 WebPoint WebPluginContainerImpl::windowToLocalPoint(const WebPoint& point) 535 { 536 ScrollView* view = parent(); 537 if (!view) 538 return point; 539 WebPoint windowPoint = view->windowToContents(point); 540 return roundedIntPoint(m_element->renderer()->absoluteToLocal(LayoutPoint(windowPoint), UseTransforms | SnapOffsetForTransforms)); 541 } 542 534 543 void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response) 535 544 { -
trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.h
r134907 r135047 114 114 virtual bool isRectTopmost(const WebRect&); 115 115 virtual void setIsAcceptingTouchEvents(bool); 116 virtual WebPoint windowToLocalPoint(const WebPoint&); 116 117 117 118 // This cannot be null.
Note:
See TracChangeset
for help on using the changeset viewer.