Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / web / WebPluginContainerImpl.h
index 46728ee..206c917 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2014 Opera Software ASA. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -31,6 +32,7 @@
 #ifndef WebPluginContainerImpl_h
 #define WebPluginContainerImpl_h
 
+#include "core/frame/FrameDestructionObserver.h"
 #include "core/plugins/PluginView.h"
 #include "platform/Widget.h"
 #include "public/web/WebPluginContainer.h"
@@ -42,7 +44,8 @@
 
 struct NPObject;
 
-namespace WebCore {
+namespace blink {
+
 class GestureEvent;
 class HTMLPlugInElement;
 class IntRect;
@@ -51,30 +54,25 @@ class MouseEvent;
 class PlatformGestureEvent;
 class ResourceError;
 class ResourceResponse;
-class TouchEvent;
-class WheelEvent;
-class Widget;
-}
-
-namespace blink {
-
-struct WebPrintParams;
-
 class ScrollbarGroup;
+class TouchEvent;
 class WebPlugin;
 class WebPluginLoadObserver;
 class WebExternalTextureLayer;
+class WheelEvent;
+class Widget;
+struct WebPrintParams;
 
-class WebPluginContainerImpl FINAL : public WebCore::PluginView, public WebPluginContainer {
+class WebPluginContainerImpl FINAL : public PluginView, public WebPluginContainer, public FrameDestructionObserver {
 public:
-    static PassRefPtr<WebPluginContainerImpl> create(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin)
+    static PassRefPtr<WebPluginContainerImpl> create(HTMLPlugInElement* element, WebPlugin* webPlugin)
     {
         return adoptRef(new WebPluginContainerImpl(element, webPlugin));
     }
 
     // PluginView methods
     virtual WebLayer* platformLayer() const OVERRIDE;
-    virtual NPObject* scriptableObject() OVERRIDE;
+    virtual v8::Local<v8::Object> scriptableObject(v8::Isolate*) OVERRIDE;
     virtual bool getFormValue(String&) OVERRIDE;
     virtual bool supportsKeyboardFocus() const OVERRIDE;
     virtual bool supportsInputMethod() const OVERRIDE;
@@ -82,16 +80,16 @@ public:
     virtual bool wantsWheelEvents() OVERRIDE;
 
     // Widget methods
-    virtual void setFrameRect(const WebCore::IntRect&) OVERRIDE;
-    virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&) OVERRIDE;
-    virtual void invalidateRect(const WebCore::IntRect&) OVERRIDE;
+    virtual void setFrameRect(const IntRect&) OVERRIDE;
+    virtual void paint(GraphicsContext*, const IntRect&) OVERRIDE;
+    virtual void invalidateRect(const IntRect&) OVERRIDE;
     virtual void setFocus(bool) OVERRIDE;
     virtual void show() OVERRIDE;
     virtual void hide() OVERRIDE;
-    virtual void handleEvent(WebCore::Event*) OVERRIDE;
+    virtual void handleEvent(Event*) OVERRIDE;
     virtual void frameRectsChanged() OVERRIDE;
     virtual void setParentVisible(bool) OVERRIDE;
-    virtual void setParent(WebCore::Widget*) OVERRIDE;
+    virtual void setParent(Widget*) OVERRIDE;
     virtual void widgetPositionsUpdated() OVERRIDE;
     virtual bool isPluginContainer() const OVERRIDE { return true; }
     virtual void eventListenersRemoved() OVERRIDE;
@@ -101,11 +99,12 @@ public:
     virtual WebElement element() OVERRIDE;
     virtual void invalidate() OVERRIDE;
     virtual void invalidateRect(const WebRect&) OVERRIDE;
-    virtual void scrollRect(int dx, int dy, const WebRect&) OVERRIDE;
+    virtual void scrollRect(const WebRect&) OVERRIDE;
     virtual void reportGeometry() OVERRIDE;
     virtual void allowScriptObjects() OVERRIDE;
     virtual void clearScriptObjects() OVERRIDE;
     virtual NPObject* scriptableObjectForElement() OVERRIDE;
+    virtual v8::Local<v8::Object> v8ObjectForElement() OVERRIDE;
     virtual WebString executeScriptURL(const WebURL&, bool popupsAllowed) OVERRIDE;
     virtual void loadFrameRequest(const WebURLRequest&, const WebString& target, bool notifyNeeded, void* notifyData) OVERRIDE;
     virtual void zoomLevelChanged(double zoomLevel) OVERRIDE;
@@ -133,10 +132,12 @@ public:
     // If the plugin content should not be scaled to the printable area of
     // the page, then this method should return true.
     bool isPrintScalingDisabled() const;
+    // Returns number of copies to be printed.
+    int getCopiesToPrint() const;
     // Sets up printing at the specified WebPrintParams. Returns the number of pages to be printed at these settings.
     int printBegin(const WebPrintParams&) const;
     // Prints the page specified by pageNumber (0-based index) into the supplied canvas.
-    bool printPage(int pageNumber, WebCore::GraphicsContext* gc);
+    bool printPage(int pageNumber, GraphicsContext*);
     // Ends the print operation.
     void printEnd();
 
@@ -148,10 +149,10 @@ public:
     bool executeEditCommand(const WebString& name, const WebString& value);
 
     // Resource load events for the plugin's source data:
-    virtual void didReceiveResponse(const WebCore::ResourceResponse&) OVERRIDE;
+    virtual void didReceiveResponse(const ResourceResponse&) OVERRIDE;
     virtual void didReceiveData(const char *data, int dataLength) OVERRIDE;
     virtual void didFinishLoading() OVERRIDE;
-    virtual void didFailLoading(const WebCore::ResourceError&) OVERRIDE;
+    virtual void didFailLoading(const ResourceError&) OVERRIDE;
 
     void willDestroyPluginLoadObserver(WebPluginLoadObserver*);
 
@@ -160,32 +161,41 @@ public:
     void willStartLiveResize();
     void willEndLiveResize();
 
-    bool paintCustomOverhangArea(WebCore::GraphicsContext*, const WebCore::IntRect&, const WebCore::IntRect&, const WebCore::IntRect&);
+    bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&);
+
+#if ENABLE(OILPAN)
+    virtual void detach() OVERRIDE;
+#endif
 
 private:
-    WebPluginContainerImpl(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin);
+    WebPluginContainerImpl(HTMLPlugInElement*, WebPlugin*);
     virtual ~WebPluginContainerImpl();
 
-    void handleMouseEvent(WebCore::MouseEvent*);
-    void handleDragEvent(WebCore::MouseEvent*);
-    void handleWheelEvent(WebCore::WheelEvent*);
-    void handleKeyboardEvent(WebCore::KeyboardEvent*);
-    void handleTouchEvent(WebCore::TouchEvent*);
-    void handleGestureEvent(WebCore::GestureEvent*);
+    void handleMouseEvent(MouseEvent*);
+    void handleDragEvent(MouseEvent*);
+    void handleWheelEvent(WheelEvent*);
+    void handleKeyboardEvent(KeyboardEvent*);
+    void handleTouchEvent(TouchEvent*);
+    void handleGestureEvent(GestureEvent*);
 
-    void synthesizeMouseEventIfPossible(WebCore::TouchEvent*);
+    void synthesizeMouseEventIfPossible(TouchEvent*);
 
     void focusPlugin();
 
-    void calculateGeometry(const WebCore::IntRect& frameRect,
-                           WebCore::IntRect& windowRect,
-                           WebCore::IntRect& clipRect,
-                           Vector<WebCore::IntRect>& cutOutRects);
-    WebCore::IntRect windowClipRect() const;
-    void windowCutOutRects(const WebCore::IntRect& frameRect,
-                           Vector<WebCore::IntRect>& cutOutRects);
-
-    WebCore::HTMLPlugInElement* m_element;
+    void calculateGeometry(
+        const IntRect& frameRect,
+        IntRect& windowRect,
+        IntRect& clipRect,
+        Vector<IntRect>& cutOutRects);
+    IntRect windowClipRect() const;
+    void windowCutOutRects(
+        const IntRect& frameRect,
+        Vector<IntRect>& cutOutRects);
+
+    // FIXME: Oilpan: consider moving Widget to the heap and turn this
+    // into a traced member. For the time being, it is a bare pointer
+    // of its owning PlugInElement and managed as such.
+    HTMLPlugInElement* m_element;
     WebPlugin* m_webPlugin;
     Vector<WebPluginLoadObserver*> m_pluginLoadObservers;
 
@@ -199,7 +209,7 @@ private:
     bool m_wantsWheelEvents;
 };
 
-DEFINE_TYPE_CASTS(WebPluginContainerImpl, WebCore::Widget, widget, widget->isPluginContainer(), widget.isPluginContainer());
+DEFINE_TYPE_CASTS(WebPluginContainerImpl, Widget, widget, widget->isPluginContainer(), widget.isPluginContainer());
 // Unlike Widget, we need not worry about object type for container.
 // WebPluginContainerImpl is the only subclass of WebPluginContainer.
 DEFINE_TYPE_CASTS(WebPluginContainerImpl, WebPluginContainer, container, true, true);