Another EFL build fix.
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / efl / WebPageEfl.cpp
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
4  * Copyright (C) 2011 Igalia S.L.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25  * THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #include "config.h"
29 #include "WebPage.h"
30
31 #include "EditorState.h"
32 #include "EventHandler.h"
33 #include "NotImplemented.h"
34 #include "WebEvent.h"
35 #include "WindowsKeyboardCodes.h"
36 #include <WebCore/EflKeyboardUtilities.h>
37 #include <WebCore/FocusController.h>
38 #include <WebCore/Frame.h>
39 #include <WebCore/FrameView.h>
40 #include <WebCore/KeyboardEvent.h>
41 #include <WebCore/Page.h>
42 #include <WebCore/PlatformKeyboardEvent.h>
43 #include <WebCore/RenderThemeEfl.h>
44 #include <WebCore/Settings.h>
45
46 #if HAVE(ACCESSIBILITY)
47 #include "WebPageAccessibilityObject.h"
48 #endif
49
50 using namespace WebCore;
51
52 namespace WebKit {
53
54 void WebPage::platformInitialize()
55 {
56 #if HAVE(ACCESSIBILITY)
57     m_accessibilityObject = adoptGRef(webPageAccessibilityObjectNew(this));
58 #else
59     notImplemented();
60 #endif
61 }
62
63 #if HAVE(ACCESSIBILITY)
64 void WebPage::updateAccessibilityTree()
65 {
66     if (!m_accessibilityObject)
67         return;
68
69     webPageAccessibilityObjectRefresh(m_accessibilityObject.get());
70 }
71 #endif
72
73 void WebPage::platformPreferencesDidChange(const WebPreferencesStore&)
74 {
75     notImplemented();
76 }
77
78 static inline void scroll(Page* page, ScrollDirection direction, ScrollGranularity granularity)
79 {
80     page->focusController()->focusedOrMainFrame()->eventHandler()->scrollRecursively(direction, granularity);
81 }
82
83 bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent& keyboardEvent)
84 {
85     if (keyboardEvent.type() != WebEvent::KeyDown && keyboardEvent.type() != WebEvent::RawKeyDown)
86         return false;
87
88     switch (keyboardEvent.windowsVirtualKeyCode()) {
89     case VK_BACK:
90         if (keyboardEvent.shiftKey())
91             m_page->goForward();
92         else
93             m_page->goBack();
94         break;
95     case VK_SPACE:
96         scroll(m_page.get(), keyboardEvent.shiftKey() ? ScrollUp : ScrollDown, ScrollByPage);
97         break;
98     case VK_LEFT:
99         scroll(m_page.get(), ScrollLeft, ScrollByLine);
100         break;
101     case VK_RIGHT:
102         scroll(m_page.get(), ScrollRight, ScrollByLine);
103         break;
104     case VK_UP:
105         scroll(m_page.get(), ScrollUp, ScrollByLine);
106         break;
107     case VK_DOWN:
108         scroll(m_page.get(), ScrollDown, ScrollByLine);
109         break;
110     case VK_HOME:
111         scroll(m_page.get(), ScrollUp, ScrollByDocument);
112         break;
113     case VK_END:
114         scroll(m_page.get(), ScrollDown, ScrollByDocument);
115         break;
116     case VK_PRIOR:
117         scroll(m_page.get(), ScrollUp, ScrollByPage);
118         break;
119     case VK_NEXT:
120         scroll(m_page.get(), ScrollDown, ScrollByPage);
121         break;
122     default:
123         return false;
124     }
125
126     return true;
127 }
128
129 bool WebPage::platformHasLocalDataForURL(const KURL&)
130 {
131     notImplemented();
132     return false;
133 }
134
135 String WebPage::cachedResponseMIMETypeForURL(const KURL&)
136 {
137     notImplemented();
138     return String();
139 }
140
141 bool WebPage::platformCanHandleRequest(const ResourceRequest&)
142 {
143     notImplemented();
144     return true;
145 }
146
147 String WebPage::cachedSuggestedFilenameForURL(const KURL&)
148 {
149     notImplemented();
150     return String();
151 }
152
153 PassRefPtr<SharedBuffer> WebPage::cachedResponseDataForURL(const KURL&)
154 {
155     notImplemented();
156     return 0;
157 }
158
159 const char* WebPage::interpretKeyEvent(const KeyboardEvent* event)
160 {
161     ASSERT(event->type() == eventNames().keydownEvent || event->type() == eventNames().keypressEvent);
162
163     if (event->type() == eventNames().keydownEvent)
164         return getKeyDownCommandName(event);
165
166     return getKeyPressCommandName(event);
167 }
168
169 void WebPage::setThemePath(const String& themePath)
170 {
171     WebCore::RenderThemeEfl* theme = static_cast<WebCore::RenderThemeEfl*>(m_page->theme());
172     theme->setThemePath(themePath);
173 }
174
175 static Frame* targetFrameForEditing(WebPage* page)
176 {
177     Frame* frame = page->corePage()->focusController()->focusedOrMainFrame();
178     if (!frame)
179         return 0;
180
181     Editor* editor = frame->editor();
182     if (!editor->canEdit())
183         return 0;
184
185     if (editor->hasComposition()) {
186         // We should verify the parent node of this IME composition node are
187         // editable because JavaScript may delete a parent node of the composition
188         // node. In this case, WebKit crashes while deleting texts from the parent
189         // node, which doesn't exist any longer.
190         if (PassRefPtr<Range> range = editor->compositionRange()) {
191             Node* node = range->startContainer();
192             if (!node || !node->isContentEditable())
193                 return 0;
194         }
195     }
196
197     return frame;
198 }
199
200 void WebPage::confirmComposition(const String& compositionString)
201 {
202     Frame* targetFrame = targetFrameForEditing(this);
203     if (!targetFrame)
204         return;
205
206     targetFrame->editor()->confirmComposition(compositionString);
207 }
208
209 void WebPage::setComposition(const String& compositionString, const Vector<WebCore::CompositionUnderline>& underlines, uint64_t cursorPosition)
210 {
211     Frame* targetFrame = targetFrameForEditing(this);
212     if (!targetFrame)
213         return;
214
215     targetFrame->editor()->setComposition(compositionString, underlines, cursorPosition, 0);
216 }
217
218 void WebPage::cancelComposition()
219 {
220     Frame* frame = m_page->focusController()->focusedOrMainFrame();
221     if (!frame)
222         return;
223
224     frame->editor()->cancelComposition();
225 }
226
227 } // namespace WebKit