惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
博客园 - 三生石上(FineUI控件)
V
V2EX
有赞技术团队
有赞技术团队
V
Visual Studio Blog
小众软件
小众软件
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
量子位
T
Tailwind CSS Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cisco Talos Blog
Cisco Talos Blog
I
Intezer
Project Zero
Project Zero
A
Arctic Wolf
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
L
Lohrmann on Cybersecurity
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tor Project blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security @ Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
Help Net Security
Help Net Security
N
News | PayPal Newsroom
W
WeLiveSecurity
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog

浏览器

Vivaldi 的地址栏引流也太狠了 微信输入法无法在 edge/chrome 浏览器输入中文 - V2EX 从 Stylish 转到 Stylus,解决部分网站行为异常的问题 - V2EX 推荐一个我做的多浏览器分流和同步的工具 - V2EX iTab 把我自定义添加的网址替换了 - V2EX 怎么让浏览器认为自己是默认浏览器 - V2EX 今天夸克浏览器怎么卡死? - V2EX edge 浏览器就算使用了 disk cache 有时候还是会卡一两秒的真实原因可能是什么?能不能解决? macos 26.5 (25F71)下 edge 浏览器 某些网页会回退到未登录状态。 edge 浏览器访问 service worker 做的 SWR 缓存策略偶尔延迟比较大, chrome 一直很快,如何排查? 兜兜转转最终还是回到了 chrome vibe coding 一个 Safari 书签同步到 Chrome/Firefox 工具 兄弟们平常都用什么浏览器? - V2EX 电脑版 EDGE 浏览器的同步功能是不是坏了? - V2EX 你会愿意为浏览器付费吗? - V2EX chrome 最新的 147 版直接卡爆炸了 - V2EX iTad 标签 扩展 加小动作 ? - V2EX 浏览器插件 沉浸式翻译 是不支持自定义模型了吗? - V2EX 2026 年, V 友们认为最省内存的浏览器是哪个呢?你目前在用的是什么浏览器? - V2EX 折腾了一圈浏览器,我最后还是回到了 Chrome - V2EX 2026 年了,程序员用 chrome 还是用 Safari 比较多?可以说一下推荐的原因吗? - V2EX 关于 Chrome 使用垂直标签栏的几个疑问 - V2EX ARC 浏览器大家还在用么?有啥替换的对象 - V2EX 避免浏览器搜索栏自动跳转 Bing 国内版的方式 - V2EX Ladybird 浏览器宣布采用 Rust 语言逐步替代原有 C++ 代码 - V2EX 有什么简洁的 Chromium 套壳浏览器推荐? - V2EX 大家有没有遇见 Edge 浏览器新版(144.0.3719.92) , CPU 异常占用 - V2EX 有什么推荐的浏览器? - V2EX zen 浏览器无法正常播放 spotify 音乐 - V2EX edge 和系统的绑定是真的恶心啊 - V2EX 小白提问:大家平时用什么浏览器?使用隐私保护的浏览器有可能会反向导致 IP 风险值变高吗? - V2EX 寻找个仿 chrome/edge 的收藏栏的个人首页,自己找 Gemini 写了半天终觉差了点什么 - V2EX 年终, 主力浏览器从 Safari 换回 Chrome,终端从 Ghostty 换回 iTerm - V2EX 我连续熬了三晚为“雪球”写了一个 Tampermonkey“用户脚本”,分享给 V 友,会很“高兴”看到很多人使用 - V2EX 有没有浏览器插件可以将网页视频投屏到 AndroidTV - V2EX 对隐私保护做得好的浏览器都有哪些 - V2EX Ubuntu 上关闭 chrome 窗口后,再次打开卡死 - V2EX 谷歌推出人工智能浏览器 Disco 可以快速编写交互式 Web 应用帮助用户解决问题 - V2EX 哪个安卓手机浏览器可以打开 console 控制台模式,或者执行手动输入的 js 代码 - V2EX 你浏览器的 cookie 或者 localStorage 支持一键上传到 github gist 了 - V2EX 哪个浏览器 Openbox 能用 sidebery+chrome 插件? - V2EX chrome143 以上(含 edge),f12 后查看元素,展开节点啥的非常卡,140 正常,firefox 正常 - V2EX 有没哪款浏览器像 Chrome 一样方便开发调试,但又内存暂用低的? - V2EX dia 浏览器跳区域限制的应对脚本 - V2EX MV3 时代, uBlock Origin Lite 和新版 AdGuard 插件哪个更好? - V2EX chrome 浏览器的 TLS 证书告警没法跳过 - V2EX 为什么没有精简 WebKit? - V2EX 三星出桌面端的浏览器了 - V2EX 浏览器访问一些特定端口会报 ERR_UNSAFE_PORT,有没有什么浏览器不标记不安全端口的? - V2EX 我是提醒备份小助手,提醒你备份油猴和篡改猴数据 - V2EX 微软的 Edge 也挺好用的,但有哪个瞬间,让你想切换回 Chrome? - V2EX Mac 端请使用非 webkit 内核浏览器以获得更好的字体体验 - V2EX Zen 浏览器疑似内存占用有点高啊 - V2EX 我发现 chrome 浏览器调试窗口网络模块中有些请求不展示 - V2EX 有没使用 Firafox 浏览器的朋友,还有什么其它的快速切换代理的浏览器扩展推荐啊? - V2EX 现在手机上还有什么浏览器,可以像 kiwi 一样安装自己的浏览器插件的? v2ex 在干什么,这么占内存 如何知道网络请求是从浏览器发出的 [凡回复必答谢] 你对“企业浏览器”怎么看? - V2EX iOS edge 浏览器菜单风格怎么从瀑布流切换平铺? 浏览器迁移好麻烦 chrome 更新后白屏,网页打开了但是看不到内容
[回复即答谢] 你怎么看个人浏览器收集用户数据这个问题?如果你可以在自己的 NAS 上搭一套浏览器后台同步服务(免费的),你愿意这样做吗?
desdouble · 2025-09-17 · via 浏览器
chromium 内核的浏览器同步了很多数据。一般输入“chrome://sync-internals/”可以查看数据同步情况。 ![]( ) 源代码的头文件中定义了更多类型,有一些是企业版 chrome 的数据。那么如题,你怎么看?回复即答谢。 ` // Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_SYNC_BASE_MODEL_TYPE_H_ #define COMPONENTS_SYNC_BASE_MODEL_TYPE_H_ #include <iosfwd> #include <map> #include <memory> #include <string> #include "base/containers/enum_set.h" #include "base/values.h" namespace sync_pb { class EntitySpecifics; } namespace syncer { // Enumerate the various item subtypes that are supported by sync. // Each sync object is expected to have an immutable object type. // An object's type is inferred from the type of data it holds. // // A Java counterpart will be generated for this enum. // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.sync // // |kModelTypeInfoMap| struct entries are in the same order as their definition // in ModelType enum. When you make changes in ModelType enum, don't forget to // update the |kModelTypeInfoMap| struct in model_type.cc and also the // SyncModelType histogram suffix in histograms.xml enum ModelType { // Object type unknown. This may be used when: // a) The client received *valid* data from a data type which this version // is unaware of (only present in versions newer than this one, or present // in older versions but removed since). // b) The client received invalid data from the server due to some error. // c) A data object was just created, in which case this is a temporary state. UNSPECIFIED, // ------------------------------------ Start of "real" model types. // The model types declared before here are somewhat special, as they // they do not correspond to any browser data model. The remaining types // are bona fide model types; all have a related browser data model and // can be represented in the protocol using a specific Message type in the // EntitySpecifics protocol buffer. // // A bookmark folder or a bookmark URL object. BOOKMARKS, FIRST_USER_MODEL_TYPE = BOOKMARKS, // Declared 2nd, for debugger prettiness. FIRST_REAL_MODEL_TYPE = FIRST_USER_MODEL_TYPE, // A preference object, a.k.a. "Settings". PREFERENCES, // A password object. PASSWORDS, // An autofill_profile object, i.e. an address. AUTOFILL_PROFILE, // An autofill object, i.e. an autocomplete entry keyed to an HTML form field. AUTOFILL, // Credentials related to an autofill wallet instrument; aka the CVC/CVV code. AUTOFILL_WALLET_CREDENTIAL, // Credit cards and customer data from the user's account. These are read-only // on the client. AUTOFILL_WALLET_DATA, // Usage counts and last use dates for Wallet cards. This data is both // readable and writable. AUTOFILL_WALLET_METADATA, // Offers and rewards from the user's account. These are read-only on the // client side. AUTOFILL_WALLET_OFFER, // Autofill usage data of a payment method related to a specific merchant. AUTOFILL_WALLET_USAGE, // A theme object. THEMES, // An extension object. EXTENSIONS, // An object representing a custom search engine. SEARCH_ENGINES, // An object representing a browser session, e.g. an open tab. This is used // for "Open Tabs". SESSIONS, // An app object. APPS, // An app setting from the extension settings API. APP_SETTINGS, // An extension setting from the extension settings API. EXTENSION_SETTINGS, // History delete directives, used to propagate history deletions (e.g. based // on a time range). HISTORY_DELETE_DIRECTIVES, // Custom spelling dictionary entries. DICTIONARY, // Client-specific metadata, synced before other user types. DEVICE_INFO, // These preferences are synced before other user types and are never // encrypted. PRIORITY_PREFERENCES, // Supervised user settings. Cannot be encrypted. SUPERVISED_USER_SETTINGS, // App List items, used by the ChromeOS app launcher. APP_LIST, // ARC package items, i.e. Android apps on ChromeOS. ARC_PACKAGE, // Printer device information. ChromeOS only. PRINTERS, // Reading list items. READING_LIST, // Commit only user events. USER_EVENTS, // Commit only user consents. USER_CONSENTS, // Tabs sent between devices. SEND_TAB_TO_SELF, // Commit only security events. SECURITY_EVENTS, // Wi-Fi network configurations + credentials WIFI_CONFIGURATIONS, // A web app object. WEB_APPS, // A WebAPK object. WEB_APKS, // OS-specific preferences (a.k.a. "OS settings"). ChromeOS only. OS_PREFERENCES, // Synced before other user types. Never encrypted. ChromeOS only. OS_PRIORITY_PREFERENCES, // Commit only sharing message object. SHARING_MESSAGE, // A workspace desk saved by user. ChromeOS only. WORKSPACE_DESK, // Synced history. An entity roughly corresponds to a navigation. HISTORY, // Trusted Authorization Servers for printers. ChromeOS only. PRINTERS_AUTHORIZATION_SERVERS, // Contact information from the Google Address Storage. CONTACT_INFO, // A tab group saved by a user. Currently only supported on desktop platforms // (Linux, Mac, Windows, ChromeOS) and Android. SAVED_TAB_GROUP, // Power bookmarks are features associated with bookmarks(i.e. notes, price // tracking). Their life cycle are synced with bookmarks. POWER_BOOKMARK, // WebAuthn credentials, more commonly known as passkeys. WEBAUTHN_CREDENTIAL, // Invitations for sending passwords. Outgoing invitation from one user will // become an incoming one for another. INCOMING_PASSWORD_SHARING_INVITATION, OUTGOING_PASSWORD_SHARING_INVITATION, // Data related to tab group sharing. SHARED_TAB_GROUP_DATA, // Special datatype to notify client about People Group changes. Read-only on // the client. COLLABORATION_GROUP, // Origin-specific email addresses forwarded from the user's account. // Read-only on the client. PLUS_ADDRESS, // Product comparison groups. PRODUCT_COMPARISON, // Browser cookies, ChromeOS only. COOKIES, // Settings for PLUS_ADDRESS forwarded from the user's account. Since the // settings originate from the user's account, this is not reusing any of the // standard syncable prefs. PLUS_ADDRESS_SETTING, LAST_USER_MODEL_TYPE = PLUS_ADDRESS_SETTING, // ---- Control Types ---- // An object representing a set of Nigori keys. NIGORI, LAST_REAL_MODEL_TYPE = NIGORI, // NEW ENTRIES MUST BE ADDED ABOVE THIS. LAST_ENTRY = LAST_REAL_MODEL_TYPE, }; using ModelTypeSet = base::EnumSet<ModelType, FIRST_REAL_MODEL_TYPE, LAST_REAL_MODEL_TYPE>; constexpr int GetNumModelTypes() { return static_cast<int>(ModelType::LAST_ENTRY) + 1; } // A version of the ModelType enum for use in histograms. ModelType does not // have stable values (e.g. new ones may be inserted in the middle), so it can't // be recorded directly. // Instead of using entries from this enum directly, you'll usually want to get // them via ModelTypeHistogramValue(model_type). // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. When you add a new entry or when you // deprecate an existing one, also update SyncModelTypes in enums.xml and // SyncModelType suffix in histograms.xml. // LINT.IfChange(SyncModelTypes) enum class ModelTypeForHistograms { kUnspecified = 0, // kTopLevelFolder = 1, kBookmarks = 2, kPreferences = 3, kPasswords = 4, kAutofillProfile = 5, kAutofill = 6, kThemes = 7, // kDeprecatedTypedUrls = 8, kExtensions = 9, kSearchEngines = 10, kSessions = 11, kApps = 12, kAppSettings = 13, kExtensionSettings = 14, // kDeprecatedAppNotifications = 15, kHistoryDeleteDirectices = 16, kNigori = 17, kDeviceInfo = 18, // kDeprecatedExperiments = 19, // kDeprecatedSyncedNotifications = 20, kPriorityPreferences = 21, kDictionary = 22, // kFaviconImages = 23, // kFaviconTracking = 24, kProxyTabs = 25, kSupervisedUserSettings = 26, // kDeprecatedSupervisedUsers = 27, // kDeprecatedArticles = 28, kAppList = 29, // kDeprecatedSupervisedUserSharedSettings = 30, // kDeprecatedSyncedNotificationAppInfo = 31, // kDeprecatedWifiCredentials = 32, kDeprecatedSupervisedUserAllowlists = 33, kAutofillWalletData = 34, kAutofillWalletMetadata = 35, kArcPackage = 36, kPrinters = 37, kReadingList = 38, kUserEvents = 39, // kDeprecatedMountainShares = 40, kUserConsents = 41, kSendTabToSelf = 42, kSecurityEvents = 43, kWifiConfigurations = 44, kWebApps = 45, kOsPreferences = 46, kOsPriorityPreferences = 47, kSharingMessage = 48, kAutofillWalletOffer = 49, kWorkspaceDesk = 50, kHistory = 51, kPrintersAuthorizationServers = 52, kContactInfo = 53, kAutofillWalletUsage = 54, // kDeprecatedSegmentation = 55, kSavedTabGroups = 56, kPowerBookmark = 57, kWebAuthnCredentials = 58, kIncomingPasswordSharingInvitations = 59, kOutgoingPasswordSharingInvitations = 60, kAutofillWalletCredential = 61, kWebApks = 62, kSharedTabGroupData = 63, kCollaborationGroup = 64, kPlusAddresses = 65, kProductComparison = 66, kCookies = 67, kPlusAddressSettings = 68, kMaxValue = kPlusAddressSettings, }; // LINT.ThenChange(/tools/metrics/histograms/metadata/sync/enums.xml:SyncModelTypes) // Used to mark the type of EntitySpecifics that has no actual data. void AddDefaultFieldValue(ModelType type, sync_pb::EntitySpecifics* specifics); // Extract the model type from an EntitySpecifics field. ModelType is a // local concept: the enum is not in the protocol. ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics); // Protocol types are those types that have actual protocol buffer // representations. This is the same as the "real" model types, i.e. all types // except UNSPECIFIED. constexpr ModelTypeSet ProtocolTypes() { // Note that ModelTypeSet only covers the real types, not UNSPECIFIED. static_assert(!ModelTypeSet::All().Has(ModelType::UNSPECIFIED)); return ModelTypeSet::All(); } // These are the normal user-controlled types. This is to distinguish from // ControlTypes which are always enabled. Note that some of these share a // preference flag, so not all of them are individually user-selectable. constexpr ModelTypeSet UserTypes() { return ModelTypeSet::FromRange(FIRST_USER_MODEL_TYPE, LAST_USER_MODEL_TYPE); } // User types which are not user-controlled. constexpr ModelTypeSet AlwaysPreferredUserTypes() { return {DEVICE_INFO, USER_CONSENTS, PLUS_ADDRESS, PLUS_ADDRESS_SETTING, SECURITY_EVENTS, SEND_TAB_TO_SELF, SUPERVISED_USER_SETTINGS, SHARING_MESSAGE}; } // User types which are always encrypted. constexpr ModelTypeSet AlwaysEncryptedUserTypes() { // If you add a new model type here that is conceptually different from a // password, make sure you audit UI code that refers to these types as // passwords, e.g. consumers of IsEncryptEverythingEnabled(). return {AUTOFILL_WALLET_CREDENTIAL, PASSWORDS, WIFI_CONFIGURATIONS, COOKIES}; } // This is the subset of UserTypes() that have priority over other types. These // types are synced before other user types (both for get_updates and commits). // This mostly matters during initial sync, since priority types can become // active before all the data for non-prio types has been downloaded (which may // be a lot of data). constexpr ModelTypeSet HighPriorityUserTypes() { return { // The "Send to Your Devices" feature needs fast updating of the list of // your devices and also fast sending of the actual messages. DEVICE_INFO, SHARING_MESSAGE, // For supervised users, it is important to quickly deliver changes in // settings and in allowed sites to the supervised user. SUPERVISED_USER_SETTINGS, // These are by definition preferences for which it is important that the // client picks them up quickly (also because these can get changed // server-side). For example, such a pref could control whether a // non-priority type gets enabled (Wallet has such a pref). PRIORITY_PREFERENCES, OS_PRIORITY_PREFERENCES, // Speed matters for the user experience when sync gets enabled directly // in the creation flow for a new profile. If the user has no theme in // their sync data, the browser offers a theme customization bubble which // should appear soon after opening the browser. THEMES}; } // This is the subset of UserTypes() that have a *lower* priority than other // types. These types are synced only after all other user types (both for // get_updates and commits). This mostly matters during initial sync, since // high-priority and regular types can become active before all the data for // low-priority types has been downloaded (which may be a lot of data). constexpr ModelTypeSet LowPriorityUserTypes() { return { // Downloading History may take a while, but should not block the download // of other data types. HISTORY, // User Events should not block or delay commits for other data types. USER_EVENTS, // Incoming password sharing invitations must be processed after // Passwords data type to prevent storing incoming passwords locally first // and overwriting the remote password during conflict resolution. INCOMING_PASSWORD_SHARING_INVITATION}; } // Returns a list of all control types. // // The control types are intended to contain metadata nodes that are essential // for the normal operation of the syncer. As such, they have the following // special properties: // - They are downloaded early during SyncBackend initialization. // - They are always enabled. Users may not disable these types. // - Their contents are not encrypted automatically. // - They support custom update application and conflict resolution logic. // - All change processing occurs on the sync thread. constexpr ModelTypeSet ControlTypes() { return {NIGORI}; } // Types that may commit data, but should never be included in a GetUpdates. // These are never encrypted. constexpr ModelTypeSet CommitOnlyTypes() { return {USER_EVENTS, USER_CONSENTS, SECURITY_EVENTS, SHARING_MESSAGE, OUTGOING_PASSWORD_SHARING_INVITATION}; } // Types for which downloaded updates are applied immediately, before all // updates are downloaded and the Sync cycle finishes. // For these types, ModelTypeSyncBridge::MergeFullSyncData() will never be // called (since without downloading all the data, no initial merge is // possible). constexpr ModelTypeSet ApplyUpdatesImmediatelyTypes() { return {HISTORY}; } // Types for which `collaboration_id` field in SyncEntity should be provided. // These types also support `gc_directive` for collaborations to track active // collaboratons. constexpr ModelTypeSet SharedTypes() { return {SHARED_TAB_GROUP_DATA}; } // Types triggering a warning when the user signs out and the types have // unsynced data. The warning offers the user to either save the data locally or // abort sign-out, depending on the platform. constexpr ModelTypeSet TypesRequiringUnsyncedDataCheckOnSignout() { return {syncer::BOOKMARKS, syncer::CONTACT_INFO, syncer::PASSWORDS, syncer::READING_LIST, syncer::SAVED_TAB_GROUP}; } // User types that can be encrypted, which is a subset of UserTypes() and a // superset of AlwaysEncryptedUserTypes(); ModelTypeSet EncryptableUserTypes(); // Determine a model type from the field number of its associated // EntitySpecifics field. Returns UNSPECIFIED if the field number is // not recognized. ModelType GetModelTypeFromSpecificsFieldNumber(int field_number); namespace internal { // Obtain model type from field_number and add to model_types if valid. void GetModelTypeSetFromSpecificsFieldNumberListHelper( ModelTypeSet& model_types, int field_number); } // namespace internal // Build a ModelTypeSet from a list of field numbers. Any unknown field numbers // are ignored. template <typename ContainerT> ModelTypeSet GetModelTypeSetFromSpecificsFieldNumberList( const ContainerT& field_numbers) { ModelTypeSet model_types; for (int field_number : field_numbers) { internal::GetModelTypeSetFromSpecificsFieldNumberListHelper(model_types, field_number); } return model_types; } // Return the field number of the EntitySpecifics field associated with // a model type. int GetSpecificsFieldNumberFromModelType(ModelType model_type); // Returns a string with application lifetime that represents the name of // |model_type|. const char* ModelTypeToDebugString(ModelType model_type); // Returns a string with application lifetime that is used as the histogram // suffix for |model_type|. const char* ModelTypeToHistogramSuffix(ModelType model_type); // Some histograms take an integer parameter that represents a model type. // The mapping from ModelType to integer is defined here. It defines a // completely different order than the ModelType enum itself. The mapping should // match the SyncModelTypes mapping from integer to labels defined in enums.xml. ModelTypeForHistograms ModelTypeHistogramValue(ModelType model_type); // Returns for every model_type a positive unique integer that is stable over // time and thus can be used when persisting data. int ModelTypeToStableIdentifier(ModelType model_type); // Returns the comma-separated string representation of |model_types|. std::string ModelTypeSetToDebugString(ModelTypeSet model_types); // Necessary for compatibility with EXPECT_EQ and the like. std::ostream& operator<<(std::ostream& out, ModelTypeSet model_type_set); // Returns a string corresponding to the root tag as exposed in the sync // protocol as the root entity's ID, which makes the root entity trivially // distinguishable from regular entities. Note that the existence of a root // entity in the sync protocol is a legacy artifact, and modern clients ignore // it except for bookmarks and Nigori. For this reason, the server may or may // not return the root entity. std::string ModelTypeToProtocolRootTag(ModelType model_type); // As opposed to ModelTypeToProtocolRootTag(), this returns a string that isn't // exposed in the sync protocol, but that is still stable and thus can be used // for local persistence. It is guaranteed to be lowercase. const char* GetModelTypeLowerCaseRootTag(ModelType model_type); // Returns true if |model_type| is a real datatype bool IsRealDataType(ModelType model_type); // Returns true if |model_type| is an act-once type. Act once types drop // entities after applying them. Drops are deletes that are not synced to other // clients. bool IsActOnceDataType(ModelType model_type); } // namespace syncer #endif // COMPONENTS_SYNC_BASE_MODEL_TYPE_H_ `