blob: c58e5903925a2614726ee9b4df2bccb09c8b12cc [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 <map>
#include <string>
#include <vector>
#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(const ClientPolicyController&) = delete;
~ClientPolicyController();
ClientPolicyController& operator=(const ClientPolicyController&) = delete;
// 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;
const std::vector<std::string>& GetNamespacesRemovedOnCacheReset() 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 explicitly offlined due to user
// action.
bool IsUserRequestedDownload(const std::string& name_space) const;
const std::vector<std::string>& GetNamespacesForUserRequestedDownload() 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 only be opened in a
// specifically assigned tab.
// Note: For this restriction to work offline pages saved to this namespace
// must have the respective tab id set to their ClientId::id field.
bool IsRestrictedToTabFromClientId(const std::string& name_space) const;
bool IsDisabledWhenPrefetchDisabled(const std::string& name_space) const;
// Returns whether pages for |name_space| originate from suggested URLs and
// are downloaded on behalf of user.
bool IsSuggested(const std::string& name_space) const;
// Returns whether we should allow pages for |name_space| to trigger
// downloads.
bool ShouldAllowDownloads(const std::string& name_space) const;
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_;
std::vector<std::string> cache_reset_namespaces_;
std::vector<std::string> download_namespaces_;
std::vector<std::string> user_requested_download_namespaces_;
std::vector<std::string> recent_tab_namespaces_;
};
} // namespace offline_pages
#endif // COMPONENTS_OFFLINE_PAGES_CORE_CLIENT_POLICY_CONTROLLER_H_