Implement NPAPI redirect handling
[WebKit-https.git] / Source / WebKit2 / WebProcess / Plugins / PDF / PDFPlugin.h
index 0b667f7..adef6cb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2011, 2012, 2015 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,6 +30,7 @@
 
 #include "Plugin.h"
 #include "WebEvent.h"
+#include "WebHitTestResult.h"
 #include <WebCore/AffineTransform.h>
 #include <WebCore/FindOptions.h>
 #include <WebCore/ScrollableArea.h>
@@ -46,9 +47,8 @@ OBJC_CLASS NSString;
 OBJC_CLASS PDFAnnotation;
 OBJC_CLASS PDFLayerController;
 OBJC_CLASS PDFSelection;
-OBJC_CLASS WKPDFLayerControllerDelegate;
 OBJC_CLASS WKPDFPluginAccessibilityObject;
-OBJC_CLASS WKPDFPluginContextMenuTarget;
+OBJC_CLASS WKPDFLayerControllerDelegate;
 
 namespace IPC {
 class DataReference;
@@ -68,7 +68,7 @@ class WebFrame;
 
 class PDFPlugin final : public Plugin, private WebCore::ScrollableArea {
 public:
-    static PassRefPtr<PDFPlugin> create(WebFrame*);
+    static Ref<PDFPlugin> create(WebFrame*);
     ~PDFPlugin();
 
     static WebCore::PluginInfo pluginInfo();
@@ -89,7 +89,6 @@ public:
     void clickedLink(NSURL *);
     void saveToPDF();
     void openWithNativeApplication();
-    void openWithPlugin();
     void writeItemsToPasteboard(NSString *pasteboardName, NSArray *items, NSArray *types);
     void showDefinitionForAttributedString(NSAttributedString *, CGPoint);
     void performWebSearch(NSString *);
@@ -105,27 +104,31 @@ public:
     
     bool showContextMenuAtPoint(const WebCore::IntPoint&);
 
-    void setUsedInPlaceOfBlockedPlugin(bool value, const String& useBlockedPluginContextMenuTitle);
+    String lookupTextAtLocation(const WebCore::FloatPoint&, WebHitTestResult::Data&, PDFSelection **, NSDictionary **) const;
+    WebCore::FloatRect viewRectForSelection(PDFSelection *) const;
+
+    CGFloat scaleFactor() const;
 
 private:
     explicit PDFPlugin(WebFrame*);
 
     // Plugin functions.
-    virtual bool initialize(const Parameters&);
+    virtual bool initialize(const Parameters&) override;
     virtual void destroy() override;
     virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRectInWindowCoordinates) override { }
     virtual void updateControlTints(WebCore::GraphicsContext*) override;
     virtual bool supportsSnapshotting() const override { return true; }
-    virtual PassRefPtr<ShareableBitmap> snapshot() override;
+    virtual RefPtr<ShareableBitmap> snapshot() override;
     virtual PlatformLayer* pluginLayer() override;
     virtual bool isTransparent() override { return false; }
     virtual bool wantsWheelEvents() override { return true; }
     virtual void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform) override;
     virtual void contentsScaleFactorChanged(float) override;
-    virtual void visibilityDidChange() override { }
+    virtual void visibilityDidChange(bool) override { }
     virtual void frameDidFinishLoading(uint64_t requestID) override;
     virtual void frameDidFail(uint64_t requestID, bool wasCancelled) override;
     virtual void didEvaluateJavaScript(uint64_t requestID, const String& result) override;
+    virtual void streamWillSendRequest(uint64_t streamID, const WebCore::URL& requestURL, const WebCore::URL& responseURL, int responseStatus) override { }
     virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::URL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) override;
     virtual void streamDidReceiveData(uint64_t streamID, const char* bytes, int length) override;
     virtual void streamDidFinishLoading(uint64_t streamID) override;
@@ -157,7 +160,7 @@ private:
     virtual void privateBrowsingStateChanged(bool) override { }
     virtual bool getFormValue(String& formValue) override { return false; }
     virtual bool handleScroll(WebCore::ScrollDirection, WebCore::ScrollGranularity) override;
-    virtual PassRefPtr<WebCore::SharedBuffer> liveResourceData() const override;
+    virtual RefPtr<WebCore::SharedBuffer> liveResourceData() const override;
 
     virtual bool isBeingAsynchronouslyInitialized() const override { return false; }
 
