// Copyright 2013 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.

#include "components/web_resource/resource_request_allowed_notifier_test_util.h"

namespace web_resource {

TestRequestAllowedNotifier::TestRequestAllowedNotifier(
    PrefService* local_state,
    network::NetworkConnectionTracker* network_connection_tracker)
    : ResourceRequestAllowedNotifier(
          local_state,
          nullptr,
          base::BindOnce(
              [](network::NetworkConnectionTracker* tracker) {
                return tracker;
              },
              network_connection_tracker)),
      override_requests_allowed_(false),
      requests_allowed_(true) {}

TestRequestAllowedNotifier::~TestRequestAllowedNotifier() {
}

void TestRequestAllowedNotifier::InitWithEulaAcceptNotifier(
    Observer* observer,
    std::unique_ptr<EulaAcceptedNotifier> eula_notifier) {
  test_eula_notifier_.swap(eula_notifier);
  Init(observer, false /* leaky */);
}

void TestRequestAllowedNotifier::SetRequestsAllowedOverride(bool allowed) {
  override_requests_allowed_ = true;
  requests_allowed_ = allowed;
}

void TestRequestAllowedNotifier::NotifyObserver() {
  // Force the allowed state and requested state to true. This forces
  // MaybeNotifyObserver to always notify observers, as MaybeNotifyObserver
  // checks ResourceRequestsAllowed and requested state.
  override_requests_allowed_ = true;
  requests_allowed_ = true;
  SetObserverRequestedForTesting(true);
  MaybeNotifyObserver();
}

ResourceRequestAllowedNotifier::State
TestRequestAllowedNotifier::GetResourceRequestsAllowedState() {
  if (override_requests_allowed_)
    return requests_allowed_ ? ALLOWED : DISALLOWED_NETWORK_DOWN;
  return ResourceRequestAllowedNotifier::GetResourceRequestsAllowedState();
}

EulaAcceptedNotifier* TestRequestAllowedNotifier::CreateEulaNotifier() {
  return test_eula_notifier_.release();
}

}  // namespace web_resource
