chromium/ios/components/security_interstitials/safe_browsing/safe_browsing_client.h

// Copyright 2022 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_SAFE_BROWSING_SAFE_BROWSING_CLIENT_H_
#define IOS_COMPONENTS_SECURITY_INTERSTITIALS_SAFE_BROWSING_SAFE_BROWSING_CLIENT_H_

#include "base/memory/weak_ptr.h"
#include "components/keyed_service/core/keyed_service.h"

namespace safe_browsing {
class HashRealTimeService;
class RealTimeUrlLookupService;
}  // namespace safe_browsing

namespace security_interstitials {
struct UnsafeResource;
}  // namespace security_interstitials

namespace variations {
class VariationsService;
}  // namespace variations

namespace web {
class WebState;
}  // namespace web

class GURL;
class SafeBrowsingService;

// Abstract interface to be implemented by clients of ios safe browsing.
class SafeBrowsingClient : public KeyedService {
 public:
  // Returns this as a weak pointer.
  virtual base::WeakPtr<SafeBrowsingClient> AsWeakPtr() = 0;
  // Gets the safe browsing service for this client. Must not be nullptr.
  virtual SafeBrowsingService* GetSafeBrowsingService() = 0;
  // Gets the real time url look up service. Clients may return nullptr.
  virtual safe_browsing::RealTimeUrlLookupService*
  GetRealTimeUrlLookupService() = 0;
  // Gets the hash-real-time service factory. Client may return nullptr.
  virtual safe_browsing::HashRealTimeService* GetHashRealTimeService() = 0;
  // Gets the variations service. Clients may return nullptr.
  virtual variations::VariationsService* GetVariationsService() = 0;
  // Returns whether or not `resource` should be blocked from loading.
  virtual bool ShouldBlockUnsafeResource(
      const security_interstitials::UnsafeResource& resource) const = 0;
  // Called when safe browsing decided to cancel loading in the main frame.
  // `web_state` The associated web state.
  // `url` The url which was cancelled.
  virtual void OnMainFrameUrlQueryCancellationDecided(web::WebState* web_state,
                                                      const GURL& url) = 0;
};

#endif  // IOS_COMPONENTS_SECURITY_INTERSTITIALS_SAFE_BROWSING_SAFE_BROWSING_CLIENT_H_