diff options
author | kodehawa | 2021-01-26 00:37:43 -0300 |
---|---|---|
committer | kodehawa | 2021-01-26 00:37:43 -0300 |
commit | b9903847bb0cf931c3b39b567b24b0cd0a916a8c (patch) | |
tree | d3c4ce4d8c811197a495a04fe9f70ee402dfcf5d | |
parent | 492bca3a6960140265dff0c7221bf5041f0bb132 (diff) | |
download | aur-b9903847bb0cf931c3b39b567b24b0cd0a916a8c.tar.gz |
add temp patch to fix discord
-rw-r--r-- | .SRCINFO | 4 | ||||
-rw-r--r-- | 0001-fix-don-t-throw-on-bad-icons-in-BrowserWindow-constr.patch | 160 | ||||
-rw-r--r-- | PKGBUILD | 8 |
3 files changed, 169 insertions, 3 deletions
@@ -1,7 +1,7 @@ pkgbase = electron-ozone pkgdesc = Electron compiled with wayland support via Ozone pkgver = 11.2.1 - pkgrel = 3 + pkgrel = 4 url = https://electronjs.org/ arch = x86_64 license = MIT @@ -51,6 +51,7 @@ pkgbase = electron-ozone source = v8-icu68.patch source = chromium-skia-harmony.patch source = 0001-fix-add-Wayland-support-26022.patch + source = 0001-fix-don-t-throw-on-bad-icons-in-BrowserWindow-constr.patch sha256sums = SKIP sha256sums = SKIP sha256sums = 5270db01f3f8aaa5137dec275a02caa832b7f2e37942e068cba8d28b3a29df39 @@ -60,5 +61,6 @@ pkgbase = electron-ozone sha256sums = 6e919c9712d8fe6c2918778df1f8c2ee0675a87a48be5d2aaa54e320703ced4b sha256sums = 771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1 sha256sums = f896ed4008feb76be3a9bef17d6e237b8592de19dc667b1905cacd311e97c70b + sha256sums = 151edbe0ef4098a4ab730652327b00215f6b67ce0df89a26a2da24888c65fcb5 pkgname = electron-ozone diff --git a/0001-fix-don-t-throw-on-bad-icons-in-BrowserWindow-constr.patch b/0001-fix-don-t-throw-on-bad-icons-in-BrowserWindow-constr.patch new file mode 100644 index 000000000000..e9ca24af1e86 --- /dev/null +++ b/0001-fix-don-t-throw-on-bad-icons-in-BrowserWindow-constr.patch @@ -0,0 +1,160 @@ +From 47640eaa9a5cd3d4ed53f841f34f30c49f89cff9 Mon Sep 17 00:00:00 2001 +From: Charles Kerr <charles@charleskerr.com> +Date: Mon, 25 Jan 2021 14:44:04 -0600 +Subject: [PATCH] fix: don't throw on bad icons in BrowserWindow constructor + (#27441) (#27478) + +--- + shell/browser/api/electron_api_base_window.cc | 11 ++++++-- + shell/browser/api/electron_api_base_window.h | 3 ++ + shell/common/api/electron_api_native_image.cc | 28 ++++++++++++++----- + shell/common/api/electron_api_native_image.h | 10 +++++-- + spec-main/api-browser-window-spec.ts | 9 ++++++ + 5 files changed, 49 insertions(+), 12 deletions(-) + +diff --git a/shell/browser/api/electron_api_base_window.cc b/shell/browser/api/electron_api_base_window.cc +index 4995db43e..d053ed6e8 100644 +--- a/shell/browser/api/electron_api_base_window.cc ++++ b/shell/browser/api/electron_api_base_window.cc +@@ -101,7 +101,7 @@ BaseWindow::BaseWindow(v8::Isolate* isolate, + #if defined(TOOLKIT_VIEWS) + v8::Local<v8::Value> icon; + if (options.Get(options::kIcon, &icon)) { +- SetIcon(isolate, icon); ++ SetIconImpl(isolate, icon, NativeImage::OnConvertError::kWarn); + } + #endif + } +@@ -999,8 +999,15 @@ bool BaseWindow::SetThumbarButtons(gin_helper::Arguments* args) { + + #if defined(TOOLKIT_VIEWS) + void BaseWindow::SetIcon(v8::Isolate* isolate, v8::Local<v8::Value> icon) { ++ SetIconImpl(isolate, icon, NativeImage::OnConvertError::kThrow); ++} ++ ++void BaseWindow::SetIconImpl(v8::Isolate* isolate, ++ v8::Local<v8::Value> icon, ++ NativeImage::OnConvertError on_error) { + NativeImage* native_image = nullptr; +- if (!NativeImage::TryConvertNativeImage(isolate, icon, &native_image)) ++ if (!NativeImage::TryConvertNativeImage(isolate, icon, &native_image, ++ on_error)) + return; + + #if defined(OS_WIN) +diff --git a/shell/browser/api/electron_api_base_window.h b/shell/browser/api/electron_api_base_window.h +index 912c2306f..2276e83b5 100644 +--- a/shell/browser/api/electron_api_base_window.h ++++ b/shell/browser/api/electron_api_base_window.h +@@ -222,6 +222,9 @@ class BaseWindow : public gin_helper::TrackableObject<BaseWindow>, + bool SetThumbarButtons(gin_helper::Arguments* args); + #if defined(TOOLKIT_VIEWS) + void SetIcon(v8::Isolate* isolate, v8::Local<v8::Value> icon); ++ void SetIconImpl(v8::Isolate* isolate, ++ v8::Local<v8::Value> icon, ++ NativeImage::OnConvertError on_error); + #endif + #if defined(OS_WIN) + typedef base::RepeatingCallback<void(v8::Local<v8::Value>, +diff --git a/shell/common/api/electron_api_native_image.cc b/shell/common/api/electron_api_native_image.cc +index c786d0eb8..2c087a313 100644 +--- a/shell/common/api/electron_api_native_image.cc ++++ b/shell/common/api/electron_api_native_image.cc +@@ -10,6 +10,7 @@ + #include <vector> + + #include "base/files/file_util.h" ++#include "base/logging.h" + #include "base/strings/pattern.h" + #include "base/strings/string_util.h" + #include "base/strings/utf_string_conversions.h" +@@ -140,7 +141,10 @@ NativeImage::~NativeImage() { + // static + bool NativeImage::TryConvertNativeImage(v8::Isolate* isolate, + v8::Local<v8::Value> image, +- NativeImage** native_image) { ++ NativeImage** native_image, ++ OnConvertError on_error) { ++ std::string error_message; ++ + base::FilePath icon_path; + if (gin::ConvertFromV8(isolate, image, &icon_path)) { + *native_image = NativeImage::CreateFromPath(isolate, icon_path).get(); +@@ -150,17 +154,27 @@ bool NativeImage::TryConvertNativeImage(v8::Isolate* isolate, + #else + const auto img_path = icon_path.value(); + #endif +- isolate->ThrowException(v8::Exception::Error(gin::StringToV8( +- isolate, "Failed to load image from path '" + img_path + "'"))); +- return false; ++ error_message = "Failed to load image from path '" + img_path + "'"; + } + } else { + if (!gin::ConvertFromV8(isolate, image, native_image)) { +- isolate->ThrowException(v8::Exception::Error(gin::StringToV8( +- isolate, "Argument must be a file path or a NativeImage"))); +- return false; ++ error_message = "Argument must be a file path or a NativeImage"; + } + } ++ ++ if (!error_message.empty()) { ++ switch (on_error) { ++ case OnConvertError::kThrow: ++ isolate->ThrowException( ++ v8::Exception::Error(gin::StringToV8(isolate, error_message))); ++ break; ++ case OnConvertError::kWarn: ++ LOG(WARNING) << error_message; ++ break; ++ } ++ return false; ++ } ++ + return true; + } + +diff --git a/shell/common/api/electron_api_native_image.h b/shell/common/api/electron_api_native_image.h +index 1c89fcdfa..f0ecb35cc 100644 +--- a/shell/common/api/electron_api_native_image.h ++++ b/shell/common/api/electron_api_native_image.h +@@ -77,9 +77,13 @@ class NativeImage : public gin::Wrappable<NativeImage> { + + static v8::Local<v8::FunctionTemplate> GetConstructor(v8::Isolate* isolate); + +- static bool TryConvertNativeImage(v8::Isolate* isolate, +- v8::Local<v8::Value> image, +- NativeImage** native_image); ++ enum class OnConvertError { kThrow, kWarn }; ++ ++ static bool TryConvertNativeImage( ++ v8::Isolate* isolate, ++ v8::Local<v8::Value> image, ++ NativeImage** native_image, ++ OnConvertError on_error = OnConvertError::kThrow); + + // gin::Wrappable + static gin::WrapperInfo kWrapperInfo; +diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts +index 379cdff04..7e490427c 100644 +--- a/spec-main/api-browser-window-spec.ts ++++ b/spec-main/api-browser-window-spec.ts +@@ -62,6 +62,15 @@ describe('BrowserWindow module', () => { + const appProcess = childProcess.spawn(process.execPath, [appPath]); + await new Promise((resolve) => { appProcess.once('exit', resolve); }); + }); ++ ++ it('does not crash or throw when passed an invalid icon', async () => { ++ expect(() => { ++ const w = new BrowserWindow({ ++ icon: undefined ++ } as any); ++ w.destroy(); ++ }).not.to.throw(); ++ }); + }); + + describe('garbage collection', () => { +-- +2.30.0 + @@ -9,7 +9,7 @@ provides=('electron') conflicts=('electron') _commit=8805b996e0d8cfb6e3921f9b586366bafb125b59 _chromiumver=87.0.4280.141 -pkgrel=3 +pkgrel=4 pkgdesc='Electron compiled with wayland support via Ozone' arch=('x86_64') url='https://electronjs.org/' @@ -33,6 +33,7 @@ source=('git+https://github.com/electron/electron.git' 'v8-icu68.patch' 'chromium-skia-harmony.patch' '0001-fix-add-Wayland-support-26022.patch' + '0001-fix-don-t-throw-on-bad-icons-in-BrowserWindow-constr.patch' ) sha256sums=('SKIP' 'SKIP' @@ -42,7 +43,8 @@ sha256sums=('SKIP' '38fb5218331d6e03915490dab64f7b8bf26833a581d1aaa02090437c67e9439c' '6e919c9712d8fe6c2918778df1f8c2ee0675a87a48be5d2aaa54e320703ced4b' '771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1' - 'f896ed4008feb76be3a9bef17d6e237b8592de19dc667b1905cacd311e97c70b') + 'f896ed4008feb76be3a9bef17d6e237b8592de19dc667b1905cacd311e97c70b' + '151edbe0ef4098a4ab730652327b00215f6b67ce0df89a26a2da24888c65fcb5') _system_libs=('ffmpeg' 'flac' @@ -92,6 +94,8 @@ prepare() { cd src/electron echo "Applying local electron patches" + # Discord crash fix. Remove on 11.2.2 (!) + patch -Np1 -i ../../0001-fix-don-t-throw-on-bad-icons-in-BrowserWindow-constr.patch patch -Np1 -i ../../0001-fix-add-Wayland-support-26022.patch cd ../../ |