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

#ifndef CHROME_BROWSER_WEB_RESOURCE_RESOURCE_REQUEST_ALLOWED_NOTIFIER_TEST_UTIL_H_
#define CHROME_BROWSER_WEB_RESOURCE_RESOURCE_REQUEST_ALLOWED_NOTIFIER_TEST_UTIL_H_

#include "chrome/browser/web_resource/resource_request_allowed_notifier.h"

// A subclass of ResourceRequestAllowedNotifier used to expose some
// functionality for testing.
//
// By default, the constructor sets this class to override
// ResourceRequestsAllowed, so its state can be set with SetRequestsAllowed.
// This is meant for higher level tests of services to ensure they adhere to the
// notifications of the ResourceRequestAllowedNotifier. Lower level tests can
// disable this by calling SetRequestsAllowedOverride with the value they want
// it to return.
class TestRequestAllowedNotifier : public ResourceRequestAllowedNotifier {
 public:
  TestRequestAllowedNotifier();
  virtual ~TestRequestAllowedNotifier();

  // A version of |Init()| that accepts a custom EulaAcceptedNotifier.
  void InitWithEulaAcceptNotifier(
      Observer* observer,
      scoped_ptr<EulaAcceptedNotifier> eula_notifier);

  // Makes ResourceRequestsAllowed return |allowed| when it is called.
  void SetRequestsAllowedOverride(bool allowed);

  // Notify observers that requests are allowed. This will only work if
  // the observer is expecting a notification.
  void NotifyObserver();

  // ResourceRequestAllowedNotifier overrides:
  virtual State GetResourceRequestsAllowedState() OVERRIDE;
  virtual EulaAcceptedNotifier* CreateEulaNotifier() OVERRIDE;

 private:
  scoped_ptr<EulaAcceptedNotifier> test_eula_notifier_;
  bool override_requests_allowed_;
  bool requests_allowed_;

  DISALLOW_COPY_AND_ASSIGN(TestRequestAllowedNotifier);
};

#endif  // CHROME_BROWSER_WEB_RESOURCE_RESOURCE_REQUEST_ALLOWED_NOTIFIER_TEST_UTIL_H_
