summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Dywan <christian@twotoasts.de>2018-12-16 14:53:02 +0100
committerGitHub <noreply@github.com>2018-12-16 14:53:02 +0100
commitdea3d53e3b4232c8d3c21b9dbf18319f9db5d82a (patch)
treeaf93067d85f4c2f94a86885eb7e9419969717201
parent4cea6d437ec729bbdb566e43fcff16c8dcd8c169 (diff)
downloadmidori-git-dea3d53e3b4232c8d3c21b9dbf18319f9db5d82a.tar.gz
Carry error state and tls certificate in tab (#187)
In case of errors the WebView won't save the certificate so it needs to be saved in the error handler. Fixes: #74
-rw-r--r--core/tab.vala21
-rw-r--r--core/urlbar.vala4
2 files changed, 21 insertions, 4 deletions
diff --git a/core/tab.vala b/core/tab.vala
index 6b207771..c817d737 100644
--- a/core/tab.vala
+++ b/core/tab.vala
@@ -28,6 +28,8 @@ namespace Midori {
public string? color { get; set; default = null; }
public bool pinned { get; set; }
public bool secure { get; protected set; }
+ bool was_error = false;
+ internal TlsCertificate? tls { get; protected set; default = null; }
public string link_uri { get; protected set; }
[GtkChild]
@@ -128,8 +130,16 @@ namespace Midori {
public override void load_changed (WebKit.LoadEvent load_event) {
if (load_event == WebKit.LoadEvent.COMMITTED) {
- secure = get_tls_info (null, null);
item = new DatabaseItem (uri, null, new DateTime.now_local ().to_unix ());
+ // Don't add errors to history or update the certificate
+ if (was_error) {
+ was_error = false;
+ return;
+ }
+ was_error = false;
+ TlsCertificate tls;
+ secure = get_tls_info (out tls, null);
+ this.tls = tls;
// Don't add internal or blank pages to history
if (uri.has_prefix ("internal:") || uri.has_prefix ("about:")) {
return;
@@ -152,9 +162,16 @@ namespace Midori {
}
public override bool web_process_crashed () {
+ this.tls = null;
return display_error ("face-sad", _("Oops - %s").printf (uri), _("Something went wrong with '%s'.").printf (uri));
}
+ public override bool load_failed_with_tls_errors (string uri, GLib.TlsCertificate tls, GLib.TlsCertificateFlags flags) {
+ display_uri = uri;
+ this.tls = tls;
+ return display_error ("channel-insecure", _("Security unknown"), _("Something went wrong with '%s'.").printf (uri));
+ }
+
public override bool load_failed (WebKit.LoadEvent load_event, string uri, Error load_error) {
// The unholy trinity; also ignored in Webkit's default error handler:
// A plugin will take over. That's expected, it's not fatal.
@@ -191,6 +208,7 @@ namespace Midori {
}
}
display_uri = uri;
+ this.tls = null;
return display_error ("network-error", title, message, load_error.message);
}
@@ -208,6 +226,7 @@ namespace Midori {
.replace ("{tryagain}", "<span>%s</span>".printf (_("Try Again")))
.replace ("{uri}", display_uri);
load_alternate_html (html, display_uri, display_uri);
+ was_error = true;
return true;
} catch (Error error) {
critical ("Failed to display error: %s", error.message);
diff --git a/core/urlbar.vala b/core/urlbar.vala
index b7b0aae4..9f86445a 100644
--- a/core/urlbar.vala
+++ b/core/urlbar.vala
@@ -284,9 +284,7 @@ namespace Midori {
}
void icon_pressed (Gtk.EntryIconPosition position, Gdk.Event event) {
- TlsCertificate tls;
- TlsCertificateFlags flags;
- ((Browser)get_toplevel ()).tab.get_tls_info (out tls, out flags);
+ var tls = ((Browser)get_toplevel ()).tab.tls;
var certificate = tls != null ? new Gcr.SimpleCertificate (tls.certificate.data) : null;
if (details == null) {
var icon_area = get_icon_area (position);