~ubuntu-branches/ubuntu/raring/qtwebkit-source/raring-proposed

« back to all changes in this revision

Viewing changes to Source/WebKit2/WebProcess/Plugins/PDF/SimplePDFPlugin.h

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-02-18 14:24:18 UTC
  • Revision ID: package-import@ubuntu.com-20130218142418-eon0jmjg3nj438uy
Tags: upstream-2.3
ImportĀ upstreamĀ versionĀ 2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.
 
3
 *
 
4
 * Redistribution and use in source and binary forms, with or without
 
5
 * modification, are permitted provided that the following conditions
 
6
 * are met:
 
7
 * 1. Redistributions of source code must retain the above copyright
 
8
 *    notice, this list of conditions and the following disclaimer.
 
9
 * 2. Redistributions in binary form must reproduce the above copyright
 
10
 *    notice, this list of conditions and the following disclaimer in the
 
11
 *    documentation and/or other materials provided with the distribution.
 
12
 *
 
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 
14
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 
15
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 
16
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 
17
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 
19
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 
20
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 
21
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 
22
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 
23
 * THE POSSIBILITY OF SUCH DAMAGE.
 
24
 */
 
25
 
 
26
#ifndef SimplePDFPlugin_h
 
27
#define SimplePDFPlugin_h
 
28
 
 
29
#include "Plugin.h"
 
30
#include <WebCore/ScrollableArea.h>
 
31
#include <wtf/RetainPtr.h>
 
32
 
 
33
typedef const struct OpaqueJSContext* JSContextRef;
 
34
typedef struct OpaqueJSValue* JSObjectRef;
 
35
typedef const struct OpaqueJSValue* JSValueRef;
 
36
 
 
37
namespace WebCore {
 
38
struct PluginInfo;
 
39
}
 
40
 
 
41
namespace WebKit {
 
42
 
 
43
class PluginView;
 
44
class WebFrame;
 
45
 
 
46
class SimplePDFPlugin : public Plugin, protected WebCore::ScrollableArea {
 
47
public:
 
48
    static PassRefPtr<SimplePDFPlugin> create(WebFrame*);
 
49
    ~SimplePDFPlugin();
 
50
 
 
51
    static WebCore::PluginInfo pluginInfo();
 
52
 
 
53
    // In-process PDFViews don't support asynchronous initialization.
 
54
    virtual bool isBeingAsynchronouslyInitialized() const { return false; }
 
55
 
 
56
protected:
 
57
    explicit SimplePDFPlugin(WebFrame*);
 
58
 
 
59
    WebFrame* webFrame() const { return m_frame; }
 
60
 
 
61
    WebCore::IntSize size() const { return m_size; }
 
62
    void setSize(WebCore::IntSize size) { m_size = size; }
 
63
 
 
64
    RetainPtr<PDFDocument> pdfDocument() const { return m_pdfDocument; }
 
65
    void setPDFDocument(RetainPtr<PDFDocument> document) { m_pdfDocument = document; }
 
66
 
 
67
    WebCore::IntSize pdfDocumentSize() const { return m_pdfDocumentSize; }
 
68
    void setPDFDocumentSize(WebCore::IntSize size) { m_pdfDocumentSize = size; }
 
69
 
 
70
    const String& suggestedFilename() { return m_suggestedFilename; }
 
71
    
 
72
    RetainPtr<CFMutableDataRef> data() const { return m_data; }
 
73
 
 
74
    // Regular plug-ins don't need access to view, but we add scrollbars to embedding FrameView for proper event handling.
 
75
    PluginView* pluginView();
 
76
    const PluginView* pluginView() const;
 
77
 
 
78
    virtual void updateScrollbars();
 
79
    virtual PassRefPtr<WebCore::Scrollbar> createScrollbar(WebCore::ScrollbarOrientation);
 
80
    virtual void destroyScrollbar(WebCore::ScrollbarOrientation);
 
81
    virtual void addArchiveResource();
 
82
    virtual void pdfDocumentDidLoad();
 
83
    virtual void computePageBoxes();
 
84
    virtual void calculateSizes();
 
85
    void paintBackground(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect);
 
86
    void paintContent(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect);
 
87
    void paintControls(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect);
 
88
    
 
89
    void runScriptsInPDFDocument();
 
90
 
 
91
    // Plug-in methods
 
92
    virtual bool initialize(const Parameters&);
 
93
    virtual void destroy();
 
94
    virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRectInWindowCoordinates);
 
95
    virtual void updateControlTints(WebCore::GraphicsContext*);
 
96
    virtual PassRefPtr<ShareableBitmap> snapshot();
 
97
#if PLATFORM(MAC)
 
98
    virtual PlatformLayer* pluginLayer();
 
99
#endif
 
100
    virtual bool isTransparent();
 
101
    virtual bool wantsWheelEvents() OVERRIDE;
 
102
    virtual void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform);
 
