aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/issues.html17
-rw-r--r--ext/js/background/backend.js15
2 files changed, 26 insertions, 6 deletions
diff --git a/ext/issues.html b/ext/issues.html
index df6e6135..a436222e 100644
--- a/ext/issues.html
+++ b/ext/issues.html
@@ -25,7 +25,7 @@
<h1>Yomichan Issues</h1>
- <h2 id="audio-download-failed">Audio download failed due to possible extension permissions error <em>(Chrome)</em></h2>
+ <h2 id="audio-download-failed-permissions-error">Audio download failed due to possible extension permissions error <em>(Chrome)</em></h2>
<div class="settings-group">
<div class="settings-item"><div class="settings-item-inner"><div class="settings-item-left"><div class="settings-item-label">
<p>
@@ -42,6 +42,21 @@
</div></div></div></div>
</div>
+ <h2 id="audio-download-failed-expired-server-certificate">Audio download failed due to an expired server certificate</h2>
+ <div class="settings-group">
+ <div class="settings-item"><div class="settings-item-inner"><div class="settings-item-left"><div class="settings-item-label">
+ <p>
+ If a website failes to keep its HTTPS certificate up to date,
+ downloads can fail because the browser flags the connection as insecure.
+ This has happened occasionally for some websites that Yomichan interacts with,
+ and the issue is usually resolved within a day.
+ </p>
+ <p>
+ This issue is a server-side issue that Yomichan doesn't have control over.
+ </p>
+ </div></div></div></div>
+ </div>
+
<h2 id="audio-download-idle-timeout">Audio download was cancelled due to an idle timeout</h2>
<div class="settings-group">
<div class="settings-item"><div class="settings-item-inner"><div class="settings-item-left"><div class="settings-item-label">
diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js
index 20402539..197734b1 100644
--- a/ext/js/background/backend.js
+++ b/ext/js/background/backend.js
@@ -1936,11 +1936,16 @@ class Backend {
if (!isObject(error2.data)) { continue; }
const {details} = error2.data;
if (!isObject(details)) { continue; }
- if (details.error === 'net::ERR_FAILED') {
- // This is potentially an error due to the extension not having enough URL privileges.
- // The message logged to the console looks like this:
- // Access to fetch at '<URL>' from origin 'chrome-extension://<ID>' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
- return this._createAudioDownloadError('Audio download failed due to possible extension permissions error', 'audio-download-failed', errors);
+ switch (details.error) {
+ case 'net::ERR_FAILED':
+ // This is potentially an error due to the extension not having enough URL privileges.
+ // The message logged to the console looks like this:
+ // Access to fetch at '<URL>' from origin 'chrome-extension://<ID>' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
+ return this._createAudioDownloadError('Audio download failed due to possible extension permissions error', 'audio-download-failed-permissions-error', errors);
+ case 'net::ERR_CERT_DATE_INVALID': // Chrome
+ case 'Peer’s Certificate has expired.': // Firefox
+ // This error occurs when a server certificate expires.
+ return this._createAudioDownloadError('Audio download failed due to an expired server certificate', 'audio-download-failed-expired-server-certificate', errors);
}
}
}