// 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_OPTIMIZATION_GUIDE_HINTS_PROCESSING_UTIL_H_
#define COMPONENTS_OPTIMIZATION_GUIDE_HINTS_PROCESSING_UTIL_H_

#include <string>

#include "components/optimization_guide/proto/hints.pb.h"
#include "net/nqe/effective_connection_type.h"

class GURL;

namespace optimization_guide {
class HintUpdateData;

// Returns the string representation of the optimization type.
std::string GetStringNameForOptimizationType(
    proto::OptimizationType optimization_type);

// Returns whether |optimization| is disabled subject to it being part of
// an optimization hint experiment. |optimization| could be disabled either
// because: it is only to be used with a named optimization experiment; or it
// is not to be used with a named excluded experiment. One experiment name
// may be configured for the client with the experiment_name parameter to the
// kOptimizationHintsExperiments feature.
bool IsDisabledPerOptimizationHintExperiment(
    const proto::Optimization& optimization);

// Returns the matching PageHint for |gurl| if found in |hint|.
const proto::PageHint* FindPageHintForURL(const GURL& gurl,
                                          const proto::Hint* hint);

// The host is hashed and returned as a string because base::DictionaryValue
// only accepts strings as keys. Note, some hash collisions could occur on
// hosts. For querying the blacklist, collisions are acceptable as they would
// only block additional hosts. For updating the blacklist, a collision would
// enable a site that should remain on the blacklist. However, the likelihood
// of a collision for the number of hosts allowed in the blacklist is
// practically zero.
std::string HashHostForDictionary(const std::string& host);

// Verifies and processes |hints| and places the ones it supports into
// |hint_update_data|.
//
// Returns true if there was at least one hint moved into |hint_update_data|.
bool ProcessHints(google::protobuf::RepeatedPtrField<proto::Hint>* hints,
                  HintUpdateData* hint_update_data);

// Converts |proto_ect| into a net::EffectiveConnectionType.
net::EffectiveConnectionType ConvertProtoEffectiveConnectionType(
    proto::EffectiveConnectionType proto_ect);

}  // namespace optimization_guide

#endif  // COMPONENTS_OPTIMIZATION_GUIDE_HINTS_PROCESSING_UTIL_H_
