| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_CLIENT_POLICY_H_ |
| #define COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_CLIENT_POLICY_H_ |
| |
| #include <stdint.h> |
| |
| #include <string> |
| |
| #include "base/time/time.h" |
| |
| namespace offline_pages { |
| |
| static const size_t kUnlimitedPages = 0; |
| |
| // The struct describing the lifetime policy of offline pages. |
| // The following behaviors are controlled by policy: |
| // a. Persistency of the offline page. |
| // b. Expiration time of an offline page |
| // c. Limit of number of pages offline. |
| struct LifetimePolicy { |
| // Type of the client, indicating where the archived page would be saved |
| // and whether it could be kept indefinitely. |
| enum class LifetimeType { |
| TEMPORARY, |
| PERSISTENT, |
| }; |
| |
| // Type of the page generated by the client. |
| LifetimeType lifetime_type; |
| |
| // The time after which the page expires. |
| // A TimeDelta of 0 means no expiration. |
| base::TimeDelta expiration_period; |
| |
| // The maximum number of pages allowed to be saved by the namespace. |
| // kUnlimitedPages (defined above) means no limit set. |
| size_t page_limit; |
| |
| LifetimePolicy(LifetimeType init_lifetime_type, size_t init_page_limit) |
| : lifetime_type(init_lifetime_type), |
| expiration_period(base::TimeDelta::FromDays(0)), |
| page_limit(init_page_limit) {} |
| }; |
| |
| // The struct describing feature set of the offline pages. |
| struct FeaturePolicy { |
| // Whether pages are shown in download ui. |
| bool is_supported_by_download; |
| // Whether pages are shown in recent tabs ui. |
| bool is_supported_by_recent_tabs; |
| // Whether pages should only be viewed in the tab they were generated in. |
| bool only_shown_in_original_tab; |
| // Whether pages are removed on user-initiated cache reset. Defaults to true. |
| bool is_removed_on_cache_reset; |
| // Whether the namespace should be disabled if prefetching-related preferences |
| // are disabled. |
| bool disabled_when_prefetch_disabled; |
| |
| FeaturePolicy() |
| : is_supported_by_download(false), |
| is_supported_by_recent_tabs(false), |
| only_shown_in_original_tab(false), |
| is_removed_on_cache_reset(true), |
| disabled_when_prefetch_disabled(false) {} |
| }; |
| |
| // The struct describing policies for various namespaces (Bookmark, Last-N etc.) |
| // used by offline page model. The name_space is supposed to be key, so that |
| // it's sufficient to compare name_space only when doing comparisons. |
| struct OfflinePageClientPolicy { |
| // Namespace to which the policy applied. |
| std::string name_space; |
| |
| // Policy to control the lifetime of a page generated by this namespace. |
| LifetimePolicy lifetime_policy; |
| |
| // How many pages for the same online URL can be stored at any time. |
| // kUnlimitedPages means there's no limit. |
| size_t pages_allowed_per_url; |
| |
| FeaturePolicy feature_policy; |
| |
| OfflinePageClientPolicy(std::string namespace_val, |
| LifetimePolicy lifetime_policy_val, |
| size_t pages_allowed_per_url_val, |
| FeaturePolicy feature_policy_val) |
| : name_space(namespace_val), |
| lifetime_policy(lifetime_policy_val), |
| pages_allowed_per_url(pages_allowed_per_url_val), |
| feature_policy(feature_policy_val){}; |
| |
| OfflinePageClientPolicy(std::string namespace_val, |
| LifetimePolicy lifetime_policy_val, |
| size_t pages_allowed_per_url_val) |
| : OfflinePageClientPolicy(namespace_val, |
| lifetime_policy_val, |
| pages_allowed_per_url_val, |
| FeaturePolicy()) {} |
| }; |
| |
| class OfflinePageClientPolicyBuilder { |
| public: |
| OfflinePageClientPolicyBuilder(const std::string& name_space, |
| LifetimePolicy::LifetimeType lifetime_type, |
| size_t page_limit, |
| size_t pages_allowed_per_url) |
| : policy_( |
| OfflinePageClientPolicy(name_space, |
| LifetimePolicy(lifetime_type, page_limit), |
| pages_allowed_per_url)) {} |
| |
| ~OfflinePageClientPolicyBuilder() {} |
| |
| // Calling build does not reset the object inside. |
| const OfflinePageClientPolicy Build() const { return policy_; } |
| |
| OfflinePageClientPolicyBuilder& SetExpirePeriod( |
| const base::TimeDelta& expire_period) { |
| policy_.lifetime_policy.expiration_period = expire_period; |
| return *this; |
| } |
| |
| OfflinePageClientPolicyBuilder& SetIsSupportedByDownload( |
| const bool is_downloaded) { |
| policy_.feature_policy.is_supported_by_download = is_downloaded; |
| return *this; |
| } |
| |
| OfflinePageClientPolicyBuilder& SetIsSupportedByRecentTabs( |
| const bool is_recent_tabs) { |
| policy_.feature_policy.is_supported_by_recent_tabs = is_recent_tabs; |
| return *this; |
| } |
| |
| OfflinePageClientPolicyBuilder& SetIsRemovedOnCacheReset( |
| const bool removed_on_cache_reset) { |
| policy_.feature_policy.is_removed_on_cache_reset = removed_on_cache_reset; |
| return *this; |
| } |
| |
| OfflinePageClientPolicyBuilder& SetIsOnlyShownInOriginalTab( |
| const bool only_shown_in_original_tab) { |
| policy_.feature_policy.only_shown_in_original_tab = |
| only_shown_in_original_tab; |
| return *this; |
| } |
| |
| OfflinePageClientPolicyBuilder& SetIsDisabledWhenPrefetchDisabled( |
| const bool disabled_when_prefetch_disabled) { |
| policy_.feature_policy.disabled_when_prefetch_disabled = |
| disabled_when_prefetch_disabled; |
| return *this; |
| } |
| |
| private: |
| OfflinePageClientPolicy policy_; |
| |
| DISALLOW_COPY_AND_ASSIGN(OfflinePageClientPolicyBuilder); |
| }; |
| |
| } // namespace offline_pages |
| |
| #endif // COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_CLIENT_POLICY_H_ |