103
    virtual void visibilityDidChange();
 
104
    virtual void frameDidFinishLoading(uint64_t requestID);
 
105
    virtual void frameDidFail(uint64_t requestID, bool wasCancelled);
 
106
    virtual void didEvaluateJavaScript(uint64_t requestID, const String& result);
 
107
    virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::KURL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName);
 
108
    virtual void streamDidReceiveData(uint64_t streamID, const char* bytes, int length);
 
109
    virtual void streamDidFinishLoading(uint64_t streamID);
 
110
    virtual void streamDidFail(uint64_t streamID, bool wasCancelled);
 
111
    virtual void manualStreamDidReceiveResponse(const WebCore::KURL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const WTF::String& mimeType, const WTF::String& headers, const String& suggestedFileName);
 
112
    virtual void manualStreamDidReceiveData(const char* bytes, int length);
 
113
    virtual void manualStreamDidFinishLoading();
 
114
    virtual void manualStreamDidFail(bool wasCancelled);
 
115
    virtual bool handleMouseEvent(const WebMouseEvent&);
 
116
    virtual bool handleWheelEvent(const WebWheelEvent&);
 
117
    virtual bool handleMouseEnterEvent(const WebMouseEvent&);
 
118
    virtual bool handleMouseLeaveEvent(const WebMouseEvent&);
 
119
    virtual bool handleContextMenuEvent(const WebMouseEvent&);
 
120
    virtual bool handleKeyboardEvent(const WebKeyboardEvent&);
 
121
    virtual void setFocus(bool);
 
122
    virtual NPObject* pluginScriptableNPObject();
 
123
#if PLATFORM(MAC)
 
124
    virtual void windowFocusChanged(bool);
 
125
    virtual void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates);
 
126
    virtual void windowVisibilityChanged(bool);
 
127
    virtual void contentsScaleFactorChanged(float);
 
128
    virtual uint64_t pluginComplexTextInputIdentifier() const;
 
129
    virtual void sendComplexTextInput(const String& textInput);
 
130
    virtual void setLayerHostingMode(LayerHostingMode) OVERRIDE;
 
131
#endif
 
132
 
 
133
    virtual void storageBlockingStateChanged(bool);
 
134
    virtual void privateBrowsingStateChanged(bool);
 
135
    virtual bool getFormValue(String& formValue);
 
136
    virtual bool handleScroll(WebCore::ScrollDirection, WebCore::ScrollGranularity);
 
137
    virtual WebCore::Scrollbar* horizontalScrollbar();
 
138
    virtual WebCore::Scrollbar* verticalScrollbar();
 
139
 
 
140
    virtual RetainPtr<PDFDocument> pdfDocumentForPrinting() const OVERRIDE { return m_pdfDocument; }
 
141
 
 
142
    // ScrollableArea methods.
 
143
    virtual WebCore::IntRect scrollCornerRect() const OVERRIDE;
 
