diff --git a/atom/browser/api/atom_api_auto_updater.cc b/atom/browser/api/atom_api_auto_updater.cc index c23e488f64..bc708b128f 100644 --- a/atom/browser/api/atom_api_auto_updater.cc +++ b/atom/browser/api/atom_api_auto_updater.cc @@ -57,6 +57,23 @@ void AutoUpdater::OnError(const std::string& message) { message); } +void AutoUpdater::OnError(const std::string& message, + const int code, const std::string& domain) { + v8::Locker locker(isolate()); + v8::HandleScope handle_scope(isolate()); + auto error = v8::Exception::Error(mate::StringToV8(isolate(), message)); + auto errorObject = error->ToObject( + isolate()->GetCurrentContext()).ToLocalChecked(); + + // add two new params for better error handling + errorObject->Set(mate::StringToV8(isolate(), "code"), + v8::Integer::New(isolate(), code)); + errorObject->Set(mate::StringToV8(isolate(), "domain"), + mate::StringToV8(isolate(), domain)); + + mate::EmitEvent(isolate(), GetWrapper(), "error", errorObject, message); +} + void AutoUpdater::OnCheckingForUpdate() { Emit("checking-for-update"); } diff --git a/atom/browser/api/atom_api_auto_updater.h b/atom/browser/api/atom_api_auto_updater.h index 83a66146a3..e9e5c53ade 100644 --- a/atom/browser/api/atom_api_auto_updater.h +++ b/atom/browser/api/atom_api_auto_updater.h @@ -32,6 +32,8 @@ class AutoUpdater : public mate::EventEmitter, // Delegate implementations. void OnError(const std::string& error) override; + void OnError(const std::string& message, const int code, + const std::string& domain); void OnCheckingForUpdate() override; void OnUpdateAvailable() override; void OnUpdateNotAvailable() override; diff --git a/atom/browser/auto_updater.h b/atom/browser/auto_updater.h index aa4ca19cf2..389e39d31e 100644 --- a/atom/browser/auto_updater.h +++ b/atom/browser/auto_updater.h @@ -22,6 +22,9 @@ class Delegate { // An error happened. virtual void OnError(const std::string& error) {} + virtual void OnError(const std::string& error, const int code, + const std::string& domain) {} + // Checking to see if there is an update virtual void OnCheckingForUpdate() {} diff --git a/atom/browser/auto_updater_mac.mm b/atom/browser/auto_updater_mac.mm index 3802fef162..e0317f42b0 100644 --- a/atom/browser/auto_updater_mac.mm +++ b/atom/browser/auto_updater_mac.mm @@ -104,7 +104,7 @@ void AutoUpdater::CheckForUpdates() { delegate->OnUpdateNotAvailable(); } } error:^(NSError *error) { - NSMutableString* failureString = + NSMutableString *failureString = [NSMutableString stringWithString:error.localizedDescription]; if (error.localizedFailureReason) { [failureString appendString:@": "]; @@ -116,7 +116,8 @@ void AutoUpdater::CheckForUpdates() { [failureString appendString:@" "]; [failureString appendString:error.localizedRecoverySuggestion]; } - delegate->OnError(base::SysNSStringToUTF8(failureString)); + delegate->OnError(base::SysNSStringToUTF8(failureString), error.code, + base::SysNSStringToUTF8(error.domain)); }]; } @@ -125,7 +126,8 @@ void AutoUpdater::QuitAndInstall() { if (g_update_available) { [[g_updater relaunchToInstallUpdate] subscribeError:^(NSError* error) { if (delegate) - delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription)); + delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription), + error.code, base::SysNSStringToUTF8(error.domain)); }]; } else { if (delegate)