// Copyright 2017 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/subresource_filter/content/browser/async_document_subresource_filter_test_utils.h"

#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/run_loop.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace subresource_filter {
namespace testing {

TestActivationStateCallbackReceiver::TestActivationStateCallbackReceiver() =
    default;
TestActivationStateCallbackReceiver::~TestActivationStateCallbackReceiver() =
    default;

base::OnceCallback<void(mojom::ActivationState)>
TestActivationStateCallbackReceiver::GetCallback() {
  return base::BindOnce(&TestActivationStateCallbackReceiver::Callback,
                        base::Unretained(this));
}

void TestActivationStateCallbackReceiver::WaitForActivationDecision() {
  ASSERT_EQ(0, callback_count_);
  base::RunLoop run_loop;
  quit_closure_ = run_loop.QuitClosure();
  run_loop.Run();
}

void TestActivationStateCallbackReceiver::ExpectReceivedOnce(
    const mojom::ActivationState& expected_state) const {
  ASSERT_EQ(1, callback_count_);
  EXPECT_TRUE(expected_state.Equals(last_activation_state_));
}

void TestActivationStateCallbackReceiver::Callback(
    mojom::ActivationState activation_state) {
  ++callback_count_;
  last_activation_state_ = activation_state;
  if (quit_closure_)
    quit_closure_.Run();
}

}  // namespace testing
}  // namespace subresource_filter