@@ -169,8 +172,10 @@ private:
 
     PDFSelection *nextMatchForString(const String& target, BOOL searchForward, BOOL caseSensitive, BOOL wrapSearch, PDFSelection *initialSelection, BOOL startInSelection);
 
-    virtual bool performDictionaryLookupAtLocation(const WebCore::FloatPoint&) override;
-    virtual String getSelectionString() const override;
+    bool performDictionaryLookupAtLocation(const WebCore::FloatPoint&) override;
+    String getSelectionString() const override;
+    String getSelectionForWordAtPoint(const WebCore::FloatPoint&) const override;
+    bool existingSelectionContainsPoint(const WebCore::FloatPoint&) const override;
 
     virtual bool shouldAllowScripting() override { return false; }
     virtual bool shouldAllowNavigationFromDrags() override { return true; }
@@ -179,6 +184,8 @@ private:
     // ScrollableArea functions.
     virtual WebCore::IntRect scrollCornerRect() const override;
     virtual WebCore::ScrollableArea* enclosingScrollableArea() const override;
+    virtual bool isScrollableOrRubberbandable() override { return true; }
+    virtual bool hasScrollableOrRubberbandableAncestor() override { return true; }
     virtual WebCore::IntRect scrollableAreaBoundingBox() const override;
     virtual void setScrollOffset(const WebCore::IntPoint&) override;
     virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&) override;
@@ -191,18 +198,18 @@ private:
     virtual WebCore::IntPoint scrollPosition() const override;
     virtual WebCore::IntPoint minimumScrollPosition() const override;
     virtual WebCore::IntPoint maximumScrollPosition() const override;
-    virtual int visibleHeight() const override { return m_size.height(); }
-    virtual int visibleWidth() const override { return m_size.width(); }
+    virtual WebCore::IntSize visibleSize() const override { return m_size; }
     virtual WebCore::IntSize contentsSize() const override { return m_pdfDocumentSize; }
     virtual WebCore::Scrollbar* horizontalScrollbar() const override { return m_horizontalScrollbar.get(); }
     virtual WebCore::Scrollbar* verticalScrollbar() const override { return m_verticalScrollbar.get(); }
     virtual bool shouldSuspendScrollAnimations() const override { return false; } // If we return true, ScrollAnimatorMac will keep cycling a timer forever, waiting for a good time to animate.
-    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate) override;
+    virtual void scrollbarStyleChanged(WebCore::ScrollbarStyle, bool forceUpdate) override;
     virtual WebCore::IntRect convertFromScrollbarToContainingView(const WebCore::Scrollbar*, const WebCore::IntRect& scrollbarRect) const override;
     virtual WebCore::IntRect convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntRect& parentRect) const override;
     virtual WebCore::IntPoint convertFromScrollbarToContainingView(const WebCore::Scrollbar*, const WebCore::IntPoint& scrollbarPoint) const override;
     virtual WebCore::IntPoint convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntPoint& parentPoint) const override;
     virtual bool updatesScrollLayerPositionOnMainThread() const override { return true; }
+    virtual bool forceUpdateScrollbarsOnMainThreadForPerformanceTesting() const override;
 
     // PDFPlugin functions.
     void updateScrollbars();
@@ -262,9 +269,6 @@ private:
 
     bool m_isPostScript;
     bool m_pdfDocumentWasMutated;
-    bool m_usedInPlaceOfBlockedPlugin;
-
-    String m_useBlockedPluginContextMenuTitle;
 
     WebCore::IntSize m_scrollOffset;
 
@@ -275,8 +279,7 @@ private:
     RetainPtr<CALayer> m_scrollCornerLayer;
     RetainPtr<PDFLayerController> m_pdfLayerController;
     RetainPtr<WKPDFPluginAccessibilityObject> m_accessibilityObject;
-    RetainPtr<WKPDFPluginContextMenuTarget> m_contextMenuTarget;
-
+    
     RefPtr<PDFPluginAnnotation> m_activeAnnotation;
     RefPtr<PDFPluginPasswordField> m_passwordField;
     RefPtr<WebCore::Element> m_annotationContainer;
@@ -310,6 +313,8 @@ private:
 
 } // namespace WebKit
 
+SPECIALIZE_TYPE_TRAITS_PLUGIN(PDFPlugin, PDFPluginType)
+
 #endif // ENABLE(PDFKIT_PLUGIN)
 
 #endif // PDFPlugin_h