blob: 4fccbbd39ff23e6a5fa2a99a0c89805c5dbe4d1e [file] [log] [blame]
// Copyright 2019 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_PREVIEWS_CONTENT_PREVIEWS_OPTIMIZATION_GUIDE_DECIDER_H_
#define COMPONENTS_PREVIEWS_CONTENT_PREVIEWS_OPTIMIZATION_GUIDE_DECIDER_H_
#include "components/previews/content/previews_optimization_guide.h"
#include <string>
#include <unordered_set>
#include <vector>
#include "base/containers/mru_cache.h"
#include "components/optimization_guide/proto/hints.pb.h"
namespace optimization_guide {
class OptimizationGuideDecider;
} // namespace optimization_guide
namespace previews {
// An |optimization_guide::OptimizationDecider| backed implementation of
// |PreviewsOptimizationGuide|.
class PreviewsOptimizationGuideDecider : public PreviewsOptimizationGuide {
public:
explicit PreviewsOptimizationGuideDecider(
optimization_guide::OptimizationGuideDecider* optimization_guide_decider);
~PreviewsOptimizationGuideDecider() override;
// PreviewsOptimizationGuide implementation:
bool IsReady() const override;
bool CanApplyPreview(PreviewsUserData* previews_data,
content::NavigationHandle* navigation_handle,
PreviewsType type) override;
bool MaybeLoadOptimizationHints(content::NavigationHandle* navigation_handle,
base::OnceClosure callback) override;
bool GetResourceLoadingHints(
const GURL& url,
std::vector<std::string>* out_resource_patterns_to_block) override;
void LogHintCacheMatch(const GURL& url, bool is_committed) const override;
void ClearFetchedHints() override;
private:
// The Optimization Guide Decider to consult for whether an optimization can
// be applied. Not owned.
optimization_guide::OptimizationGuideDecider* optimization_guide_decider_;
// An in-memory cache of resource loading hints keyed by the URL. This allows
// us to avoid making too many calls to |optimization_guide_decider_|.
base::MRUCache<GURL, std::vector<std::string>> resource_loading_hints_cache_;
// The optimization types registered with |optimization_guide_decider_|.
const std::unordered_set<optimization_guide::proto::OptimizationType>
registered_optimization_types_;
DISALLOW_COPY_AND_ASSIGN(PreviewsOptimizationGuideDecider);
};
} // namespace previews
#endif // COMPONENTS_PREVIEWS_CONTENT_PREVIEWS_OPTIMIZATION_GUIDE_DECIDER_H_