blob: 5e5cd21467a6901c41f4bdebd7e6949207cadeb6 [file] [log] [blame]
// 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_CLIENT_POLICY_CONTROLLER_H_
#define COMPONENTS_OFFLINE_PAGES_CORE_CLIENT_POLICY_CONTROLLER_H_
#include <stdint.h>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "base/time/time.h"
#include "components/offline_pages/core/offline_page_client_policy.h"
namespace offline_pages {
// This is the class which is a singleton for offline page model
// to get client policies based on namespaces.
class ClientPolicyController {
public:
ClientPolicyController();
~ClientPolicyController();
// Generates a client policy from the input values.
static const OfflinePageClientPolicy MakePolicy(
const std::string& name_space,
LifetimePolicy::LifetimeType lifetime_type,
const base::TimeDelta& expiration_period,
size_t page_limit,
size_t pages_allowed_per_url);
// Get the client policy for |name_space|.
const OfflinePageClientPolicy& GetPolicy(const std::string& name_space) const;
// Returns a list of all known namespaces.
std::vector<std::string> GetAllNamespaces() const;
// Returns whether pages for |name_space| should be removed on cache reset.
bool IsRemovedOnCacheReset(const std::string& name_space) const;
// Returns whether pages for |name_space| are shown in Download UI.
bool IsSupportedByDownload(const std::string& name_space) const;
const std::vector<std::string>& GetNamespacesSupportedByDownload() const;
// Returns whether pages for |name_space| are shown in recent tabs UI,
// currently only available on NTP.
bool IsShownAsRecentlyVisitedSite(const std::string& name_space) const;
const std::vector<std::string>& GetNamespacesShownAsRecentlyVisitedSite()
const;
// Returns whether pages for |name_space| should never be shown outside the
// tab they were generated in.
bool IsRestrictedToOriginalTab(const std::string& name_space) const;
const std::vector<std::string>& GetNamespacesRestrictedToOriginalTab() const;
void AddPolicyForTest(const std::string& name_space,
const OfflinePageClientPolicyBuilder& builder);
private:
// The map from name_space to a client policy. Will be generated
// as pre-defined values for now.
std::map<std::string, OfflinePageClientPolicy> policies_;
// Memoizing results.
mutable std::unique_ptr<std::vector<std::string>> download_namespace_cache_;
mutable std::unique_ptr<std::vector<std::string>> recent_tab_namespace_cache_;
mutable std::unique_ptr<std::vector<std::string>> show_in_original_tab_cache_;
DISALLOW_COPY_AND_ASSIGN(ClientPolicyController);
};
} // namespace offline_pages
#endif // COMPONENTS_OFFLINE_PAGES_CORE_CLIENT_POLICY_CONTROLLER_H_