Changeset 135047 in webkit


Ignore:
Timestamp:
Nov 17, 2012, 10:02:48 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

Provide page/window coordinates to plugin's local coordinates translation in WebPluginContainer.
https://bugs.webkit.org/show_bug.cgi?id=102339

Patch by Istiaque Ahmed <lazyboy@chromium.org> on 2012-11-17
Reviewed by Adam Barth.

This change will allow converting a page's window coordinates to plugins's local coordinates,
taking CSS transformations into account. Embedder page of the plugin can use this information
for targetting elements inside the plugin (e.g. devtools can inspect a specific element at the
local coordinate position inside plugin).
Attempting to re-land after Windows build fix.

  • WebKit.gyp:
  • WebKit.gypi:
  • public/WebNode.h:

(WebKit):

  • public/WebPluginContainer.h:

(WebKit):
(WebPluginContainer):

  • src/WebFrameImpl.cpp:

(WebKit::WebFrameImpl::executeCommand):
(WebKit::WebFrameImpl::printBegin):
(WebKit::WebFrameImpl::isPrintScalingDisabledForPlugin):

  • src/WebNode.cpp:

(WebKit::WebNode::pluginContainer):
(WebKit):

  • src/WebPluginContainerImpl.cpp:

(WebKit::WebPluginContainerImpl::windowToLocalPoint):
(WebKit):

  • src/WebPluginContainerImpl.h:

(WebPluginContainerImpl):

  • tests/FakeWebPlugin.cpp: Added.

(WebKit):
(WebKit::FakeWebPlugin::FakeWebPlugin):
(WebKit::FakeWebPlugin::~FakeWebPlugin):
(WebKit::FakeWebPlugin::initialize):
(WebKit::FakeWebPlugin::destroy):

  • tests/FakeWebPlugin.h: Added.

(WebKit):
(FakeWebPlugin):

  • tests/WebPluginContainerTest.cpp: Added.

(WebKit):
(WebPluginContainerTest):
(WebKit::WebPluginContainerTest::WebPluginContainerTest):
(WebKit::WebPluginContainerTest::TearDown):
(WebKit::getWebPluginContainer):
(WebKit::TEST_F):

  • tests/data/plugin_container.html: Added.