144
    virtual WebCore::ScrollableArea* enclosingScrollableArea() const OVERRIDE;
 
145
    virtual WebCore::IntRect scrollableAreaBoundingBox() const OVERRIDE;
 
146
    virtual void setScrollOffset(const WebCore::IntPoint&) OVERRIDE;
 
147
    virtual int scrollSize(WebCore::ScrollbarOrientation) const OVERRIDE;
 
148
    virtual bool isActive() const OVERRIDE;
 
149
    virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&) OVERRIDE;
 
150
    virtual void invalidateScrollCornerRect(const WebCore::IntRect&) OVERRIDE;
 
151
    virtual bool isScrollCornerVisible() const OVERRIDE;
 
152
    virtual int scrollPosition(WebCore::Scrollbar*) const OVERRIDE;
 
153
    virtual WebCore::IntPoint scrollPosition() const OVERRIDE;
 
154
    virtual WebCore::IntPoint minimumScrollPosition() const OVERRIDE;
 
155
    virtual WebCore::IntPoint maximumScrollPosition() const OVERRIDE;
 
156
    virtual int visibleHeight() const OVERRIDE;
 
157
    virtual int visibleWidth() const OVERRIDE;
 
158
    virtual WebCore::IntSize contentsSize() const OVERRIDE;
 
159
    virtual WebCore::Scrollbar* horizontalScrollbar() const OVERRIDE { return m_horizontalScrollbar.get(); }
 
160
    virtual WebCore::Scrollbar* verticalScrollbar() const OVERRIDE { return m_verticalScrollbar.get(); }
 
161
    virtual bool scrollbarsCanBeActive() const OVERRIDE;
 
162
    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.
 
163
    virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate) OVERRIDE;
 
164
    
 
165
    virtual WebCore::IntRect convertFromScrollbarToContainingView(const WebCore::Scrollbar*, const WebCore::IntRect& scrollbarRect) const OVERRIDE;
 
166
    virtual WebCore::IntRect convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntRect& parentRect) const OVERRIDE;
 
167
    virtual WebCore::IntPoint convertFromScrollbarToContainingView(const WebCore::Scrollbar*, const WebCore::IntPoint& scrollbarPoint) const OVERRIDE;
 
168
    virtual WebCore::IntPoint convertFromContainingViewToScrollbar(const WebCore::Scrollbar*, const WebCore::IntPoint& parentPoint) const OVERRIDE;
 
169
    
 
170
    virtual bool isEditingCommandEnabled(const String&) OVERRIDE;
 
171
    virtual bool handleEditingCommand(const String&, const String&) OVERRIDE;
 
172
    virtual bool handlesPageScaleFactor() OVERRIDE;
 
173
 
 
174
    virtual bool shouldAllowScripting() OVERRIDE { return false; }
 
175
 
 
176
    WebCore::IntSize m_scrollOffset;
 
177
 
 
178
private:
 
179
 
 
180
    JSObjectRef makeJSPDFDoc(JSContextRef);
 
181
    static JSValueRef jsPDFDocPrint(JSContextRef, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
 
182
 
 
183
    WebCore::IntSize m_size;
 
184
 
 
185
    WebCore::KURL m_sourceURL;
 
186
 
 
187
    String m_suggestedFilename;
 
188
    RetainPtr<CFMutableDataRef> m_data;
 
189
 
 
190
    RetainPtr<PDFDocument> m_pdfDocument;
 
191
    Vector<WebCore::IntRect> m_pageBoxes;
 
192
    WebCore::IntSize m_pdfDocumentSize; // All pages, including gaps.
 
193
 
 
194
    RefPtr<WebCore::Scrollbar> m_horizontalScrollbar;
 
195
    RefPtr<WebCore::Scrollbar> m_verticalScrollbar;
 
196
 
 
197
    WebFrame* m_frame;
 
198
};
 
199
 
 
200
} // namespace WebKit
 
201
 
 
202
#endif // SimplePDFPlugin_h