diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts
index 91467de50..c48214215 100644
--- a/share/translations/keepassxc_en.ts
+++ b/share/translations/keepassxc_en.ts
@@ -1186,18 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2?
Custom extension ID
-
- Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1
-
-
-
- KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4
-
-
-
- Please see special instructions for browser extension use below
-
-
Executable Files
@@ -1246,6 +1234,10 @@ Do you want to overwrite the passkey in %1 - %2?
Allow using localhost with passkeys
+
+ KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3.
+
+
CloneDialog
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 435bf725b..d03f0e1c1 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -10,7 +10,7 @@ apps:
command: usr/bin/keepassxc
common-id: org.keepassxc.KeePassXC.desktop
extensions: [kde-neon]
- plugs: [home, unity7, network, network-bind, removable-media, raw-usb, password-manager-service]
+ plugs: [home, unity7, network, network-bind, removable-media, raw-usb, password-manager-service, browser-native-messaging]
autostart: org.keepassxc.KeePassXC.desktop
cli:
command: usr/bin/keepassxc-cli
@@ -21,6 +21,18 @@ apps:
extensions: [kde-neon]
plugs: [home]
+plugs:
+ browser-native-messaging:
+ interface: personal-files
+ write:
+ - $HOME/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
+ - $HOME/.config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json
+ - $HOME/.config/google-chrome/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json
+ - $HOME/.config/microsoft-edge/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json
+ - $HOME/.config/vivaldi/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json
+ - $HOME/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json
+ - $HOME/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json
+
slots:
session-dbus-interface:
interface: dbus
diff --git a/src/browser/BrowserSettingsWidget.cpp b/src/browser/BrowserSettingsWidget.cpp
index 3190fddbe..3e2679e79 100644
--- a/src/browser/BrowserSettingsWidget.cpp
+++ b/src/browser/BrowserSettingsWidget.cpp
@@ -31,23 +31,13 @@ BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent)
m_ui->setupUi(this);
// clang-format off
- QString snapInstructions;
-#if defined(KEEPASSXC_DIST_SNAP)
- snapInstructions = "
" +
- tr("Due to Snap sandboxing, you must run a script to enable browser integration."
- "
"
- "You can obtain this script from %1")
- .arg("https://keepassxc.org");
-#endif
-
m_ui->extensionLabel->setOpenExternalLinks(true);
m_ui->extensionLabel->setText(
- tr("KeePassXC-Browser is needed for the browser integration to work.
Download it for %1 and %2 and %3. %4")
+ tr("KeePassXC-Browser is needed for the browser integration to work.
Download it for %1 and %2 and %3.")
.arg("Firefox",
""
"Google Chrome / Chromium / Vivaldi / Brave",
- "Microsoft Edge",
- snapInstructions));
+ "Microsoft Edge"));
// clang-format on
m_ui->tabWidget->setEnabled(m_ui->enableBrowserSupport->isChecked());
@@ -149,16 +139,11 @@ void BrowserSettingsWidget::loadSettings()
m_ui->useCustomProxy->setVisible(false);
m_ui->customProxyLocation->setVisible(false);
m_ui->customProxyLocationBrowseButton->setVisible(false);
- m_ui->browsersGroupBox->setVisible(false);
- m_ui->browsersGroupBox->setEnabled(false);
m_ui->updateBinaryPath->setChecked(false);
m_ui->updateBinaryPath->setVisible(false);
// No custom browser for snaps
m_ui->customBrowserSupport->setVisible(false);
m_ui->customBrowserGroupBox->setVisible(false);
- // Show notice to user
- m_ui->messageWidget->showMessage(tr("Please see special instructions for browser extension use below"),
- MessageWidget::Warning);
#endif
#ifdef KEEPASSXC_DIST_FLATPAK
// The sandbox makes custom proxy locations very unintuitive
diff --git a/src/browser/NativeMessageInstaller.cpp b/src/browser/NativeMessageInstaller.cpp
index 92b5db291..7e637a64c 100644
--- a/src/browser/NativeMessageInstaller.cpp
+++ b/src/browser/NativeMessageInstaller.cpp
@@ -226,6 +226,16 @@ QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser)
} else {
basePath = QDir::homePath() + "/.config";
}
+#elif defined(KEEPASSXC_DIST_SNAP)
+ // Same as Flatpak above, with the exception that Snap also redefines $HOME
+ // Therefore we must explicitly reference $SNAP_REAL_HOME
+ if (browser == SupportedBrowsers::TOR_BROWSER) {
+ basePath = qEnvironmentVariable("SNAP_REAL_HOME") + "/.local/share";
+ } else if (browser == SupportedBrowsers::FIREFOX) {
+ basePath = qEnvironmentVariable("SNAP_REAL_HOME");
+ } else {
+ basePath = qEnvironmentVariable("SNAP_REAL_HOME") + "/.config";
+ }
#elif defined(Q_OS_LINUX) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS))
if (browser == SupportedBrowsers::TOR_BROWSER) {
basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
@@ -296,6 +306,8 @@ QString NativeMessageInstaller::getInstalledProxyPath() const
path = QProcessEnvironment::systemEnvironment().value("APPIMAGE");
#elif defined(KEEPASSXC_DIST_FLATPAK)
path = constructFlatpakPath();
+#elif defined(KEEPASSXC_DIST_SNAP)
+ path = "/snap/bin/keepassxc.proxy";
#else
path = QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc-proxy");
#ifdef Q_OS_WIN