2
* Copyright (C) 2012 Samsung Electronics. All rights reserved.
3
* Copyright (C) 2012 Intel Corporation. All rights reserved.
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
14
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
15
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24
* THE POSSIBILITY OF SUCH DAMAGE.
28
#include "PageUIClientEfl.h"
30
#include "EwkViewImpl.h"
31
#include "WKAPICast.h"
34
#include "ewk_file_chooser_request_private.h"
35
#include "ewk_window_features_private.h"
36
#include <Ecore_Evas.h>
37
#include <WebCore/Color.h>
39
using namespace EwkViewCallbacks;
43
static inline PageUIClientEfl* toPageUIClientEfl(const void* clientInfo)
45
return static_cast<PageUIClientEfl*>(const_cast<void*>(clientInfo));
48
void PageUIClientEfl::closePage(WKPageRef, const void* clientInfo)
50
toPageUIClientEfl(clientInfo)->m_viewImpl->closePage();
53
WKPageRef PageUIClientEfl::createNewPage(WKPageRef, WKURLRequestRef, WKDictionaryRef wkWindowFeatures, WKEventModifiers, WKEventMouseButton, const void* clientInfo)
55
return toPageUIClientEfl(clientInfo)->m_viewImpl->createNewPage(toImpl(wkWindowFeatures));
58
void PageUIClientEfl::runJavaScriptAlert(WKPageRef, WKStringRef alertText, WKFrameRef, const void* clientInfo)
60
toPageUIClientEfl(clientInfo)->m_viewImpl->requestJSAlertPopup(WKEinaSharedString(alertText));
63
bool PageUIClientEfl::runJavaScriptConfirm(WKPageRef, WKStringRef message, WKFrameRef, const void* clientInfo)
65
return toPageUIClientEfl(clientInfo)->m_viewImpl->requestJSConfirmPopup(WKEinaSharedString(message));
68
WKStringRef PageUIClientEfl::runJavaScriptPrompt(WKPageRef, WKStringRef message, WKStringRef defaultValue, WKFrameRef, const void* clientInfo)
70
WKEinaSharedString value = toPageUIClientEfl(clientInfo)->m_viewImpl->requestJSPromptPopup(WKEinaSharedString(message), WKEinaSharedString(defaultValue));
71
return value ? WKStringCreateWithUTF8CString(value) : 0;
74
bool PageUIClientEfl::toolbarsAreVisible(WKPageRef, const void* clientInfo)
76
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
78
return features->toolbarVisible();
81
void PageUIClientEfl::setToolbarsAreVisible(WKPageRef, bool toolbarVisible, const void* clientInfo)
83
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
85
features->setToolbarVisible(toolbarVisible);
88
bool PageUIClientEfl::menuBarIsVisible(WKPageRef, const void* clientInfo)
90
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
92
return features->menuBarVisible();
95
void PageUIClientEfl::setMenuBarIsVisible(WKPageRef, bool menuBarVisible, const void* clientInfo)
97
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
99
features->setMenuBarVisible(menuBarVisible);
102
bool PageUIClientEfl::statusBarIsVisible(WKPageRef, const void* clientInfo)
104
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
106
return features->statusBarVisible();
109
void PageUIClientEfl::setStatusBarIsVisible(WKPageRef, bool statusBarVisible, const void* clientInfo)
111
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
113
features->setStatusBarVisible(statusBarVisible);
116
bool PageUIClientEfl::isResizable(WKPageRef, const void* clientInfo)
118
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
120
return features->resizable();
123
void PageUIClientEfl::setIsResizable(WKPageRef, bool resizable, const void* clientInfo)
125
EwkWindowFeatures* features = toPageUIClientEfl(clientInfo)->m_viewImpl->windowFeatures();
127
features->setResizable(resizable);
130
#if ENABLE(INPUT_TYPE_COLOR)
131
void PageUIClientEfl::showColorPicker(WKPageRef, WKStringRef initialColor, WKColorPickerResultListenerRef listener, const void* clientInfo)
133
PageUIClientEfl* pageUIClient = toPageUIClientEfl(clientInfo);
134
WebCore::Color color = WebCore::Color(WebKit::toWTFString(initialColor));
135
pageUIClient->m_viewImpl->requestColorPicker(listener, color);
138
void PageUIClientEfl::hideColorPicker(WKPageRef, const void* clientInfo)
140
PageUIClientEfl* pageUIClient = toPageUIClientEfl(clientInfo);
141
pageUIClient->m_viewImpl->dismissColorPicker();
145
#if ENABLE(SQL_DATABASE)
146
unsigned long long PageUIClientEfl::exceededDatabaseQuota(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKStringRef databaseName, WKStringRef displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage, const void* clientInfo)
148
EwkViewImpl* viewImpl = toPageUIClientEfl(clientInfo)->m_viewImpl;
149
return viewImpl->informDatabaseQuotaReached(toImpl(databaseName)->string(), toImpl(displayName)->string(), currentQuota, currentOriginUsage, currentDatabaseUsage, expectedUsage);
153
void PageUIClientEfl::focus(WKPageRef, const void* clientInfo)
155
evas_object_focus_set(toPageUIClientEfl(clientInfo)->m_viewImpl->view(), true);
158
void PageUIClientEfl::unfocus(WKPageRef, const void* clientInfo)
160
evas_object_focus_set(toPageUIClientEfl(clientInfo)->m_viewImpl->view(), false);
163
void PageUIClientEfl::takeFocus(WKPageRef, WKFocusDirection, const void* clientInfo)
165
// FIXME: this is only a partial implementation.
166
evas_object_focus_set(toPageUIClientEfl(clientInfo)->m_viewImpl->view(), false);
169
WKRect PageUIClientEfl::getWindowFrame(WKPageRef, const void* clientInfo)
171
return toPageUIClientEfl(clientInfo)->m_viewImpl->windowGeometry();
174
void PageUIClientEfl::setWindowFrame(WKPageRef, WKRect frame, const void* clientInfo)
176
toPageUIClientEfl(clientInfo)->m_viewImpl->setWindowGeometry(frame);
179
void PageUIClientEfl::runOpenPanel(WKPageRef, WKFrameRef, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void* clientInfo)
181
EwkViewImpl* viewImpl = toPageUIClientEfl(clientInfo)->m_viewImpl;
182
RefPtr<EwkFileChooserRequest> fileChooserRequest = EwkFileChooserRequest::create(toImpl(parameters), toImpl(listener));
183
viewImpl->smartCallback<FileChooserRequest>().call(fileChooserRequest.get());
186
PageUIClientEfl::PageUIClientEfl(EwkViewImpl* viewImpl)
187
: m_viewImpl(viewImpl)
189
WKPageRef pageRef = m_viewImpl->wkPage();
192
WKPageUIClient uiClient;
193
memset(&uiClient, 0, sizeof(WKPageUIClient));
194
uiClient.version = kWKPageUIClientCurrentVersion;
195
uiClient.clientInfo = this;
196
uiClient.close = closePage;
197
uiClient.createNewPage = createNewPage;
198
uiClient.runJavaScriptAlert = runJavaScriptAlert;
199
uiClient.runJavaScriptConfirm = runJavaScriptConfirm;
200
uiClient.runJavaScriptPrompt = runJavaScriptPrompt;
201
uiClient.toolbarsAreVisible = toolbarsAreVisible;
202
uiClient.setToolbarsAreVisible = setToolbarsAreVisible;
203
uiClient.menuBarIsVisible = menuBarIsVisible;
204
uiClient.setMenuBarIsVisible = setMenuBarIsVisible;
205
uiClient.statusBarIsVisible = statusBarIsVisible;
206
uiClient.setStatusBarIsVisible = setStatusBarIsVisible;
207
uiClient.isResizable = isResizable;
208
uiClient.setIsResizable = setIsResizable;
209
uiClient.takeFocus = takeFocus;
210
uiClient.focus = focus;
211
uiClient.unfocus = unfocus;
212
uiClient.getWindowFrame = getWindowFrame;
213
uiClient.setWindowFrame = setWindowFrame;
214
uiClient.runOpenPanel = runOpenPanel;
215
#if ENABLE(SQL_DATABASE)
216
uiClient.exceededDatabaseQuota = exceededDatabaseQuota;
219
#if ENABLE(INPUT_TYPE_COLOR)
220
uiClient.showColorPicker = showColorPicker;
221
uiClient.hideColorPicker = hideColorPicker;
224
WKPageSetPageUIClient(pageRef, &uiClient);
227
} // namespace WebKit