summaryrefslogtreecommitdiff
path: root/chromium/components/previews/content/previews_hints.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/previews/content/previews_hints.h')
-rw-r--r--chromium/components/previews/content/previews_hints.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/chromium/components/previews/content/previews_hints.h b/chromium/components/previews/content/previews_hints.h
new file mode 100644
index 00000000000..60a70473e72
--- /dev/null
+++ b/chromium/components/previews/content/previews_hints.h
@@ -0,0 +1,75 @@
+// Copyright 2018 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_HINTS_H_
+#define COMPONENTS_PREVIEWS_CONTENT_PREVIEWS_HINTS_H_
+
+#include <map>
+#include <memory>
+#include <set>
+
+#include "base/macros.h"
+#include "base/sequence_checker.h"
+#include "components/optimization_guide/proto/hints.pb.h"
+#include "components/previews/content/activation_list.h"
+#include "components/previews/content/previews_hints.h"
+#include "components/previews/core/previews_user_data.h"
+#include "components/url_matcher/url_matcher.h"
+
+class GURL;
+
+namespace optimization_guide {
+struct ComponentInfo;
+}
+
+namespace previews {
+
+// Holds previews hints extracted from the configuration.
+class PreviewsHints {
+ public:
+ ~PreviewsHints();
+
+ // Creates a Hints instance from the provided configuration.
+ static std::unique_ptr<PreviewsHints> CreateFromConfig(
+ const optimization_guide::proto::Configuration& config,
+ const optimization_guide::ComponentInfo& info);
+
+ // Whether the URL is whitelisted for the given previews type. If so,
+ // |out_inflation_percent| will be populated if meta data available for it.
+ bool IsWhitelisted(const GURL& url,
+ PreviewsType type,
+ int* out_inflation_percent);
+
+ // Whether |url| is whitelisted for previews type |type|. The method may
+ // make the decision based only on a partial comparison (e.g., only the
+ // hostname of |url|). As such, the method may return true even if |type|
+ // can't be used for the previews.
+ bool IsHostWhitelistedAtNavigation(const GURL& url,
+ previews::PreviewsType type) const;
+
+ private:
+ PreviewsHints();
+
+ // The URLMatcher used to match whether a URL has any hints associated with
+ // it.
+ url_matcher::URLMatcher url_matcher_;
+
+ // Holds the activation list of hosts extracted from the server hints
+ // configuration.
+ std::unique_ptr<ActivationList> activation_list_;
+
+ // A map from the condition set ID to associated whitelist Optimization
+ // details.
+ std::map<url_matcher::URLMatcherConditionSet::ID,
+ std::set<std::pair<PreviewsType, int>>>
+ whitelist_;
+
+ SEQUENCE_CHECKER(sequence_checker_);
+
+ DISALLOW_COPY_AND_ASSIGN(PreviewsHints);
+};
+
+} // namespace previews
+
+#endif // COMPONENTS_PREVIEWS_CONTENT_PREVIEWS_HINTS_H_ \ No newline at end of file