blob: 85dd40ed59881205e66146568ffc1ea48e110190 [file] [log] [blame]
/*
* Copyright (C) 2012 Igalia S.L.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "config.h"
#include "WebKitPrivate.h"
#include "APIError.h"
#include "WebEvent.h"
#include "WebKitError.h"
#if PLATFORM(GTK)
#include <gdk/gdk.h>
#elif PLATFORM(WPE)
#include <wpe/wpe.h>
#endif
#if PLATFORM(GTK)
unsigned toPlatformModifiers(OptionSet<WebKit::WebEvent::Modifier> wkModifiers)
{
unsigned modifiers = 0;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::ShiftKey))
modifiers |= GDK_SHIFT_MASK;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::ControlKey))
modifiers |= GDK_CONTROL_MASK;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::AltKey))
modifiers |= GDK_MOD1_MASK;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::MetaKey))
modifiers |= GDK_META_MASK;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::CapsLockKey))
modifiers |= GDK_LOCK_MASK;
return modifiers;
}
#elif PLATFORM(WPE)
unsigned toPlatformModifiers(OptionSet<WebKit::WebEvent::Modifier> wkModifiers)
{
unsigned modifiers = 0;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::ShiftKey))
modifiers |= wpe_input_keyboard_modifier_shift;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::ControlKey))
modifiers |= wpe_input_keyboard_modifier_control;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::AltKey))
modifiers |= wpe_input_keyboard_modifier_alt;
if (wkModifiers.contains(WebKit::WebEvent::Modifier::MetaKey))
modifiers |= wpe_input_keyboard_modifier_meta;
return modifiers;
}
#endif
WebKitNavigationType toWebKitNavigationType(WebCore::NavigationType type)
{
switch (type) {
case WebCore::NavigationType::LinkClicked:
return WEBKIT_NAVIGATION_TYPE_LINK_CLICKED;
case WebCore::NavigationType::FormSubmitted:
return WEBKIT_NAVIGATION_TYPE_FORM_SUBMITTED;
case WebCore::NavigationType::BackForward:
return WEBKIT_NAVIGATION_TYPE_BACK_FORWARD;
case WebCore::NavigationType::Reload:
return WEBKIT_NAVIGATION_TYPE_RELOAD;
case WebCore::NavigationType::FormResubmitted:
return WEBKIT_NAVIGATION_TYPE_FORM_RESUBMITTED;
case WebCore::NavigationType::Other:
return WEBKIT_NAVIGATION_TYPE_OTHER;
default:
ASSERT_NOT_REACHED();
return WEBKIT_NAVIGATION_TYPE_OTHER;
}
}
unsigned toWebKitMouseButton(WebKit::WebMouseEvent::Button button)
{
switch (button) {
case WebKit::WebMouseEvent::Button::NoButton:
return 0;
case WebKit::WebMouseEvent::Button::LeftButton:
return 1;
case WebKit::WebMouseEvent::Button::MiddleButton:
return 2;
case WebKit::WebMouseEvent::Button::RightButton:
return 3;
}
ASSERT_NOT_REACHED();
return 0;
}
unsigned toWebKitError(unsigned webCoreError)
{
switch (webCoreError) {
case API::Error::Network::Cancelled:
return WEBKIT_NETWORK_ERROR_CANCELLED;
case API::Error::Network::FileDoesNotExist:
return WEBKIT_NETWORK_ERROR_FILE_DOES_NOT_EXIST;
case API::Error::Policy::CannotShowMIMEType:
return WEBKIT_POLICY_ERROR_CANNOT_SHOW_MIME_TYPE;
case API::Error::Policy::CannotShowURL:
return WEBKIT_POLICY_ERROR_CANNOT_SHOW_URI;
case API::Error::Policy::FrameLoadInterruptedByPolicyChange:
return WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE;
case API::Error::Policy::CannotUseRestrictedPort:
return WEBKIT_POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT;
case API::Error::Plugin::CannotFindPlugIn:
return WEBKIT_PLUGIN_ERROR_CANNOT_FIND_PLUGIN;
case API::Error::Plugin::CannotLoadPlugIn:
return WEBKIT_PLUGIN_ERROR_CANNOT_LOAD_PLUGIN;
case API::Error::Plugin::JavaUnavailable:
return WEBKIT_PLUGIN_ERROR_JAVA_UNAVAILABLE;
case API::Error::Plugin::PlugInCancelledConnection:
return WEBKIT_PLUGIN_ERROR_CONNECTION_CANCELLED;
case API::Error::Plugin::PlugInWillHandleLoad:
return WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD;
case API::Error::Download::Transport:
return WEBKIT_DOWNLOAD_ERROR_NETWORK;
case API::Error::Download::CancelledByUser:
return WEBKIT_DOWNLOAD_ERROR_CANCELLED_BY_USER;
case API::Error::Download::Destination:
return WEBKIT_DOWNLOAD_ERROR_DESTINATION;
#if PLATFORM(GTK)
case API::Error::Print::Generic:
return WEBKIT_PRINT_ERROR_GENERAL;
case API::Error::Print::PrinterNotFound:
return WEBKIT_PRINT_ERROR_PRINTER_NOT_FOUND;
case API::Error::Print::InvalidPageRange:
return WEBKIT_PRINT_ERROR_INVALID_PAGE_RANGE;
#endif
default:
// This may be a user app defined error, which needs to be passed as-is.
return webCoreError;
}
}
unsigned toWebCoreError(unsigned webKitError)
{
switch (webKitError) {
case WEBKIT_NETWORK_ERROR_CANCELLED:
return API::Error::Network::Cancelled;
case WEBKIT_NETWORK_ERROR_FILE_DOES_NOT_EXIST:
return API::Error::Network::FileDoesNotExist;
case WEBKIT_POLICY_ERROR_CANNOT_SHOW_MIME_TYPE:
return API::Error::Policy::CannotShowMIMEType;
case WEBKIT_POLICY_ERROR_CANNOT_SHOW_URI:
return API::Error::Policy::CannotShowURL;
case WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE:
return API::Error::Policy::FrameLoadInterruptedByPolicyChange;
case WEBKIT_POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT:
return API::Error::Policy::CannotUseRestrictedPort;
case WEBKIT_PLUGIN_ERROR_CANNOT_FIND_PLUGIN:
return API::Error::Plugin::CannotFindPlugIn;
case WEBKIT_PLUGIN_ERROR_CANNOT_LOAD_PLUGIN:
return API::Error::Plugin::CannotLoadPlugIn;
case WEBKIT_PLUGIN_ERROR_JAVA_UNAVAILABLE:
return API::Error::Plugin::JavaUnavailable;
case WEBKIT_PLUGIN_ERROR_CONNECTION_CANCELLED:
return API::Error::Plugin::PlugInCancelledConnection;
case WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD:
return API::Error::Plugin::PlugInWillHandleLoad;
case WEBKIT_DOWNLOAD_ERROR_NETWORK:
return API::Error::Download::Transport;
case WEBKIT_DOWNLOAD_ERROR_CANCELLED_BY_USER:
return API::Error::Download::CancelledByUser;
case WEBKIT_DOWNLOAD_ERROR_DESTINATION:
return API::Error::Download::Destination;
#if PLATFORM(GTK)
case WEBKIT_PRINT_ERROR_GENERAL:
return API::Error::Print::Generic;
case WEBKIT_PRINT_ERROR_PRINTER_NOT_FOUND:
return API::Error::Print::PrinterNotFound;
case WEBKIT_PRINT_ERROR_INVALID_PAGE_RANGE:
return API::Error::Print::InvalidPageRange;
#endif
default:
// This may be a user app defined error, which needs to be passed as-is.
return webKitError;
}
}