Changeset 135315 in webkit


Ignore:
Timestamp:
Nov 20, 2012, 2:41:29 PM (12 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-20
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).

  • 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

    r135313 r135315  
     12012-11-20  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
     13        * WebKit.gyp:
     14        * WebKit.gypi:
     15        * public/WebNode.h:
     16        (WebKit):
     17        * public/WebPluginContainer.h:
     18        (WebKit):
     19        (WebPluginContainer):
     20        * src/WebFrameImpl.cpp:
     21        (WebKit::WebFrameImpl::executeCommand):
     22        (WebKit::WebFrameImpl::printBegin):
     23        (WebKit::WebFrameImpl::isPrintScalingDisabledForPlugin):
     24        * src/WebNode.cpp:
     25        (WebKit::WebNode::pluginContainer):
     26        (WebKit):
     27        * src/WebPluginContainerImpl.cpp:
     28        (WebKit::WebPluginContainerImpl::windowToLocalPoint):
     29        (WebKit):
     30        * src/WebPluginContainerImpl.h:
     31        (WebPluginContainerImpl):
     32        * tests/FakeWebPlugin.cpp: Added.
     33        (WebKit):
     34        (WebKit::FakeWebPlugin::FakeWebPlugin):
     35        (WebKit::FakeWebPlugin::~FakeWebPlugin):
     36        (WebKit::FakeWebPlugin::initialize):
     37        (WebKit::FakeWebPlugin::destroy):
     38        * tests/FakeWebPlugin.h: Added.
     39        (WebKit):
     40        (FakeWebPlugin):
     41        * tests/WebPluginContainerTest.cpp: Added.
     42        (WebKit):
     43        (WebPluginContainerTest):
     44        (WebKit::WebPluginContainerTest::WebPluginContainerTest):
     45        (WebKit::WebPluginContainerTest::TearDown):
     46        (WebKit::getWebPluginContainer):
     47        (WebKit::TEST_F):
     48        * tests/data/plugin_container.html: Added.
     49
    1502012-11-20  Alpha Lam  <hclam@chromium.org>
    251
  • trunk/Source/WebKit/chromium/WebKit.gyp

    r135197 r135315  
    718718                                'tests/AssociatedURLLoaderTest.cpp',
    719719                                'tests/EventListenerTest.cpp',
     720                                'tests/FakeWebPlugin.cpp',
    720721                                'tests/FrameTestHelpers.cpp',
    721722                                'tests/IDBBindingUtilitiesTest.cpp',
     
    732733                                'tests/WebPageNewSerializerTest.cpp',
    733734                                'tests/WebPageSerializerTest.cpp',
     735                                'tests/WebPluginContainerTest.cpp',
    734736                                'tests/WebViewTest.cpp',
    735737                            ],
  • trunk/Source/WebKit/chromium/WebKit.gypi

    r135094 r135315  
    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

    r135094 r135315  
    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

    r135178 r135315  
    3232#define WebPluginContainer_h
    3333
     34#include "platform/WebCommon.h"
     35
    3436struct NPObject;
    3537
     
    4143class WebURL;
    4244class WebURLRequest;
     45struct WebPoint;
    4346struct WebRect;
    4447
     
    118121    virtual void setWantsWheelEvents(bool) = 0;
    119122
     123    // Converts view's window coordinates to plugin's local coordinates.
     124    virtual WebPoint windowToLocalPoint(const WebPoint&) = 0;
     125
    120126    virtual WebPlugin* plugin() = 0;
    121127    virtual void setPlugin(WebPlugin*) = 0;
  • trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp

    r135310 r135315  
    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

    r135094 r135315  
    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

    r135178 r135315  
    546546}
    547547
     548WebPoint WebPluginContainerImpl::windowToLocalPoint(const WebPoint& point)
     549{
     550    ScrollView* view = parent();
     551    if (!view)
     552        return point;
     553    WebPoint windowPoint = view->windowToContents(point);
     554    return roundedIntPoint(m_element->renderer()->absoluteToLocal(LayoutPoint(windowPoint), UseTransforms | SnapOffsetForTransforms));
     555}
     556
    548557void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response)
    549558{
  • trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.h

    r135178 r135315  
    116116    virtual void setIsAcceptingTouchEvents(bool);
    117117    virtual void setWantsWheelEvents(bool);
     118    virtual WebPoint windowToLocalPoint(const WebPoint&);
    118119
    119120    // This cannot be null.
Note: See TracChangeset for help on using the changeset viewer.