WebKitUIClient.cpp [plain text]
#include "config.h"
#include "WebKitUIClient.h"
#include "WebKitFileChooserRequestPrivate.h"
#include "WebKitPrivate.h"
#include "WebKitWebViewBasePrivate.h"
#include "WebKitWebViewPrivate.h"
#include "WebKitWindowPropertiesPrivate.h"
#include "WebPageProxy.h"
#include <WebCore/GtkUtilities.h>
#include <wtf/gobject/GRefPtr.h>
using namespace WebKit;
static WKPageRef createNewPage(WKPageRef page, WKURLRequestRef, WKDictionaryRef wkWindowFeatures, WKEventModifiers, WKEventMouseButton, const void* clientInfo)
{
return webkitWebViewCreateNewPage(WEBKIT_WEB_VIEW(clientInfo), wkWindowFeatures);
}
static void showPage(WKPageRef page, const void* clientInfo)
{
webkitWebViewReadyToShowPage(WEBKIT_WEB_VIEW(clientInfo));
}
static void closePage(WKPageRef page, const void* clientInfo)
{
webkitWebViewClosePage(WEBKIT_WEB_VIEW(clientInfo));
}
static void runJavaScriptAlert(WKPageRef page, WKStringRef message, WKFrameRef, const void* clientInfo)
{
webkitWebViewRunJavaScriptAlert(WEBKIT_WEB_VIEW(clientInfo), toImpl(message)->string().utf8());
}
static bool runJavaScriptConfirm(WKPageRef page, WKStringRef message, WKFrameRef, const void* clientInfo)
{
return webkitWebViewRunJavaScriptConfirm(WEBKIT_WEB_VIEW(clientInfo), toImpl(message)->string().utf8());
}
static WKStringRef runJavaScriptPrompt(WKPageRef page, WKStringRef message, WKStringRef defaultValue, WKFrameRef, const void* clientInfo)
{
return webkitWebViewRunJavaScriptPrompt(WEBKIT_WEB_VIEW(clientInfo), toImpl(message)->string().utf8(),
toImpl(defaultValue)->string().utf8());
}
static bool toolbarsAreVisible(WKPageRef page, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
return webkit_window_properties_get_toolbar_visible(windowProperties);
}
static void setToolbarsAreVisible(WKPageRef page, bool toolbarsVisible, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
webkitWindowPropertiesSetToolbarVisible(windowProperties, toolbarsVisible);
}
static bool menuBarIsVisible(WKPageRef page, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
return webkit_window_properties_get_menubar_visible(windowProperties);
}
static void setMenuBarIsVisible(WKPageRef page, bool menuBarVisible, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
webkitWindowPropertiesSetMenubarVisible(windowProperties, menuBarVisible);
}
static bool statusBarIsVisible(WKPageRef page, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
return webkit_window_properties_get_statusbar_visible(windowProperties);
}
static void setStatusBarIsVisible(WKPageRef page, bool statusBarVisible, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
webkitWindowPropertiesSetStatusbarVisible(windowProperties, statusBarVisible);
}
static bool isResizable(WKPageRef page, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
return webkit_window_properties_get_resizable(windowProperties);
}
static void setIsResizable(WKPageRef page, bool resizable, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
webkitWindowPropertiesSetResizable(windowProperties, resizable);
}
static WKRect getWindowFrame(WKPageRef page, const void* clientInfo)
{
GdkRectangle geometry = { 0, 0, 0, 0 };
GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(clientInfo));
if (WebCore::widgetIsOnscreenToplevelWindow(window) && gtk_widget_get_visible(window)) {
gtk_window_get_position(GTK_WINDOW(window), &geometry.x, &geometry.y);
gtk_window_get_size(GTK_WINDOW(window), &geometry.width, &geometry.height);
}
return WKRectMake(geometry.x, geometry.y, geometry.width, geometry.height);
}
static void setWindowFrame(WKPageRef page, WKRect frame, const void* clientInfo)
{
WebKitWindowProperties* windowProperties = webkit_web_view_get_window_properties(WEBKIT_WEB_VIEW(clientInfo));
GdkRectangle geometry = { frame.origin.x, frame.origin.y, frame.size.width, frame.size.height };
webkitWindowPropertiesSetGeometry(windowProperties, &geometry);
}
static void mouseDidMoveOverElement(WKPageRef page, WKHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef userData, const void* clientInfo)
{
webkitWebViewMouseTargetChanged(WEBKIT_WEB_VIEW(clientInfo), hitTestResult, wkEventModifiersToGdkModifiers(modifiers));
}
static void printFrame(WKPageRef page, WKFrameRef frame, const void*)
{
webkitWebViewPrintFrame(WEBKIT_WEB_VIEW(toImpl(page)->viewWidget()), frame);
}
static void runOpenPanel(WKPageRef page, WKFrameRef frame, WKOpenPanelParametersRef parameters, WKOpenPanelResultListenerRef listener, const void *clientInfo)
{
GRefPtr<WebKitFileChooserRequest> request = adoptGRef(webkitFileChooserRequestCreate(parameters, listener));
webkitWebViewRunFileChooserRequest(WEBKIT_WEB_VIEW(clientInfo), request.get());
}
void attachUIClientToView(WebKitWebView* webView)
{
WKPageUIClient wkUIClient = {
kWKPageUIClientCurrentVersion,
webView, 0, showPage,
closePage,
0, 0, 0, runJavaScriptAlert,
runJavaScriptConfirm,
runJavaScriptPrompt,
0, 0, 0, 0, 0, toolbarsAreVisible,
setToolbarsAreVisible,
menuBarIsVisible,
setMenuBarIsVisible,
statusBarIsVisible,
setStatusBarIsVisible,
isResizable,
setIsResizable,
getWindowFrame,
setWindowFrame,
0, 0, 0, 0, runOpenPanel,
0, 0, 0, 0, 0, printFrame,
0, 0, 0, 0, createNewPage,
mouseDidMoveOverElement,
0, };
WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)));
WKPageSetPageUIClient(wkPage, &wkUIClient);
}