// Copyright 2016 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 "core/dom/DocumentUserGestureToken.h"

#include "core/testing/DummyPageHolder.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace blink {

class DocumentUserGestureTokenTest : public ::testing::Test {
 public:
  void SetUp() override {
    m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
    ASSERT_FALSE(document().frame()->hasReceivedUserGesture());
  }

  Document& document() const { return m_dummyPageHolder->document(); }

 private:
  std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
};

TEST_F(DocumentUserGestureTokenTest, NoGesture) {
  // A nullptr Document* will not set user gesture state.
  DocumentUserGestureToken::create(nullptr);
  EXPECT_FALSE(document().frame()->hasReceivedUserGesture());
}

TEST_F(DocumentUserGestureTokenTest, PossiblyExisting) {
  // A non-null Document* will set state, but a subsequent nullptr Document*
  // token will not override it.
  DocumentUserGestureToken::create(&document());
  EXPECT_TRUE(document().frame()->hasReceivedUserGesture());
  DocumentUserGestureToken::create(nullptr);
  EXPECT_TRUE(document().frame()->hasReceivedUserGesture());
}

TEST_F(DocumentUserGestureTokenTest, NewGesture) {
  // UserGestureToken::Status doesn't impact Document gesture state.
  DocumentUserGestureToken::create(&document(), UserGestureToken::NewGesture);
  EXPECT_TRUE(document().frame()->hasReceivedUserGesture());
}

}  // namespace blink
