Skip to content

Commit

Permalink
Catch extension errors on remove to allow installer to continue
Browse files Browse the repository at this point in the history
WE2-925

Signed-off-by: Raul Metsma <raul@metsma.ee>
  • Loading branch information
metsma committed May 1, 2024
1 parent 1605cf5 commit a1f179f
Showing 1 changed file with 27 additions and 20 deletions.
47 changes: 27 additions & 20 deletions src/FirefoxAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static ActionResult ExtensionSettingsInstall(Session session)
// with error status 1603, but when letting exceptions through the raw exception
// stack trace will be logged in installer log which gives more information.

var extensionSettings = GetExtensionSettingsFromSession(session);
var extensionSettings = session.GetExtensionSettings();
session.Log("Begin ExtensionSettingsInstall " + extensionSettings.UUID);
using (RegistryKey firefox = Utils.FirefoxKey())
{
Expand All @@ -55,25 +55,35 @@ public static ActionResult ExtensionSettingsInstall(Session session)
[CustomAction]
public static ActionResult ExtensionSettingsRemove(Session session)
{
var extensionSettings = GetExtensionSettingsFromSession(session);
session.Log("Begin ExtensionSettingsRemove " + extensionSettings.UUID);
using (RegistryKey firefox = Utils.FirefoxKey())
{
string value = firefox.GetStringValue("ExtensionSettings");
if (value != null)
{
JObject json = JObject.Parse(value);
json[extensionSettings.UUID] = new JObject
{
["installation_mode"] = "blocked"
};
firefox.SetValue("ExtensionSettings", json.ToString().Split('\n'));
}
return ActionResult.Success;
try
{
var extensionSettings = session.GetExtensionSettings();
session.Log("Begin ExtensionSettingsRemove " + extensionSettings.UUID);
using (RegistryKey firefox = Utils.FirefoxKey())
{
string value = firefox.GetStringValue("ExtensionSettings");
if (value != null)
{
JObject json = JObject.Parse(value);
json[extensionSettings.UUID] = new JObject
{
["installation_mode"] = "blocked"
};
firefox.SetValue("ExtensionSettings", json.ToString().Split('\n'));
}
}
}
catch(Exception ex)
{
session.Log("End ExtensionSettingsRemove " + extensionSettings.UUID, ex);
}
return ActionResult.Success;
}
}

private static (string UUID, string URL) GetExtensionSettingsFromSession(Session session)
internal static class Utils
{
internal static (string UUID, string URL) GetExtensionSettings(Session session)
{
// Deferred custom actions cannot directly access installer properties from session,
// only the CustomActionData property is available, see README how to populate it.
Expand All @@ -82,10 +92,7 @@ private static (string UUID, string URL) GetExtensionSettingsFromSession(Session
session.CustomActionData["EXTENSIONSETTINGS_URL"]
);
}
}

internal static class Utils
{
internal static RegistryKey FirefoxKey()
{
using (RegistryKey mozilla = Registry.LocalMachine.OpenOrCreateSubKey(@"Software\Policies\Mozilla", true))
Expand Down

0 comments on commit a1f179f

Please sign in to comment.