blob: b276e51b5ec835680b9042ec942aee326a27a543 [file] [log] [blame]
// Copyright 2024 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_CHROME_BROWSER_ENTERPRISE_CONNECTORS_IOS_ENTERPRISE_INTERSTITIAL_H_
#define IOS_CHROME_BROWSER_ENTERPRISE_CONNECTORS_IOS_ENTERPRISE_INTERSTITIAL_H_
#import "components/enterprise/connectors/core/enterprise_interstitial_base.h"
#import "ios/components/security_interstitials/ios_blocking_page_controller_client.h"
#import "ios/components/security_interstitials/ios_security_interstitial_page.h"
namespace enterprise_connectors {
class IOSEnterpriseInterstitial
: public security_interstitials::IOSSecurityInterstitialPage,
public EnterpriseInterstitialBase {
public:
static std::unique_ptr<IOSEnterpriseInterstitial> CreateBlockingPage(
const security_interstitials::UnsafeResource& resource);
static std::unique_ptr<IOSEnterpriseInterstitial> CreateWarningPage(
const security_interstitials::UnsafeResource& resource);
~IOSEnterpriseInterstitial() override;
// security_interstitials::IOSSecurityInterstitialPage:
std::string GetHtmlContents() const override;
void HandleCommand(
security_interstitials::SecurityInterstitialCommand command) override;
bool ShouldCreateNewNavigation() const override;
void PopulateInterstitialStrings(
base::Value::Dict& load_time_data) const override;
void WasDismissed() override;
// EnterpriseInterstitialBase:
const std::vector<security_interstitials::UnsafeResource>& unsafe_resources()
const override;
GURL request_url() const override;
protected:
class EnterprisePageControllerClient
: public security_interstitials::IOSBlockingPageControllerClient {
public:
EnterprisePageControllerClient(
const security_interstitials::UnsafeResource& resource);
~EnterprisePageControllerClient() override;
// Handles commands forwarded from the IOSEnterpriseInterstitial.
void HandleCommand(
security_interstitials::SecurityInterstitialCommand command);
// security_interstitials::ControllerClient:
void Proceed() override;
void GoBack() override;
void GoBackAfterNavigationCommitted() override;
private:
// Removes pending navigation decisions from the allow list. Call this if
// the user goes back or closes the interstitial.
void RemovePendingUnsafeNavigationDecisionsFromAllowList();
// Stored details from the UnsafeResource needed for command handling.
GURL request_url_;
safe_browsing::SBThreatType threat_type_;
safe_browsing::ThreatSource threat_source_;
};
IOSEnterpriseInterstitial(
const security_interstitials::UnsafeResource& resource,
std::unique_ptr<EnterprisePageControllerClient> client);
private:
// The unsafe resource(s) triggering the enterprise blocking/warning page.
std::vector<security_interstitials::UnsafeResource> unsafe_resources_;
// The controller client responsible for handling user interactions and
// navigation logic.
std::unique_ptr<EnterprisePageControllerClient> client_;
};
} // namespace enterprise_connectors
#endif // IOS_CHROME_BROWSER_ENTERPRISE_CONNECTORS_IOS_ENTERPRISE_INTERSTITIAL_H_