Gate plugins in private profiles
This commit is contained in:
@@ -103,6 +103,7 @@ pub struct BrowserSnapshot {
|
||||
pub active_profile_id: ProfileId,
|
||||
pub active_space_name: String,
|
||||
pub active_profile_name: String,
|
||||
pub active_profile_kind: ProfileKind,
|
||||
pub active_download_policy: DownloadPolicy,
|
||||
pub search_engine: SearchEngine,
|
||||
pub new_tab_destination: NewTabDestination,
|
||||
@@ -362,6 +363,7 @@ impl BrowserCore {
|
||||
active_profile_id: self.active_profile_id.clone(),
|
||||
active_space_name: active_space.name().to_string(),
|
||||
active_profile_name: active_profile.name().to_string(),
|
||||
active_profile_kind: active_profile.kind().clone(),
|
||||
active_download_policy: active_profile.download_policy().clone(),
|
||||
search_engine: self.search_engine,
|
||||
new_tab_destination: self.new_tab_destination,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use std::time::SystemTime;
|
||||
|
||||
use ely_domain::{PluginId, PluginManifest};
|
||||
use ely_domain::{PluginId, PluginManifest, ProfileKind};
|
||||
|
||||
use crate::CoreError;
|
||||
|
||||
@@ -10,6 +10,7 @@ use super::BrowserCore;
|
||||
pub struct InstalledPlugin {
|
||||
manifest: PluginManifest,
|
||||
enabled: bool,
|
||||
private_window_allowed: bool,
|
||||
high_risk_confirmed: bool,
|
||||
installed_at: SystemTime,
|
||||
}
|
||||
@@ -19,6 +20,8 @@ pub enum PluginAuditAction {
|
||||
Installed,
|
||||
Enabled,
|
||||
Disabled,
|
||||
PrivateWindowAllowed,
|
||||
PrivateWindowBlocked,
|
||||
Uninstalled,
|
||||
}
|
||||
|
||||
@@ -31,13 +34,23 @@ pub struct PluginAuditEvent {
|
||||
|
||||
impl InstalledPlugin {
|
||||
fn new(manifest: PluginManifest, high_risk_confirmed: bool, installed_at: SystemTime) -> Self {
|
||||
Self { manifest, enabled: true, high_risk_confirmed, installed_at }
|
||||
Self {
|
||||
manifest,
|
||||
enabled: true,
|
||||
private_window_allowed: false,
|
||||
high_risk_confirmed,
|
||||
installed_at,
|
||||
}
|
||||
}
|
||||
|
||||
fn set_enabled(&mut self, enabled: bool) {
|
||||
self.enabled = enabled;
|
||||
}
|
||||
|
||||
fn set_private_window_allowed(&mut self, allowed: bool) {
|
||||
self.private_window_allowed = allowed;
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn manifest(&self) -> &PluginManifest {
|
||||
&self.manifest
|
||||
@@ -53,6 +66,20 @@ impl InstalledPlugin {
|
||||
self.enabled
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn private_window_allowed(&self) -> bool {
|
||||
self.private_window_allowed
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn enabled_for_profile(&self, profile_kind: &ProfileKind) -> bool {
|
||||
self.enabled
|
||||
&& match profile_kind {
|
||||
ProfileKind::Standard => true,
|
||||
ProfileKind::Private => self.private_window_allowed,
|
||||
}
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn high_risk_confirmed(&self) -> bool {
|
||||
self.high_risk_confirmed
|
||||
@@ -120,6 +147,31 @@ impl BrowserCore {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn set_plugin_private_window_allowed(
|
||||
&mut self,
|
||||
plugin_id: &PluginId,
|
||||
allowed: bool,
|
||||
) -> Result<(), CoreError> {
|
||||
self.plugin_mut(plugin_id)?.set_private_window_allowed(allowed);
|
||||
let action = if allowed {
|
||||
PluginAuditAction::PrivateWindowAllowed
|
||||
} else {
|
||||
PluginAuditAction::PrivateWindowBlocked
|
||||
};
|
||||
self.record_plugin_audit_event(plugin_id.clone(), action);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn enabled_plugins_for_active_profile(&self) -> Result<Vec<InstalledPlugin>, CoreError> {
|
||||
let profile_kind = self.active_profile()?.kind();
|
||||
Ok(self
|
||||
.installed_plugins
|
||||
.iter()
|
||||
.filter(|plugin| plugin.enabled_for_profile(profile_kind))
|
||||
.cloned()
|
||||
.collect())
|
||||
}
|
||||
|
||||
pub fn uninstall_plugin(&mut self, plugin_id: &PluginId) -> Result<(), CoreError> {
|
||||
let plugin_index = self
|
||||
.installed_plugins
|
||||
|
||||
Reference in New Issue
Block a user