Location:
trunk/Source/WebKit/chromium
Files:
4 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r135016 r135047  
     12012-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
    1512012-11-16  Raman Kumar  <ramankk@chromium.org>
    252
  • trunk/Source/WebKit/chromium/WebKit.gyp

    r135013 r135047  
    716716                                'tests/AssociatedURLLoaderTest.cpp',
    717717                                'tests/EventListenerTest.cpp',
     718                                'tests/FakeWebPlugin.cpp',
    718719                                'tests/FrameTestHelpers.cpp',
    719720                                'tests/IDBBindingUtilitiesTest.cpp',
     
    730731                                'tests/WebPageNewSerializerTest.cpp',
    731732                                'tests/WebPageSerializerTest.cpp',
     733                                'tests/WebPluginContainerTest.cpp'
    732734                                'tests/WebViewTest.cpp',
    733735                            ],
  • trunk/Source/WebKit/chromium/WebKit.gypi

    r134907 r135047  
    6565            'tests/DragImageTest.cpp',
    6666            'tests/EventListenerTest.cpp',
     67            'tests/FakeWebPlugin.cpp',
     68            'tests/FakeWebPlugin.h',
    6769            'tests/FakeWebCompositorOutputSurface.h',
    6870            'tests/FakeWebGraphicsContext3D.h',
     
    114116            'tests/WebPageNewSerializerTest.cpp',
    115117            'tests/WebPageSerializerTest.cpp',
     118            'tests/WebPluginContainerTest.cpp',
    116119            'tests/WebSocketDeflaterTest.cpp',
    117120            'tests/WebSocketExtensionDispatcherTest.cpp',
  • trunk/Source/WebKit/chromium/public/WebNode.h

    r134907 r135047  
    4646class WebFrame;
    4747class WebNodeList;
     48class WebPluginContainer;
    4849
    4950// Provides access to some properties of a DOM node.
     
    120121    // Note: This method only works properly after layout has occurred.
    121122    WEBKIT_EXPORT bool hasNonEmptyBoundingBox() const;
     123    WEBKIT_EXPORT WebPluginContainer* pluginContainer() const;
    122124
    123125    template<typename T> T to()
  • trunk/Source/WebKit/chromium/public/WebPluginContainer.h

    r134907 r135047  
    3232#define WebPluginContainer_h
    3333
     34#include "platform/WebCommon.h"
     35
    3436struct NPObject;
    3537
     
    4143class WebURL;
    4244class WebURLRequest;
     45struct WebPoint;
    4346struct WebRect;
    4447
     
    112115    virtual void setIsAcceptingTouchEvents(bool) = 0;
    113116
     117    // Converts view's window coordinates to plugin's local coordinates.
     118    virtual WebPoint windowToLocalPoint(const WebPoint&) = 0;
     119
    114120    virtual WebPlugin* plugin() = 0;
    115121    virtual void setPlugin(WebPlugin*) = 0;
  • trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp

    r134907 r135047  
    131131#include "RenderTreeAsText.h"
    132132#include "RenderView.h"
    133 #include "RenderWidget.h"
    134133#include "ResourceHandle.h"
    135134#include "ResourceRequest.h"
     
    305304}
    306305
    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 
    324306WebPluginContainerImpl* WebFrameImpl::pluginContainerFromFrame(Frame* frame)
    325307{
     
    12331215        WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame());
    12341216        if (!pluginContainer)
    1235             pluginContainer = pluginContainerFromNode(node);
     1217            pluginContainer = static_cast<WebPluginContainerImpl*>(node.pluginContainer());
    12361218        if (pluginContainer) {
    12371219            pluginContainer->copy();
     
    14291411    } else {
    14301412        // We only support printing plugin nodes for now.
    1431         pluginContainer = pluginContainerFromNode(constrainToNode);
     1413        pluginContainer = static_cast<WebPluginContainerImpl*>(constrainToNode.pluginContainer());
    14321414    }
    14331415
     
    14781460bool WebFrameImpl::isPrintScalingDisabledForPlugin(const WebNode& node)
    14791461{
    1480     WebPluginContainerImpl* pluginContainer =  node.isNull() ? pluginContainerFromFrame(frame()) : pluginContainerFromNode(node);
     1462    WebPluginContainerImpl* pluginContainer =  node.isNull() ? pluginContainerFromFrame(frame()) : static_cast<WebPluginContainerImpl*>(node.pluginContainer());
    14811463
    14821464    if (!pluginContainer || !pluginContainer->supportsPaginatedPrint())
  • trunk/Source/WebKit/chromium/src/WebNode.cpp

    r135000 r135047  
    3939#include "NodeList.h"
    4040#include "EventListenerWrapper.h"
     41#include "RenderObject.h"
     42#include "RenderWidget.h"
    4143#include "WebDOMEvent.h"
    4244#include "WebDOMEventListener.h"
     
    4547#include "WebFrameImpl.h"
    4648#include "WebNodeList.h"
     49#include "WebPluginContainer.h"
     50#include "WebPluginContainerImpl.h"
     51#include "Widget.h"
    4752#include "markup.h"
    4853#include <public/WebString.h>
     
    236241}
    237242
     243WebPluginContainer* 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
    238259WebNode::WebNode(const PassRefPtr<Node>& node)
    239260    : m_private(node)
  • trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp

    r134907 r135047  
    532532}
    533533
     534WebPoint 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
    534543void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response)
    535544{
  • trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.h

    r134907 r135047  
    114114    virtual bool isRectTopmost(const WebRect&);
    115115    virtual void setIsAcceptingTouchEvents(bool);
     116    virtual WebPoint windowToLocalPoint(const WebPoint&);
    116117
    117118    // This cannot be null.
Note: See TracChangeset for help on using the changeset viewer.