// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_COMPONENTS_SECURITY_INTERSTITIALS_LOOKALIKES_LOOKALIKE_URL_TAB_ALLOW_LIST_H_
#define IOS_COMPONENTS_SECURITY_INTERSTITIALS_LOOKALIKES_LOOKALIKE_URL_TAB_ALLOW_LIST_H_
#include <set>
#include <string>
#import "ios/web/public/web_state_user_data.h"
// LookalikeUrlTabAllowList tracks the allowlist decisions for lookalike URLs.
// Decisions are scoped to the domain.
class LookalikeUrlTabAllowList
: public web::WebStateUserData<LookalikeUrlTabAllowList> {
public:
// LookalikeUrlAllowList is move-only.
LookalikeUrlTabAllowList(LookalikeUrlTabAllowList&& other);
LookalikeUrlTabAllowList& operator=(LookalikeUrlTabAllowList&& other);
~LookalikeUrlTabAllowList() override;
// Returns whether `domain` has been allowlisted.
bool IsDomainAllowed(const std::string& domain);
// Allows future navigations to `domain`.
void AllowDomain(const std::string& domain);
private:
explicit LookalikeUrlTabAllowList(web::WebState* web_state);
friend class web::WebStateUserData<LookalikeUrlTabAllowList>;
WEB_STATE_USER_DATA_KEY_DECL();
// Set of allowlisted domains.
std::set<std::string> allowed_domains_;
};
#endif // IOS_COMPONENTS_SECURITY_INTERSTITIALS_LOOKALIKES_LOOKALIKE_URL_TAB_ALLOW_LIST_H_