9688c4cd472de919f043deb5ce279df0052a663e
[WebKit-https.git] / Tools / WebKitTestRunner / PlatformWebView.h
1 /*
2  * Copyright (C) 2010 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 PlatformWebView_h
27 #define PlatformWebView_h
28
29 #include "ViewOptions.h"
30 #include <WebKit/WKRetainPtr.h>
31
32 #if PLATFORM(COCOA)
33 #include <WebKit/WKFoundation.h>
34 OBJC_CLASS NSView;
35 OBJC_CLASS UIView;
36 OBJC_CLASS WKWebView;
37 OBJC_CLASS WKWebViewConfiguration;
38 OBJC_CLASS WebKitTestRunnerWindow;
39
40 #if WK_API_ENABLED
41 typedef WKWebView *PlatformWKView;
42 #else
43 typedef NSView *PlatformWKView;
44 #endif
45 typedef WebKitTestRunnerWindow *PlatformWindow;
46 #elif defined(BUILDING_GTK__)
47 typedef struct _GtkWidget GtkWidget;
48 typedef WKViewRef PlatformWKView;
49 typedef GtkWidget* PlatformWindow;
50 #elif PLATFORM(EFL)
51 typedef Evas_Object* PlatformWKView;
52 typedef Ecore_Evas* PlatformWindow;
53 #endif
54
55 namespace WTR {
56
57 class PlatformWebView {
58 public:
59 #if PLATFORM(COCOA)
60     PlatformWebView(WKWebViewConfiguration*, const ViewOptions&);
61 #else
62     PlatformWebView(WKPageConfigurationRef, const ViewOptions&);
63 #endif
64     ~PlatformWebView();
65
66     WKPageRef page();
67     PlatformWKView platformView() { return m_view; }
68     PlatformWindow platformWindow() { return m_window; }
69     void resizeTo(unsigned width, unsigned height);
70     void focus();
71
72     WKRect windowFrame();
73     void setWindowFrame(WKRect);
74
75     void didInitializeClients();
76     
77     void addChromeInputField();
78     void removeChromeInputField();
79     void makeWebViewFirstResponder();
80     void setWindowIsKey(bool isKey) { m_windowIsKey = isKey; }
81     bool windowIsKey() const { return m_windowIsKey; }
82
83     bool viewSupportsOptions(const ViewOptions&) const;
84
85     WKRetainPtr<WKImageRef> windowSnapshotImage();
86     const ViewOptions& options() const { return m_options; }
87
88     void changeWindowScaleIfNeeded(float newScale);
89     void setNavigationGesturesEnabled(bool);
90
91 #if PLATFORM(GTK)
92     void dismissAllPopupMenus();
93 #endif
94
95 private:
96     void forceWindowFramesChanged();
97
98     PlatformWKView m_view;
99     PlatformWindow m_window;
100     bool m_windowIsKey;
101     const ViewOptions m_options;
102
103 #if PLATFORM(EFL)
104     bool m_usingFixedLayout;
105 #endif
106 };
107
108 } // namespace WTR
109
110 #endif // PlatformWebView_h