fix(sync): honor paused object policies
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
use std::{collections::BTreeSet, time::SystemTime};
|
use std::{collections::BTreeSet, time::SystemTime};
|
||||||
|
|
||||||
use ely_domain::{BookmarkEntry, BookmarkId, SpaceId, UrlText};
|
use ely_domain::{BookmarkEntry, BookmarkId, SpaceId, SyncObjectKind, SyncObjectPolicy, UrlText};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::CoreError;
|
use crate::CoreError;
|
||||||
@@ -246,6 +246,9 @@ impl BrowserCore {
|
|||||||
/// used by the sync engine which mirrors the full state to the
|
/// used by the sync engine which mirrors the full state to the
|
||||||
/// Cloudflare worker, not just the visible profile.
|
/// Cloudflare worker, not just the visible profile.
|
||||||
pub fn visible_bookmarks_for_sync(&self) -> Vec<&BookmarkEntry> {
|
pub fn visible_bookmarks_for_sync(&self) -> Vec<&BookmarkEntry> {
|
||||||
|
if self.sync_object_policy(SyncObjectKind::Bookmarks) == SyncObjectPolicy::Paused {
|
||||||
|
return Vec::new();
|
||||||
|
}
|
||||||
self.bookmarks.iter().collect()
|
self.bookmarks.iter().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,6 +178,9 @@ impl BrowserCore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn visible_tabs_for_sync(&self) -> Vec<&BrowserTab> {
|
pub(crate) fn visible_tabs_for_sync(&self) -> Vec<&BrowserTab> {
|
||||||
|
if self.sync_object_policy(SyncObjectKind::Tabs) == SyncObjectPolicy::Paused {
|
||||||
|
return Vec::new();
|
||||||
|
}
|
||||||
self.tabs
|
self.tabs
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|tab| {
|
.filter(|tab| {
|
||||||
|
|||||||
@@ -181,6 +181,24 @@ fn sync_snapshot_updates_existing_tab_metadata() -> Result<(), Box<dyn Error>> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sync_snapshot_omits_paused_tabs() -> Result<(), Box<dyn Error>> {
|
||||||
|
let mut source = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||||
|
source.open_tab(UrlText::parse("https://example.com/research")?);
|
||||||
|
source.set_sync_object_policy(SyncObjectKind::Tabs, SyncObjectPolicy::Paused);
|
||||||
|
let bytes = source.build_sync_snapshot_bytes()?;
|
||||||
|
|
||||||
|
let mut target = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||||
|
let summary = target.apply_sync_snapshot_bytes(&bytes)?;
|
||||||
|
let snapshot = target.snapshot()?;
|
||||||
|
|
||||||
|
assert_eq!(summary.imported(), 0);
|
||||||
|
assert_eq!(summary.updated(), 0);
|
||||||
|
assert_eq!(summary.skipped(), 0);
|
||||||
|
assert!(snapshot.tabs.iter().all(|tab| tab.url().as_str() != "https://example.com/research"));
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn sync_snapshot_updates_existing_bookmark_metadata() -> Result<(), Box<dyn Error>> {
|
fn sync_snapshot_updates_existing_bookmark_metadata() -> Result<(), Box<dyn Error>> {
|
||||||
let mut source = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
let mut source = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||||
@@ -212,6 +230,28 @@ fn sync_snapshot_updates_existing_bookmark_metadata() -> Result<(), Box<dyn Erro
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sync_snapshot_omits_paused_bookmarks() -> Result<(), Box<dyn Error>> {
|
||||||
|
let mut source = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||||
|
let source_home_tab_id = source.snapshot()?.active_tab_id;
|
||||||
|
source.set_tab_sync_enabled(&source_home_tab_id, false)?;
|
||||||
|
let source_tab_id = source.open_tab(UrlText::parse("https://example.com/research")?);
|
||||||
|
source.set_tab_sync_enabled(&source_tab_id, false)?;
|
||||||
|
source.bookmark_active_tab()?;
|
||||||
|
source.set_sync_object_policy(SyncObjectKind::Bookmarks, SyncObjectPolicy::Paused);
|
||||||
|
let bytes = source.build_sync_snapshot_bytes()?;
|
||||||
|
|
||||||
|
let mut target = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||||
|
let summary = target.apply_sync_snapshot_bytes(&bytes)?;
|
||||||
|
let snapshot = target.snapshot()?;
|
||||||
|
|
||||||
|
assert_eq!(summary.imported(), 0);
|
||||||
|
assert_eq!(summary.updated(), 0);
|
||||||
|
assert_eq!(summary.skipped(), 0);
|
||||||
|
assert!(snapshot.bookmarks.is_empty());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn sync_snapshot_rejects_unknown_schema_rev() -> Result<(), Box<dyn Error>> {
|
fn sync_snapshot_rejects_unknown_schema_rev() -> Result<(), Box<dyn Error>> {
|
||||||
let mut core = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
let mut core = BrowserCore::new(InitialBrowserConfig::ely_defaults()?)?;
|
||||||
|
|||||||
Reference in New Issue
Block a user