1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebPluginContainerImpl_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebPluginContainerImpl_h 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "PluginViewBase.h" 356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebPluginContainer.h" 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Widget.h" 3728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/PassRefPtr.h> 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/Vector.h> 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct NPObject; 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass HTMLPlugInElement; 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass IntRect; 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass KeyboardEvent; 4728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass LayerChromium; 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass MouseEvent; 4928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass PluginLayerChromium; 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass ResourceError; 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass ResourceResponse; 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WheelEvent; 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebPlugin; 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebPluginLoadObserver; 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 6028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass WebPluginContainerImpl : public WebCore::PluginViewBase, public WebPluginContainer { 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static PassRefPtr<WebPluginContainerImpl> create(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin) 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return adoptRef(new WebPluginContainerImpl(element, webPlugin)); 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Widget methods 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setFrameRect(const WebCore::IntRect&); 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&); 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void invalidateRect(const WebCore::IntRect&); 7121939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual void setFocus(bool); 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void show(); 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void hide(); 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void handleEvent(WebCore::Event*); 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void frameRectsChanged(); 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setParentVisible(bool); 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setParent(WebCore::ScrollView*); 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void widgetPositionsUpdated(); 79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual bool isPluginContainer() const { return true; } 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebPluginContainer methods 826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual WebElement element(); 83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void invalidate(); 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void invalidateRect(const WebRect&); 8528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual void scrollRect(int dx, int dy, const WebRect&); 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void reportGeometry(); 872bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setBackingTextureId(unsigned); 8828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual void commitBackingTexture(); 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void clearScriptObjects(); 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual NPObject* scriptableObjectForElement(); 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebString executeScriptURL(const WebURL&, bool popupsAllowed); 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void loadFrameRequest(const WebURLRequest&, const WebString& target, bool notifyNeeded, void* notifyData); 9328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual void zoomLevelChanged(double zoomLevel); 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 95ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // This cannot be null. 96ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block WebPlugin* plugin() { return m_webPlugin; } 97ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void setPlugin(WebPlugin* plugin) { m_webPlugin = plugin; } 98ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Printing interface. The plugin can support custom printing 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // (which means it controls the layout, number of pages etc). 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Whether the plugin supports its own paginated print. The other print 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // interface methods are called only if this method returns true. 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool supportsPaginatedPrint() const; 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Sets up printing at the given print rect and printer DPI. printableArea 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // is in points (a point is 1/72 of an inch).Returns the number of pages to 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // be printed at these settings. 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int printBegin(const WebCore::IntRect& printableArea, int printerDPI) const; 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Prints the page specified by pageNumber (0-based index) into the supplied canvas. 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool printPage(int pageNumber, WebCore::GraphicsContext* gc); 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Ends the print operation. 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void printEnd(); 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 113e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke // Copy the selected text. 114e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke void copy(); 115ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Resource load events for the plugin's source data: 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void didReceiveResponse(const WebCore::ResourceResponse&); 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void didReceiveData(const char *data, int dataLength); 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void didFinishLoading(); 120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void didFailLoading(const WebCore::ResourceError&); 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block NPObject* scriptableObject(); 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void willDestroyPluginLoadObserver(WebPluginLoadObserver*); 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 12628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if USE(ACCELERATED_COMPOSITING) 12728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu virtual WebCore::LayerChromium* platformLayer() const; 12828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif 12928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 13128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebPluginContainerImpl(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin); 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ~WebPluginContainerImpl(); 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void handleMouseEvent(WebCore::MouseEvent*); 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void handleWheelEvent(WebCore::WheelEvent*); 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void handleKeyboardEvent(WebCore::KeyboardEvent*); 137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void calculateGeometry(const WebCore::IntRect& frameRect, 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::IntRect& windowRect, 140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::IntRect& clipRect, 141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Vector<WebCore::IntRect>& cutOutRects); 142643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::IntRect windowClipRect() const; 143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void windowCutOutRects(const WebCore::IntRect& frameRect, 144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Vector<WebCore::IntRect>& cutOutRects); 145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::HTMLPlugInElement* m_element; 147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebPlugin* m_webPlugin; 148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Vector<WebPluginLoadObserver*> m_pluginLoadObservers; 14928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 15028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if USE(ACCELERATED_COMPOSITING) 15128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu RefPtr<WebCore::PluginLayerChromium> m_platformLayer; 15228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif 153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 158