528
528
webkit_policy_decision_ignore (decision);
531
else if (midori_tab_get_special (MIDORI_TAB (view)))
533
GTlsCertificate* tls_cert = g_object_get_data (G_OBJECT (view->web_view), "tls-cert");
534
gchar* tls_uri = g_object_get_data (G_OBJECT (view->web_view), "tls-uri");
535
gchar* hostname = midori_uri_parse_hostname (tls_uri, NULL);
536
if (tls_cert != NULL && tls_uri != NULL && hostname != NULL)
538
webkit_web_context_allow_tls_certificate_for_host (webkit_web_context_get_default (),
540
GError* error = NULL;
541
GcrCertificate* gcr_cert = midori_location_action_get_gcr_certificate (tls_cert);
542
gcr_trust_add_pinned_certificate (gcr_cert, GCR_PURPOSE_SERVER_AUTH, hostname, NULL, &error);
543
g_object_unref (gcr_cert);
548
532
if (katze_item_get_meta_integer (view->item, "delay") == MIDORI_DELAY_PENDING_UNDELAY)
665
649
g_free (filepath);
667
else if (g_str_has_prefix (uri, "stock://"))
670
const gchar* icon_name = &uri[8] ? &uri[8] : "";
671
gint icon_size = GTK_ICON_SIZE_MENU;
672
static gint icon_size_large_dialog = 0;
674
if (!icon_size_large_dialog)
676
gint width = 48, height = 48;
677
gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &width, &height);
678
icon_size_large_dialog = gtk_icon_size_register ("large-dialog", width * 2, height * 2);
681
if (g_ascii_isalpha (icon_name[0]))
683
if (g_str_has_prefix (icon_name, "dialog/"))
685
icon_name = &icon_name [strlen("dialog/")];
686
icon_size = icon_size_large_dialog;
689
icon_size = GTK_ICON_SIZE_BUTTON;
691
else if (g_ascii_isdigit (icon_name[0]))
695
if (icon_name[i++] == '/')
697
gchar* size = g_strndup (icon_name, i - 1);
698
icon_size = atoi (size);
699
/* Compatibility: map pixel to symbolic size */
701
icon_size = GTK_ICON_SIZE_MENU;
703
icon_name = &icon_name[i];
707
/* Render icon as a PNG at the desired size */
708
pixbuf = gtk_widget_render_icon (GTK_WIDGET (view), icon_name, icon_size, NULL);
710
pixbuf = gtk_widget_render_icon (GTK_WIDGET (view),
711
GTK_STOCK_MISSING_IMAGE, icon_size, NULL);
720
success = gdk_pixbuf_save_to_buffer (pixbuf, &buffer, &buffer_size, "png", NULL, NULL);
721
g_object_unref (pixbuf);
725
encoded = g_base64_encode ((guchar*)buffer, buffer_size);
726
data_uri = g_strconcat ("data:image/png;base64,", encoded, NULL);
728
GInputStream* stream = g_memory_input_stream_new_from_data (buffer, buffer_size, g_free);
729
webkit_uri_scheme_request_finish (request, stream, -1, "image/png");
730
g_object_unref (stream);
867
783
webkit_web_view_load_alternate_html (web_view, data, uri, uri);
787
midori_view_error_try_again_clicked_cb (MidoriOops* oops,
790
if (midori_tab_get_load_error (MIDORI_TAB (view)) == MIDORI_LOAD_ERROR_SECURITY)
793
GTlsCertificate* tls_cert = g_object_get_data (G_OBJECT (view->web_view), "tls-cert");
794
gchar* tls_uri = g_object_get_data (G_OBJECT (view->web_view), "tls-uri");
795
gchar* hostname = midori_uri_parse_hostname (tls_uri, NULL);
796
if (tls_cert != NULL && tls_uri != NULL && hostname != NULL)
798
webkit_web_context_allow_tls_certificate_for_host (webkit_web_context_get_default (),
800
GError* error = NULL;
801
GcrCertificate* gcr_cert = midori_location_action_get_gcr_certificate (tls_cert);
802
gcr_trust_add_pinned_certificate (gcr_cert, GCR_PURPOSE_SERVER_AUTH, hostname, NULL, &error);
803
g_object_unref (gcr_cert);
807
g_print ("reload\n");
808
midori_view_reload (view, FALSE);
871
812
midori_view_display_error (MidoriView* view,
872
813
const gchar* uri,
878
819
const gchar* try_again,
881
gchar* path = midori_paths_get_res_filename ("error.html");
884
if (g_file_get_contents (path, &template, NULL, NULL))
886
gchar* title_escaped;
890
gboolean is_main_frame;
892
is_main_frame = TRUE;
893
GtkSettings* gtk_settings = gtk_widget_get_settings (view->web_view);
894
gboolean show_button_images = gtk_settings != NULL
895
&& katze_object_get_boolean (gtk_settings, "gtk-button-images");
897
uri = midori_tab_get_uri (MIDORI_TAB (view));
898
title_escaped = g_markup_escape_text (title ? title : view->title, -1);
899
icon = katze_item_get_icon (view->item);
900
favicon = icon && !g_str_has_prefix (icon, "stock://")
901
? g_strdup_printf ("<link rel=\"shortcut icon\" href=\"%s\" />", icon) : NULL;
902
result = sokoke_replace_variables (template,
903
"{dir}", gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL ?
905
"{title}", title_escaped,
906
"{favicon}", katze_str_non_null (favicon),
907
"{error_icon}", katze_str_non_null (error_icon),
908
"{message}", message,
909
"{description}", description,
910
"{suggestions}", katze_str_non_null (suggestions),
911
"{tryagain}", try_again,
913
"{hide-button-images}", show_button_images ? "" : "display:none",
914
"{autofocus}", is_main_frame ? "autofocus=\"true\" " : "",
917
g_free (title_escaped);
920
midori_view_set_html (view, result, uri, web_frame);
823
uri = midori_tab_get_uri (MIDORI_TAB (view));
826
const gchar* icon = error_icon ? error_icon : "dialog-error";
827
GtkWidget* error = midori_oops_new (uri, icon, title, message, description, suggestions, try_again);
828
g_signal_connect (error, "retried", G_CALLBACK (midori_view_error_try_again_clicked_cb), view);
829
midori_tab_set_widget (MIDORI_TAB (view), error);
982
883
midori_uri_parse_hostname(uri, NULL));
985
result = midori_view_display_error (view, uri, "stock://dialog/network-error", title,
886
result = midori_view_display_error (view, uri, "network-error", title,
986
887
message, error->message, NULL,
987
888
_("Try Again"), web_frame);
988
889
midori_tab_set_load_error (MIDORI_TAB (view), MIDORI_LOAD_ERROR_NETWORK);
1012
midori_view_display_error (view, NULL, NULL, NULL, _("Security unknown"),
913
midori_view_display_error (view, NULL, "security-low", NULL, _("Security unknown"),
1013
914
midori_location_action_tls_flags_to_string (errors), NULL,
1014
915
_("Trust this website"), NULL);
1015
916
g_object_set_data_full (G_OBJECT (web_view), "tls-cert", g_object_ref (certificate), (GDestroyNotify)g_object_unref);
3037
2938
WebKitWebContext* context = webkit_web_view_get_context (WEBKIT_WEB_VIEW (view->web_view));
3038
2939
webkit_web_context_register_uri_scheme (context,
3039
2940
"res", midori_view_uri_scheme_res, NULL, NULL);
3040
webkit_web_context_register_uri_scheme (context,
3041
"stock", midori_view_uri_scheme_res, NULL, NULL);
3042
2941
g_signal_connect (context, "download-started",
3043
2942
G_CALLBACK (midori_view_download_started_cb), view);
3045
2944
view->overlay = gtk_overlay_new ();
3046
2945
gtk_widget_show (view->overlay);
3047
gtk_container_add (GTK_CONTAINER (view->overlay), view->web_view);
2946
GtkWidget* content = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
2947
gtk_widget_show (content);
2948
gtk_box_pack_start (GTK_BOX (content), view->web_view, TRUE, TRUE, 0);
2949
gtk_container_add (GTK_CONTAINER (view->overlay), content);
3048
2950
gtk_box_pack_start (GTK_BOX (view), view->overlay, TRUE, TRUE, 0);
3050
2952
/* Overlays must be created before showing GtkOverlay as of GTK+ 3.2 */
3105
if (midori_tab_get_widget (MIDORI_TAB (view)) != NULL)
3203
3107
midori_tab_set_uri (MIDORI_TAB (view), uri);
3204
3108
midori_tab_set_special (MIDORI_TAB (view), TRUE);
3205
3109
katze_item_set_meta_integer (view->item, "delay", MIDORI_DELAY_UNDELAYED);
3210
3114
if (katze_item_get_meta_integer (view->item, "delay") == MIDORI_DELAY_DELAYED)
3212
midori_tab_set_uri (MIDORI_TAB (view), uri);
3213
midori_tab_set_special (MIDORI_TAB (view), TRUE);
3214
3116
katze_item_set_meta_integer (view->item, "delay", MIDORI_DELAY_PENDING_UNDELAY);
3215
midori_view_display_error (view, NULL, "stock://dialog/network-idle", NULL,
3117
midori_view_display_error (view, NULL, "network-idle", NULL,
3216
3118
_("Page loading delayed:"),
3217
3119
_("Loading delayed either due to a recent crash or startup preferences."),