hs20-osu-client: Enable webkit2 support
This is my mostly-ignorant attempt to port hs20-osu-client to webkit2 API. Signed-off-by: Ben Greear <greearb@candelatech.com>
This commit is contained in:
parent
466e48dcd7
commit
b4b1b122e8
2 changed files with 93 additions and 5 deletions
|
@ -30,8 +30,17 @@ CFLAGS += -I../../src
|
||||||
|
|
||||||
ifndef CONFIG_NO_BROWSER
|
ifndef CONFIG_NO_BROWSER
|
||||||
ifndef CONFIG_BROWSER_SYSTEM
|
ifndef CONFIG_BROWSER_SYSTEM
|
||||||
|
TEST_WK := $(shell pkg-config --silence-errors --cflags webkitgtk-3.0)
|
||||||
|
ifeq ($(TEST_WK),)
|
||||||
|
# Try webkit2
|
||||||
|
GTKCFLAGS := $(shell pkg-config --cflags gtk+-3.0 webkit2gtk-4.0)
|
||||||
|
GTKLIBS := $(shell pkg-config --libs gtk+-3.0 webkit2gtk-4.0)
|
||||||
|
CFLAGS += -DUSE_WEBKIT2
|
||||||
|
else
|
||||||
GTKCFLAGS := $(shell pkg-config --cflags gtk+-3.0 webkitgtk-3.0)
|
GTKCFLAGS := $(shell pkg-config --cflags gtk+-3.0 webkitgtk-3.0)
|
||||||
GTKLIBS := $(shell pkg-config --libs gtk+-3.0 webkitgtk-3.0)
|
GTKLIBS := $(shell pkg-config --libs gtk+-3.0 webkitgtk-3.0)
|
||||||
|
endif
|
||||||
|
|
||||||
CFLAGS += $(GTKCFLAGS)
|
CFLAGS += $(GTKCFLAGS)
|
||||||
LIBS += $(GTKLIBS)
|
LIBS += $(GTKLIBS)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -7,7 +7,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
#include <webkit2/webkit2.h>
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
#include <webkit/webkit.h>
|
#include <webkit/webkit.h>
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "browser.h"
|
#include "browser.h"
|
||||||
|
@ -53,7 +57,11 @@ static void browser_update_title(struct browser_context *ctx)
|
||||||
static void view_cb_notify_progress(WebKitWebView *view, GParamSpec *pspec,
|
static void view_cb_notify_progress(WebKitWebView *view, GParamSpec *pspec,
|
||||||
struct browser_context *ctx)
|
struct browser_context *ctx)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
ctx->progress = 100 * webkit_web_view_get_estimated_load_progress(view);
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
ctx->progress = 100 * webkit_web_view_get_progress(view);
|
ctx->progress = 100 * webkit_web_view_get_progress(view);
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s progress=%d", __func__,
|
wpa_printf(MSG_DEBUG, "BROWSER:%s progress=%d", __func__,
|
||||||
ctx->progress);
|
ctx->progress);
|
||||||
browser_update_title(ctx);
|
browser_update_title(ctx);
|
||||||
|
@ -63,23 +71,43 @@ static void view_cb_notify_progress(WebKitWebView *view, GParamSpec *pspec,
|
||||||
static void view_cb_notify_load_status(WebKitWebView *view, GParamSpec *pspec,
|
static void view_cb_notify_load_status(WebKitWebView *view, GParamSpec *pspec,
|
||||||
struct browser_context *ctx)
|
struct browser_context *ctx)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
int status = webkit_web_view_get_estimated_load_progress(view);
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
int status = webkit_web_view_get_load_status(view);
|
int status = webkit_web_view_get_load_status(view);
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s load-status=%d uri=%s",
|
wpa_printf(MSG_DEBUG, "BROWSER:%s load-status=%d uri=%s",
|
||||||
__func__, status, webkit_web_view_get_uri(view));
|
__func__, status, webkit_web_view_get_uri(view));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void view_cb_resource_request_starting(WebKitWebView *view,
|
static void view_cb_resource_request_starting(WebKitWebView *view,
|
||||||
|
#ifndef USE_WEBKIT2
|
||||||
WebKitWebFrame *frame,
|
WebKitWebFrame *frame,
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
WebKitWebResource *res,
|
WebKitWebResource *res,
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
WebKitURIRequest *req,
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
WebKitNetworkRequest *req,
|
WebKitNetworkRequest *req,
|
||||||
WebKitNetworkResponse *resp,
|
WebKitNetworkResponse *resp,
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
struct browser_context *ctx)
|
struct browser_context *ctx)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
const gchar *uri = webkit_uri_request_get_uri(req);
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
const gchar *uri = webkit_network_request_get_uri(req);
|
const gchar *uri = webkit_network_request_get_uri(req);
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s uri=%s", __func__, uri);
|
wpa_printf(MSG_DEBUG, "BROWSER:%s uri=%s", __func__, uri);
|
||||||
if (g_str_has_suffix(uri, "/favicon.ico"))
|
if (g_str_has_suffix(uri, "/favicon.ico")) {
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
webkit_uri_request_set_uri(req, "about:blank");
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
webkit_network_request_set_uri(req, "about:blank");
|
webkit_network_request_set_uri(req, "about:blank");
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
|
}
|
||||||
|
|
||||||
if (g_str_has_prefix(uri, "osu://")) {
|
if (g_str_has_prefix(uri, "osu://")) {
|
||||||
ctx->success = atoi(uri + 6);
|
ctx->success = atoi(uri + 6);
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
|
@ -96,21 +124,49 @@ static void view_cb_resource_request_starting(WebKitWebView *view,
|
||||||
|
|
||||||
|
|
||||||
static gboolean view_cb_mime_type_policy_decision(
|
static gboolean view_cb_mime_type_policy_decision(
|
||||||
WebKitWebView *view, WebKitWebFrame *frame, WebKitNetworkRequest *req,
|
WebKitWebView *view,
|
||||||
|
#ifndef USE_WEBKIT2
|
||||||
|
WebKitWebFrame *frame, WebKitNetworkRequest *req,
|
||||||
gchar *mime, WebKitWebPolicyDecision *policy,
|
gchar *mime, WebKitWebPolicyDecision *policy,
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
|
WebKitPolicyDecision *policy,
|
||||||
|
WebKitPolicyDecisionType type,
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
struct browser_context *ctx)
|
struct browser_context *ctx)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
wpa_printf(MSG_DEBUG, "BROWSER:%s type=%d", __func__, type);
|
||||||
|
switch (type) {
|
||||||
|
case WEBKIT_POLICY_DECISION_TYPE_RESPONSE: {
|
||||||
|
/* This function makes webkit send a download signal for all
|
||||||
|
* unknown mime types. */
|
||||||
|
WebKitResponsePolicyDecision *response;
|
||||||
|
|
||||||
|
response = WEBKIT_RESPONSE_POLICY_DECISION(policy);
|
||||||
|
if (!webkit_response_policy_decision_is_mime_type_supported(
|
||||||
|
response)) {
|
||||||
|
webkit_policy_decision_download(policy);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s mime=%s", __func__, mime);
|
wpa_printf(MSG_DEBUG, "BROWSER:%s mime=%s", __func__, mime);
|
||||||
|
|
||||||
if (!webkit_web_view_can_show_mime_type(view, mime)) {
|
if (!webkit_web_view_can_show_mime_type(view, mime)) {
|
||||||
webkit_web_policy_decision_download(policy);
|
webkit_web_policy_decision_download(policy);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef USE_WEBKIT2
|
||||||
static gboolean view_cb_download_requested(WebKitWebView *view,
|
static gboolean view_cb_download_requested(WebKitWebView *view,
|
||||||
WebKitDownload *dl,
|
WebKitDownload *dl,
|
||||||
struct browser_context *ctx)
|
struct browser_context *ctx)
|
||||||
|
@ -120,6 +176,7 @@ static gboolean view_cb_download_requested(WebKitWebView *view,
|
||||||
wpa_printf(MSG_DEBUG, "BROWSER:%s uri=%s", __func__, uri);
|
wpa_printf(MSG_DEBUG, "BROWSER:%s uri=%s", __func__, uri);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
|
|
||||||
|
|
||||||
static void view_cb_hovering_over_link(WebKitWebView *view, gchar *title,
|
static void view_cb_hovering_over_link(WebKitWebView *view, gchar *title,
|
||||||
|
@ -137,6 +194,7 @@ static void view_cb_hovering_over_link(WebKitWebView *view, gchar *title,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef USE_WEBKIT2
|
||||||
static void view_cb_title_changed(WebKitWebView *view, WebKitWebFrame *frame,
|
static void view_cb_title_changed(WebKitWebView *view, WebKitWebFrame *frame,
|
||||||
const char *title,
|
const char *title,
|
||||||
struct browser_context *ctx)
|
struct browser_context *ctx)
|
||||||
|
@ -146,24 +204,31 @@ static void view_cb_title_changed(WebKitWebView *view, WebKitWebFrame *frame,
|
||||||
ctx->title = os_strdup(title);
|
ctx->title = os_strdup(title);
|
||||||
browser_update_title(ctx);
|
browser_update_title(ctx);
|
||||||
}
|
}
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
|
|
||||||
|
|
||||||
int hs20_web_browser(const char *url)
|
int hs20_web_browser(const char *url)
|
||||||
{
|
{
|
||||||
GtkWidget *scroll;
|
GtkWidget *scroll;
|
||||||
SoupSession *s;
|
|
||||||
WebKitWebView *view;
|
WebKitWebView *view;
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
WebKitSettings *settings;
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
WebKitWebSettings *settings;
|
WebKitWebSettings *settings;
|
||||||
|
SoupSession *s;
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
struct browser_context ctx;
|
struct browser_context ctx;
|
||||||
|
|
||||||
memset(&ctx, 0, sizeof(ctx));
|
memset(&ctx, 0, sizeof(ctx));
|
||||||
if (!gtk_init_check(NULL, NULL))
|
if (!gtk_init_check(NULL, NULL))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
#ifndef USE_WEBKIT2
|
||||||
s = webkit_get_default_session();
|
s = webkit_get_default_session();
|
||||||
g_object_set(G_OBJECT(s), "ssl-ca-file",
|
g_object_set(G_OBJECT(s), "ssl-ca-file",
|
||||||
"/etc/ssl/certs/ca-certificates.crt", NULL);
|
"/etc/ssl/certs/ca-certificates.crt", NULL);
|
||||||
g_object_set(G_OBJECT(s), "ssl-strict", FALSE, NULL);
|
g_object_set(G_OBJECT(s), "ssl-strict", FALSE, NULL);
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
|
|
||||||
ctx.win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
ctx.win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_role(GTK_WINDOW(ctx.win), "Hotspot 2.0 client");
|
gtk_window_set_role(GTK_WINDOW(ctx.win), "Hotspot 2.0 client");
|
||||||
|
@ -181,16 +246,30 @@ int hs20_web_browser(const char *url)
|
||||||
G_CALLBACK(view_cb_notify_progress), &ctx);
|
G_CALLBACK(view_cb_notify_progress), &ctx);
|
||||||
g_signal_connect(G_OBJECT(view), "notify::load-status",
|
g_signal_connect(G_OBJECT(view), "notify::load-status",
|
||||||
G_CALLBACK(view_cb_notify_load_status), &ctx);
|
G_CALLBACK(view_cb_notify_load_status), &ctx);
|
||||||
|
#ifdef USE_WEBKIT2
|
||||||
|
g_signal_connect(G_OBJECT(view), "resource-load-started",
|
||||||
|
G_CALLBACK(view_cb_resource_request_starting), &ctx);
|
||||||
|
g_signal_connect(G_OBJECT(view), "decide-policy",
|
||||||
|
G_CALLBACK(view_cb_mime_type_policy_decision), &ctx);
|
||||||
|
/* TODO: Implement these?
|
||||||
|
g_signal_connect(G_OBJECT(view), "download-started",
|
||||||
|
G_CALLBACK(view_cb_download_requested), &ctx);
|
||||||
|
g_signal_connect(G_OBJECT(view), "notify::title",
|
||||||
|
G_CALLBACK(view_cb_title_changed), &ctx);
|
||||||
|
*/
|
||||||
|
#else /* USE_WEBKIT2 */
|
||||||
g_signal_connect(G_OBJECT(view), "resource-request-starting",
|
g_signal_connect(G_OBJECT(view), "resource-request-starting",
|
||||||
G_CALLBACK(view_cb_resource_request_starting), &ctx);
|
G_CALLBACK(view_cb_resource_request_starting), &ctx);
|
||||||
g_signal_connect(G_OBJECT(view), "mime-type-policy-decision-requested",
|
g_signal_connect(G_OBJECT(view), "mime-type-policy-decision-requested",
|
||||||
G_CALLBACK(view_cb_mime_type_policy_decision), &ctx);
|
G_CALLBACK(view_cb_mime_type_policy_decision), &ctx);
|
||||||
g_signal_connect(G_OBJECT(view), "download-requested",
|
g_signal_connect(G_OBJECT(view), "download-requested",
|
||||||
G_CALLBACK(view_cb_download_requested), &ctx);
|
G_CALLBACK(view_cb_download_requested), &ctx);
|
||||||
g_signal_connect(G_OBJECT(view), "hovering-over-link",
|
|
||||||
G_CALLBACK(view_cb_hovering_over_link), &ctx);
|
|
||||||
g_signal_connect(G_OBJECT(view), "title-changed",
|
g_signal_connect(G_OBJECT(view), "title-changed",
|
||||||
G_CALLBACK(view_cb_title_changed), &ctx);
|
G_CALLBACK(view_cb_title_changed), &ctx);
|
||||||
|
#endif /* USE_WEBKIT2 */
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(view), "hovering-over-link",
|
||||||
|
G_CALLBACK(view_cb_hovering_over_link), &ctx);
|
||||||
|
|
||||||
gtk_container_add(GTK_CONTAINER(scroll), GTK_WIDGET(view));
|
gtk_container_add(GTK_CONTAINER(scroll), GTK_WIDGET(view));
|
||||||
gtk_container_add(GTK_CONTAINER(ctx.win), GTK_WIDGET(scroll));
|
gtk_container_add(GTK_CONTAINER(ctx.win), GTK_WIDGET(scroll));
|
||||||
|
|
Loading…
Reference in a new issue