123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- // 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.
- #include "components/optimization_guide/core/hints_processing_util.h"
- #include <string>
- #include "base/containers/flat_set.h"
- #include "base/hash/hash.h"
- #include "base/metrics/field_trial_params.h"
- #include "base/strings/stringprintf.h"
- #include "components/optimization_guide/core/optimization_guide_features.h"
- #include "components/optimization_guide/core/store_update_data.h"
- #include "components/optimization_guide/core/url_pattern_with_wildcards.h"
- #include "net/base/url_util.h"
- #include "url/gurl.h"
- namespace optimization_guide {
- std::string GetStringNameForOptimizationType(
- proto::OptimizationType optimization_type) {
- switch (optimization_type) {
- case proto::OptimizationType::TYPE_UNSPECIFIED:
- return "Unspecified";
- case proto::OptimizationType::NOSCRIPT:
- return "NoScript";
- case proto::OptimizationType::RESOURCE_LOADING:
- return "ResourceLoading";
- case proto::OptimizationType::LITE_PAGE_REDIRECT:
- return "LitePageRedirect";
- case proto::OptimizationType::METADATA_FETCH_VALIDATION:
- return "MetadataFetchValidation";
- case proto::OptimizationType::DEFER_ALL_SCRIPT:
- return "DeferAllScript";
- case proto::OptimizationType::PERFORMANCE_HINTS:
- return "PerformanceHints";
- case proto::OptimizationType::LITE_PAGE:
- return "LitePage";
- case proto::OptimizationType::COMPRESS_PUBLIC_IMAGES:
- return "CompressPublicImages";
- case proto::OptimizationType::LOADING_PREDICTOR:
- return "LoadingPredictor";
- case proto::OptimizationType::FAST_HOST_HINTS:
- return "FastHostHints";
- case proto::OptimizationType::LITE_VIDEO:
- return "LiteVideo";
- case proto::OptimizationType::LINK_PERFORMANCE:
- return "LinkPerformance";
- case proto::OptimizationType::SHOPPING_PAGE_PREDICTOR:
- return "ShoppingPagePredictor";
- case proto::OptimizationType::LOGIN_DETECTION:
- return "LoginDetection";
- case proto::OptimizationType::MERCHANT_TRUST_SIGNALS:
- return "MerchantTrustSignals";
- case proto::OptimizationType::PRICE_TRACKING:
- return "PriceTracking";
- case proto::OptimizationType::BLOOM_FILTER_VALIDATION:
- return "BloomFilterValidation";
- case proto::OptimizationType::ABOUT_THIS_SITE:
- return "AboutThisSite";
- case proto::OptimizationType::MERCHANT_TRUST_SIGNALS_V2:
- return "MerchantTrustSignalsV2";
- case proto::OptimizationType::PAGE_ENTITIES:
- return "PageEntities";
- case proto::OptimizationType::HISTORY_CLUSTERS:
- return "HistoryClusters";
- case proto::OptimizationType::THANK_CREATOR_ELIGIBLE:
- return "ThankCreatorEligible";
- case proto::OptimizationType::IBAN_AUTOFILL_BLOCKED:
- return "IBANAutofillBlocked";
- }
- // The returned string is used to record histograms for the optimization type.
- //
- // Whenever a new value is added, make sure to add it to the OptimizationType
- // variant list in
- // //tools/metrics/histograms/metadata/optimization/histograms.xml. Also
- // update enums.xml when adding new value in OptimizationType.
- NOTREACHED();
- return std::string();
- }
- const proto::PageHint* FindPageHintForURL(const GURL& gurl,
- const proto::Hint* hint) {
- if (!hint) {
- return nullptr;
- }
- for (const auto& page_hint : hint->page_hints()) {
- if (page_hint.page_pattern().empty()) {
- continue;
- }
- URLPatternWithWildcards url_pattern(page_hint.page_pattern());
- if (url_pattern.Matches(gurl.spec())) {
- // Return the first matching page hint.
- return &page_hint;
- }
- }
- return nullptr;
- }
- std::string HashHostForDictionary(const std::string& host) {
- return base::StringPrintf("%x", base::PersistentHash(host));
- }
- net::EffectiveConnectionType ConvertProtoEffectiveConnectionType(
- proto::EffectiveConnectionType proto_ect) {
- switch (proto_ect) {
- case proto::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN:
- return net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
- case proto::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_OFFLINE:
- return net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_OFFLINE;
- case proto::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G:
- return net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G;
- case proto::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_2G:
- return net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_2G;
- case proto::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_3G:
- return net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_3G;
- case proto::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_4G:
- return net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_4G;
- }
- }
- bool IsValidURLForURLKeyedHint(const GURL& url) {
- if (!url.has_host())
- return false;
- if (net::IsLocalhost(url))
- return false;
- if (url.HostIsIPAddress())
- return false;
- if (!url.SchemeIsHTTPOrHTTPS())
- return false;
- if (url.has_username() || url.has_password())
- return false;
- return true;
- }
- } // namespace optimization_guide
|