15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 3e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * Copyright (C) 2014 Opera Software ASA. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h" 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptController.h" 36e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "bindings/core/v8/V8Element.h" 37e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "bindings/core/v8/V8NPObject.h" 3876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/HTMLNames.h" 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/clipboard/DataObject.h" 40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/clipboard/DataTransfer.h" 4106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/GestureEvent.h" 4206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/KeyboardEvent.h" 4306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/MouseEvent.h" 4406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/TouchEvent.h" 4506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/WheelEvent.h" 46e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/frame/EventHandlerRegistry.h" 47f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/FrameView.h" 48f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/LocalFrame.h" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLPlugInElement.h" 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FormState.h" 5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoadRequest.h" 53197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/page/Chrome.h" 54197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/page/EventHandler.h" 5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FocusController.h" 5653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 5753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/scrolling/ScrollingCoordinator.h" 589bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#include "core/plugins/PluginOcclusionSupport.h" 5953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/HitTestResult.h" 6053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderBox.h" 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/rendering/RenderLayer.h" 62197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/rendering/RenderPart.h" 631e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/HostWindow.h" 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/KeyboardCodes.h" 651e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformGestureEvent.h" 661e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/UserGestureIndicator.h" 67197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "platform/exported/WrappedResourceResponse.h" 68a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContext.h" 69a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsLayer.h" 70a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/ScrollAnimator.h" 71a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/ScrollView.h" 72a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/ScrollbarTheme.h" 735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/Platform.h" 745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebClipboard.h" 755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebCompositorSupport.h" 7651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebCursorInfo.h" 775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebDragData.h" 785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebExternalTextureLayer.h" 795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebString.h" 815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURL.h" 825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURLError.h" 835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURLRequest.h" 845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebVector.h" 85197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "public/web/WebElement.h" 86197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "public/web/WebInputEvent.h" 87197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "public/web/WebPlugin.h" 88f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPrintParams.h" 89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "public/web/WebViewClient.h" 90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "web/ChromeClientImpl.h" 91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "web/ScrollbarGroup.h" 92197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "web/WebDataSourceImpl.h" 93197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "web/WebInputEventConversion.h" 94197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "web/WebViewImpl.h" 95e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "wtf/Assertions.h" 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Public methods -------------------------------------------------------------- 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::setFrameRect(const IntRect& frameRect) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::setFrameRect(frameRect); 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reportGeometry(); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::paint(GraphicsContext* gc, const IntRect& damageRect) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!parent()) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Don't paint anything if the plugin doesn't intersect the damage rect. 11353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!frameRect().intersects(damageRect)) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gc->save(); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(parent()->isFrameView()); 1191e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ScrollView* view = toScrollView(parent()); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The plugin is positioned in window coordinates, so it needs to be painted 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // in window coordinates. 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IntPoint origin = view->contentsToWindow(IntPoint(0, 0)); 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) gc->translate(static_cast<float>(-origin.x()), static_cast<float>(-origin.y())); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) WebCanvas* canvas = gc->canvas(); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) IntRect windowRect = view->contentsToWindow(damageRect); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->paint(canvas, windowRect); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gc->restore(); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::invalidateRect(const IntRect& rect) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!parent()) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBox* renderer = toRenderBox(m_element->renderer()); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect dirtyRect = rect; 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dirtyRect.move(renderer->borderLeft() + renderer->paddingLeft(), 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) renderer->borderTop() + renderer->paddingTop()); 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // For querying RenderLayer::compositingState(). 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // This code should be correct. 1477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DisableCompositingQueryAsserts disabler; 1485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) renderer->invalidatePaintRectangle(dirtyRect); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::setFocus(bool focused) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::setFocus(focused); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->updateFocus(focused); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::show() 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSelfVisible(true); 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->updateVisibility(true); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::show(); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::hide() 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSelfVisible(false); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->updateVisibility(false); 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::hide(); 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::handleEvent(Event* event) 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webPlugin->acceptsInputEvents()) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<WebPluginContainerImpl> protector(this); 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The events we pass are defined at: 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // http://devedge-temp.mozilla.org/library/manuals/2002/plugin/1.0/structures5.html#1000000 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Don't take the documentation as truth, however. There are many cases 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // where mozilla behaves differently than the spec. 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event->isMouseEvent()) 184591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch handleMouseEvent(toMouseEvent(event)); 1851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->isWheelEvent()) 1861e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) handleWheelEvent(toWheelEvent(event)); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (event->isKeyboardEvent()) 188591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch handleKeyboardEvent(toKeyboardEvent(event)); 1891e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->isTouchEvent()) 19006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) handleTouchEvent(toTouchEvent(event)); 1911e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->isGestureEvent()) 1921e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) handleGestureEvent(toGestureEvent(event)); 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: it would be cleaner if Widget::handleEvent returned true/false and 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // HTMLPluginElement called setDefaultHandled or defaultEventHandler. 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!event->defaultHandled()) 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_element->Node::defaultEventHandler(event); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::frameRectsChanged() 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::frameRectsChanged(); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reportGeometry(); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::widgetPositionsUpdated() 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::widgetPositionsUpdated(); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reportGeometry(); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 212c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)void WebPluginContainerImpl::eventListenersRemoved() 213c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 214c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // We're no longer registered to receive touch events, so don't try to remove 215c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // the touch event handlers in our destructor. 216c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_touchEventRequestType = TouchEventRequestTypeNone; 217c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 218c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::setParentVisible(bool parentVisible) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We override this function to make sure that geometry updates are sent 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // over to the plugin. For e.g. when a plugin is instantiated it does not 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // have a valid parent. As a result the first geometry update from webkit 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // is ignored. This function is called when the plugin eventually gets a 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // parent. 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isParentVisible() == parentVisible) 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; // No change. 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::setParentVisible(parentVisible); 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isSelfVisible()) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; // This widget has explicitely been marked as not visible. 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->updateVisibility(isVisible()); 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void WebPluginContainerImpl::setParent(Widget* widget) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We override this function so that if the plugin is windowed, we can call 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // NPP_SetWindow at the first possible moment. This ensures that 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // NPP_SetWindow is called before the manual load data is sent to a plugin. 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this order is reversed, Flash won't load videos. 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) Widget::setParent(widget); 2451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (widget) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reportGeometry(); 247a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch else if (m_webPlugin) 248a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_webPlugin->containerDidDetachFromParent(); 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::setPlugin(WebPlugin* plugin) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (plugin != m_webPlugin) { 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_element->resetInstance(); 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin = plugin; 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)float WebPluginContainerImpl::deviceScaleFactor() 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Page* page = m_element->document().page(); 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!page) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1.0; 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return page->deviceScaleFactor(); 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)float WebPluginContainerImpl::pageScaleFactor() 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Page* page = m_element->document().page(); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!page) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1.0; 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return page->pageScaleFactor(); 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)float WebPluginContainerImpl::pageZoomFactor() 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 277d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_element->document().frame(); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1.0; 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame->pageZoomFactor(); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebPluginContainerImpl::setWebLayer(WebLayer* layer) 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_webLayer == layer) 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_webLayer) 2895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GraphicsLayer::unregisterContentsLayer(m_webLayer); 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (layer) 2915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GraphicsLayer::registerContentsLayer(layer); 2925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 2935d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // If either of the layers is null we need to switch between hardware 2945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // and software compositing. 2955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool needsCompositingUpdate = !m_webLayer || !layer; 2965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_webLayer = layer; 2985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 2995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!needsCompositingUpdate) 3005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return; 3015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 302197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(OILPAN) 303197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!m_element) 304197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 305197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif 306197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 3075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_element->setNeedsCompositingUpdate(); 3085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Being composited or not affects the self painting layer bit 3095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // on the RenderLayer. 3105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (RenderPart* renderer = m_element->renderPart()) { 3115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ASSERT(renderer->hasLayer()); 3125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) renderer->layer()->updateSelfPaintingLayer(); 3135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginContainerImpl::supportsPaginatedPrint() const 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webPlugin->supportsPaginatedPrint(); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginContainerImpl::isPrintScalingDisabled() const 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webPlugin->isPrintScalingDisabled(); 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 326c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)int WebPluginContainerImpl::getCopiesToPrint() const 327c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 328c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return m_webPlugin->getCopiesToPrint(); 329c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 330c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebPluginContainerImpl::printBegin(const WebPrintParams& printParams) const 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webPlugin->printBegin(printParams); 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 336e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)bool WebPluginContainerImpl::printPage(int pageNumber, GraphicsContext* gc) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gc->save(); 33981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) WebCanvas* canvas = gc->canvas(); 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool ret = m_webPlugin->printPage(pageNumber, canvas); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gc->restore(); 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ret; 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::printEnd() 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->printEnd(); 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::copy() 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webPlugin->hasSelection()) 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->clipboard()->writeHTML(m_webPlugin->selectionAsMarkup(), WebURL(), m_webPlugin->selectionAsText(), false); 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool WebPluginContainerImpl::executeEditCommand(const WebString& name) 35953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 36053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (m_webPlugin->executeEditCommand(name)) 36153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 36253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 363521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) if (name != "Copy") 36453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 36553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 36653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) copy(); 36753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 36853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 36953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)bool WebPluginContainerImpl::executeEditCommand(const WebString& name, const WebString& value) 3715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 3725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return m_webPlugin->executeEditCommand(name, value); 3735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 3745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebPluginContainerImpl::element() 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(m_element); 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::invalidate() 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget::invalidate(); 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::invalidateRect(const WebRect& rect) 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) invalidateRect(static_cast<IntRect>(rect)); 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 390197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid WebPluginContainerImpl::scrollRect(const WebRect& rect) 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) invalidateRect(rect); 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::reportGeometry() 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!parent()) 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect windowRect, clipRect; 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<IntRect> cutOutRects; 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) calculateGeometry(frameRect(), windowRect, clipRect, cutOutRects); 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->updateGeometry(windowRect, clipRect, cutOutRects, isVisible()); 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbarGroup) { 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->scrollAnimator()->contentsResized(); 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->setFrameRect(frameRect()); 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)void WebPluginContainerImpl::allowScriptObjects() 41393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 41493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 41593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::clearScriptObjects() 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 418197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!frame()) 419e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 420197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 421197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch frame()->script().cleanupScriptObjectsForPlugin(this); 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebPluginContainerImpl::scriptableObjectForElement() 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_element->getNPObject(); 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 429e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)v8::Local<v8::Object> WebPluginContainerImpl::v8ObjectForElement() 430e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 431e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) LocalFrame* frame = m_element->document().frame(); 432e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!frame) 433e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return v8::Local<v8::Object>(); 434e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 435e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!frame->script().canExecuteScripts(NotAboutToExecuteScript)) 436e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return v8::Local<v8::Object>(); 437e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 438e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) ScriptState* scriptState = ScriptState::forMainWorld(frame); 4397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (scriptState->contextIsValid()) 440e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return v8::Local<v8::Object>(); 441e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 442e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) v8::Handle<v8::Value> v8value = toV8(m_element, scriptState->context()->Global(), scriptState->isolate()); 443e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) ASSERT(v8value->IsObject()); 444e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 445e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return v8::Handle<v8::Object>::Cast(v8value); 446e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 447e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebString WebPluginContainerImpl::executeScriptURL(const WebURL& url, bool popupsAllowed) 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 450d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_element->document().frame(); 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const KURL& kurl = url; 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(kurl.protocolIs("javascript")); 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String script = decodeURLEscapeSequences( 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) kurl.string().substring(strlen("javascript:"))); 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4601e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UserGestureIndicator gestureIndicator(popupsAllowed ? DefinitelyProcessingNewUserGesture : PossiblyProcessingUserGesture); 4615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame)); 4625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::Local<v8::Value> result = frame->script().executeScriptInMainWorldAndReturnValue(ScriptSourceCode(script)); 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Failure is reported as a null string. 4655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (result.IsEmpty() || !result->IsString()) 4665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return WebString(); 4675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return toCoreString(v8::Handle<v8::String>::Cast(result)); 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::loadFrameRequest(const WebURLRequest& request, const WebString& target, bool notifyNeeded, void* notifyData) 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 472d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_element->document().frame(); 473f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (!frame || !frame->loader().documentLoader()) 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; // FIXME: send a notification in this case? 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (notifyNeeded) { 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: This is a bit of hack to allow us to observe completion of 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // our frame request. It would be better to evolve FrameLoader to 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // support a completion callback instead. 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<WebPluginLoadObserver> observer = adoptPtr(new WebPluginLoadObserver(this, request.url(), notifyData)); 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Calling get here is dangerous! What if observer is freed? 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pluginLoadObservers.append(observer.get()); 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebDataSourceImpl::setNextPluginLoadObserver(observer.release()); 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FrameLoadRequest frameRequest(frame->document(), request.toResourceRequest(), target); 487926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) UserGestureIndicator gestureIndicator(request.hasUserGesture() ? DefinitelyProcessingNewUserGesture : PossiblyProcessingUserGesture); 488f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame->loader().load(frameRequest); 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::zoomLevelChanged(double zoomLevel) 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4938abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) WebViewImpl* view = WebViewImpl::fromPage(m_element->document().frame()->page()); 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) view->fullFramePluginZoomLevelChanged(zoomLevel); 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginContainerImpl::isRectTopmost(const WebRect& rect) 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_element->document().frame(); 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // hitTestResultAtPoint() takes a padding rectangle. 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: We'll be off by 1 when the width or height is even. 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect documentRect(x() + rect.x, y() + rect.y, rect.width, rect.height); 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutPoint center = documentRect.center(); 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make the rect we're checking (the point surrounded by padding rects) contained inside the requested rect. (Note that -1/2 is 0.) 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutSize padding((documentRect.width() - 1) / 2, (documentRect.height() - 1) / 2); 509197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch HitTestResult result = frame->eventHandler().hitTestResultAtPoint(center, HitTestRequest::ReadOnly | HitTestRequest::Active, padding); 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const HitTestResult::NodeSet& nodes = result.rectBasedTestResult(); 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (nodes.size() != 1) 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 513e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return nodes.first().get() == m_element; 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 516926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebPluginContainerImpl::requestTouchEventType(TouchEventRequestType requestType) 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 518926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_touchEventRequestType == requestType) 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 521e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (m_element->document().frameHost()) { 522e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) EventHandlerRegistry& registry = m_element->document().frameHost()->eventHandlerRegistry(); 523e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (requestType != TouchEventRequestTypeNone && m_touchEventRequestType == TouchEventRequestTypeNone) 524e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) registry.didAddEventHandler(*m_element, EventHandlerRegistry::TouchEvent); 525e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) else if (requestType == TouchEventRequestTypeNone && m_touchEventRequestType != TouchEventRequestTypeNone) 526e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) registry.didRemoveEventHandler(*m_element, EventHandlerRegistry::TouchEvent); 527e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 528926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_touchEventRequestType = requestType; 529926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 530926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 531926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebPluginContainerImpl::setWantsWheelEvents(bool wantsWheelEvents) 532926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 533926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_wantsWheelEvents == wantsWheelEvents) 534926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 535926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_wantsWheelEvents = wantsWheelEvents; 5368abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (Page* page = m_element->document().page()) { 537926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator()) { 538926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (parent() && parent()->isFrameView()) 53919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) scrollingCoordinator->notifyLayoutUpdated(); 540926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 541926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 542926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 543926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 544926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebPoint WebPluginContainerImpl::windowToLocalPoint(const WebPoint& point) 545926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 5461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ScrollView* view = toScrollView(parent()); 547926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!view) 548926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return point; 549926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebPoint windowPoint = view->windowToContents(point); 550926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return roundedIntPoint(m_element->renderer()->absoluteToLocal(LayoutPoint(windowPoint), UseTransforms)); 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebPoint WebPluginContainerImpl::localToWindowPoint(const WebPoint& point) 5545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 5551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ScrollView* view = toScrollView(parent()); 5565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (!view) 5575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return point; 5585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) IntPoint absolutePoint = roundedIntPoint(m_element->renderer()->localToAbsolute(LayoutPoint(point), UseTransforms)); 5595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return view->contentsToWindow(absolutePoint); 5605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 5615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response) 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure that the plugin receives window geometry before data, or else 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // plugins misbehave. 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frameRectsChanged(); 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WrappedResourceResponse urlResponse(response); 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->didReceiveResponse(urlResponse); 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::didReceiveData(const char *data, int dataLength) 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->didReceiveData(data, dataLength); 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::didFinishLoading() 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->didFinishLoading(); 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::didFailLoading(const ResourceError& error) 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->didFailLoading(error); 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 58753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebLayer* WebPluginContainerImpl::platformLayer() const 58853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 58953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_webLayer; 59053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 59153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 592e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)v8::Local<v8::Object> WebPluginContainerImpl::scriptableObject(v8::Isolate* isolate) 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 594e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) v8::Local<v8::Object> object = m_webPlugin->v8ScriptableObject(isolate); 595e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!object.IsEmpty()) { 596e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // WebPlugin implementation can't provide the obsolete NPObject at the same time: 597e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) ASSERT(!m_webPlugin->scriptableObject()); 598e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return object; 599e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 600e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 601e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) NPObject* npObject = m_webPlugin->scriptableObject(); 602e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (npObject) 603e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return createV8ObjectForNPObject(npObject, 0, isolate); 604e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return v8::Local<v8::Object>(); 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginContainerImpl::getFormValue(String& value) 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebString webValue; 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webPlugin->getFormValue(webValue)) { 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = webValue; 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginContainerImpl::supportsKeyboardFocus() const 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webPlugin->supportsKeyboardFocus(); 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 622a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)bool WebPluginContainerImpl::supportsInputMethod() const 623a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 624a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return m_webPlugin->supportsInputMethod(); 625a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 626a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginContainerImpl::canProcessDrag() const 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webPlugin->canProcessDrag(); 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 632926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool WebPluginContainerImpl::wantsWheelEvents() 633926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 634926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_wantsWheelEvents; 635926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 636926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::willDestroyPluginLoadObserver(WebPluginLoadObserver* observer) 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t pos = m_pluginLoadObservers.find(observer); 64006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) if (pos == kNotFound) 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pluginLoadObservers.remove(pos); 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScrollbarGroup* WebPluginContainerImpl::scrollbarGroup() 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_scrollbarGroup) 6488abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_scrollbarGroup = adoptPtr(new ScrollbarGroup(m_element->document().frame()->view(), frameRect())); 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbarGroup.get(); 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::willStartLiveResize() 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbarGroup) 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->willStartLiveResize(); 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::willEndLiveResize() 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbarGroup) 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->willEndLiveResize(); 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginContainerImpl::paintCustomOverhangArea(GraphicsContext* context, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect) 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context->save(); 6675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) context->setFillColor(Color(0xCC, 0xCC, 0xCC)); 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context->fillRect(intersection(horizontalOverhangArea, dirtyRect)); 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context->fillRect(intersection(verticalOverhangArea, dirtyRect)); 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context->restore(); 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Private methods ------------------------------------------------------------- 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 676e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebPluginContainerImpl::WebPluginContainerImpl(HTMLPlugInElement* element, WebPlugin* webPlugin) 6777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if ENABLE(OILPAN) 6787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : m_frame(element->document().frame()) 6797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#else 680e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) : FrameDestructionObserver(element->document().frame()) 6817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 682197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch , m_element(element) 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_webPlugin(webPlugin) 684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_webLayer(0) 685926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_touchEventRequestType(TouchEventRequestTypeNone) 686926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_wantsWheelEvents(false) 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPluginContainerImpl::~WebPluginContainerImpl() 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 692197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(OILPAN) 693197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // The element (and its document) are heap allocated and may 694197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // have been finalized by now; unsafe to unregister the touch 695197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // event handler at this stage. 696197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // 697197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // This is acceptable, as the widget will unregister itself if it 698197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // is cleanly detached. If an explicit detach doesn't happen, this 699197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // container is assumed to have died with the plugin element (and 700197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // its document), hence no unregistration step is needed. 701197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // 702197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch m_element = 0; 703197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#else 704e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (m_touchEventRequestType != TouchEventRequestTypeNone && m_element->document().frameHost()) 705e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) m_element->document().frameHost()->eventHandlerRegistry().didRemoveEventHandler(*m_element, EventHandlerRegistry::TouchEvent); 706197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 708c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) ScriptForbiddenScope::AllowSuperUnsafeScript thisShouldBeRemoved; 709c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pluginLoadObservers[i]->clearPluginContainer(); 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->destroy(); 713926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_webLayer) 7145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) GraphicsLayer::unregisterContentsLayer(m_webLayer); 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 717197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(OILPAN) 718197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid WebPluginContainerImpl::detach() 719197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 720e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (m_touchEventRequestType != TouchEventRequestTypeNone && m_element->document().frameHost()) 721e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) m_element->document().frameHost()->eventHandlerRegistry().didRemoveEventHandler(*m_element, EventHandlerRegistry::TouchEvent); 722197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 723197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch setWebLayer(0); 724197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 725197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif 726197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::handleMouseEvent(MouseEvent* event) 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(parent()->isFrameView()); 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event->isDragEvent()) { 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webPlugin->canProcessDrag()) 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handleDragEvent(event); 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We cache the parent FrameView here as the plugin widget could be deleted 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // in the call to HandleEvent. See http://b/issue?id=1362948 739926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) FrameView* parentView = toFrameView(parent()); 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebMouseEventBuilder webEvent(this, m_element->renderer(), *event); 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::mousedown) 746926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) focusPlugin(); 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbarGroup) { 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This needs to be set before the other callbacks in this scope, since 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the scroll animator class might query the position in response. 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->setLastMousePosition(IntPoint(event->x(), event->y())); 7521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::mousemove) 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->scrollAnimator()->mouseMovedInContentArea(); 7541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->type() == EventTypeNames::mouseover) 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->scrollAnimator()->mouseEnteredContentArea(); 7561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->type() == EventTypeNames::mouseout) 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarGroup->scrollAnimator()->mouseExitedContentArea(); 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCursorInfo cursorInfo; 76107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // A windowless plugin can change the cursor in response to a mouse move 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // event. We need to reflect the changed cursor in the frame view as the 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // mouse is moved in the boundaries of the windowless plugin. 7678abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Page* page = parentView->frame().page(); 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!page) 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 77009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) toChromeClientImpl(page->chrome().client()).setCursorForPlugin(cursorInfo); 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::handleDragEvent(MouseEvent* event) 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(event->isDragEvent()); 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebDragStatus dragStatus = WebDragStatusUnknown; 7781e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::dragenter) 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dragStatus = WebDragStatusEnter; 7801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->type() == EventTypeNames::dragleave) 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dragStatus = WebDragStatusLeave; 7821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->type() == EventTypeNames::dragover) 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dragStatus = WebDragStatusOver; 7841e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) else if (event->type() == EventTypeNames::drop) 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dragStatus = WebDragStatusDrop; 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (dragStatus == WebDragStatusUnknown) 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 790197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch DataTransfer* dataTransfer = event->dataTransfer(); 791197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebDragData dragData(dataTransfer->dataObject()); 792197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebDragOperationsMask dragOperationMask = static_cast<WebDragOperationsMask>(dataTransfer->sourceOperation()); 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPoint dragScreenLocation(event->screenX(), event->screenY()); 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPoint dragLocation(event->absoluteLocation().x() - location().x(), event->absoluteLocation().y() - location().y()); 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webPlugin->handleDragStatusUpdate(dragStatus, dragData, dragOperationMask, dragLocation, dragScreenLocation); 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::handleWheelEvent(WheelEvent* event) 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebMouseWheelEventBuilder webEvent(this, m_element->renderer(), *event); 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCursorInfo cursorInfo; 80607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::handleKeyboardEvent(KeyboardEvent* event) 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebKeyboardEventBuilder webEvent(*event); 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.type == WebInputEvent::KeyDown) { 8178abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(MACOSX) 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.modifiers == WebInputEvent::MetaKey 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.modifiers == WebInputEvent::ControlKey 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && webEvent.windowsKeyCode == VKEY_C 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Only copy if there's a selection, so that we only ever do this 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // for Pepper plugins that support copying. Windowless NPAPI 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // plugins will get the event as before. 8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && m_webPlugin->hasSelection()) { 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) copy(); 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const WebInputEvent* currentInputEvent = WebViewImpl::currentInputEvent(); 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Copy stashed info over, and only copy here in order not to interfere 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the ctrl-c logic above. 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (currentInputEvent 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && WebInputEvent::isKeyboardEventType(currentInputEvent->type)) { 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webEvent.modifiers |= currentInputEvent->modifiers & 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (WebInputEvent::CapsLockOn | WebInputEvent::NumLockOn); 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Give the client a chance to issue edit comamnds. 8448abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) WebViewImpl* view = WebViewImpl::fromPage(m_element->document().frame()->page()); 8455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (m_webPlugin->supportsEditCommands() && view->client()) 8465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) view->client()->handleCurrentKeyboardEvent(); 8475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCursorInfo cursorInfo; 84907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 855926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) switch (m_touchEventRequestType) { 856926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case TouchEventRequestTypeNone: 857926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 858926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case TouchEventRequestTypeRaw: { 859926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebTouchEventBuilder webEvent(this, m_element->renderer(), *event); 860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 862926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8631e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::touchstart) 864926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) focusPlugin(); 865926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 866926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebCursorInfo cursorInfo; 86707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) 868926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event->setDefaultHandled(); 869926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // FIXME: Can a plugin change the cursor from a touch-event callback? 870926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 871926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 872926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case TouchEventRequestTypeSynthesizedMouse: 873926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) synthesizeMouseEventIfPossible(event); 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 875926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 876926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 877926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 878926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static inline bool gestureScrollHelper(ScrollbarGroup* scrollbarGroup, ScrollDirection positiveDirection, ScrollDirection negativeDirection, float delta) 879926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 880926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!delta) 881926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return false; 882926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) float absDelta = delta > 0 ? delta : -delta; 883926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return scrollbarGroup->scroll(delta < 0 ? negativeDirection : positiveDirection, ScrollByPrecisePixel, absDelta); 884926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 885926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 886926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebPluginContainerImpl::handleGestureEvent(GestureEvent* event) 887926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 888926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebGestureEventBuilder webEvent(this, m_element->renderer(), *event); 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (event->type() == EventTypeNames::gesturetapdown) 8925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) focusPlugin(); 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCursorInfo cursorInfo; 894926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) { 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 896926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 897926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 898926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 899926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (webEvent.type == WebInputEvent::GestureScrollUpdate || webEvent.type == WebInputEvent::GestureScrollUpdateWithoutPropagation) { 900926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!m_scrollbarGroup) 901926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 902926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (gestureScrollHelper(m_scrollbarGroup.get(), ScrollLeft, ScrollRight, webEvent.data.scrollUpdate.deltaX)) 903926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event->setDefaultHandled(); 904926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (gestureScrollHelper(m_scrollbarGroup.get(), ScrollUp, ScrollDown, webEvent.data.scrollUpdate.deltaY)) 905926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) event->setDefaultHandled(); 906926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Can a plugin change the cursor from a touch-event callback? 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 910926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebPluginContainerImpl::synthesizeMouseEventIfPossible(TouchEvent* event) 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 912926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebMouseEventBuilder webEvent(this, m_element->renderer(), *event); 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 915926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCursorInfo cursorInfo; 91707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 919926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 920926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 921926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebPluginContainerImpl::focusPlugin() 922926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 923d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame& containingFrame = toFrameView(parent())->frame(); 9248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (Page* currentPage = containingFrame.page()) 9258abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) currentPage->focusController().setFocusedElement(m_element, &containingFrame); 926926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 9278abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) containingFrame.document()->setFocusedElement(m_element); 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginContainerImpl::calculateGeometry(const IntRect& frameRect, 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect& windowRect, 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect& clipRect, 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<IntRect>& cutOutRects) 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) windowRect = toScrollView(parent())->contentsToWindow(frameRect); 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Calculate a clip-rect so that we don't overlap the scrollbars, etc. 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clipRect = windowClipRect(); 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clipRect.move(-windowRect.x(), -windowRect.y()); 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) getPluginOcclusions(m_element, this->parent(), frameRect, cutOutRects); 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Convert to the plugin position. 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < cutOutRects.size(); i++) 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cutOutRects[i].move(-frameRect.x(), -frameRect.y()); 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 947e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)IntRect WebPluginContainerImpl::windowClipRect() const 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Start by clipping to our bounds. 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect clipRect = 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) convertToContainingWindow(IntRect(0, 0, width(), height())); 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 953d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // document().renderView() can be 0 when we receive messages from the 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // plugins while we are destroying a frame. 9551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // FIXME: Can we just check m_element->document().isActive() ? 956d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (m_element->renderer()->document().renderView()) { 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Take our element and get the clip rect from the enclosing layer and 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // frame view. 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clipRect.intersect( 960d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_element->document().view()->windowClipRectForFrameOwner(m_element)); 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return clipRect; 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 966a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochbool WebPluginContainerImpl::pluginShouldPersist() const 967a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 968a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return m_webPlugin->shouldPersist(); 969a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 970a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 97151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 972