chromium/chromecast/browser/general_audience_browsing_navigation_throttle.h

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_BROWSER_GENERAL_AUDIENCE_BROWSING_NAVIGATION_THROTTLE_H_
#define CHROMECAST_BROWSER_GENERAL_AUDIENCE_BROWSING_NAVIGATION_THROTTLE_H_

#include "base/memory/weak_ptr.h"
#include "content/public/browser/navigation_throttle.h"

namespace content {
class NavigationHandle;
}  // namespace content

namespace chromecast {

class GeneralAudienceBrowsingService;

class GeneralAudienceBrowsingNavigationThrottle
    : public content::NavigationThrottle {
 public:
  GeneralAudienceBrowsingNavigationThrottle(
      content::NavigationHandle* navigation_handle,
      GeneralAudienceBrowsingService* general_audience_browsing_service);

  GeneralAudienceBrowsingNavigationThrottle(
      const GeneralAudienceBrowsingNavigationThrottle&) = delete;
  GeneralAudienceBrowsingNavigationThrottle& operator=(
      const GeneralAudienceBrowsingNavigationThrottle&) = delete;

  ~GeneralAudienceBrowsingNavigationThrottle() override;

  // NavigationThrottle overrides.
  ThrottleCheckResult WillStartRequest() override;
  ThrottleCheckResult WillRedirectRequest() override;

  const char* GetNameForLogging() override;

 private:
  content::NavigationThrottle::ThrottleCheckResult CheckURL();

  // Callback from GeneralAudienceBrowsingService.
  void CheckURLCallback(bool is_safe);

  GeneralAudienceBrowsingService* general_audience_browsing_service_;

  // Whether the request was deferred in order to check the Safe Search API.
  bool deferred_ = false;

  // Whether the Safe Search API callback determined the in-progress navigation
  // should be canceled.
  bool should_cancel_ = false;

  base::WeakPtrFactory<GeneralAudienceBrowsingNavigationThrottle>
      weak_ptr_factory_;
};

}  // namespace chromecast

#endif  // CHROMECAST_BROWSER_GENERAL_AUDIENCE_BROWSING_NAVIGATION_THROTTLE_H_