// Copyright 2020 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 THIRD_PARTY_BLINK_RENDERER_CORE_FULLSCREEN_FULLSCREEN_REQUEST_TYPE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FULLSCREEN_FULLSCREEN_REQUEST_TYPE_H_

#include "base/check.h"

#if DCHECK_IS_ON()
#include <string>
#endif

namespace blink {

// This enum class represents Implementation-internal details for the fullscreen
// request, these are in addition to API options from fullscreen_options.idl
// that are passed separately.
//
// The integer values are powers of two for use as a flag bitmap. The class
// provides minimal operators for combining flags and checking if a specific
// flag is set.
enum class FullscreenRequestType {
  // No bits set, equivalent to unprefixed with no other properties
  kNull = 0,

  // True for Element.requestFullscreen(), false for
  // Element.webkitRequestFullscreen()/webkitRequestFullScreen() and
  // HTMLVideoElement.webkitEnterFullscreen()/webkitEnterFullScreen()
  kPrefixed = 1,

  // For WebRemoteFrameImpl to notify that a cross-process descendant frame
  // has requested and is about to enter fullscreen.
  kForCrossProcessDescendant = 2,

  // For WebXR DOM Overlay, in this mode the element and parent iframes use a
  // transparent background.
  kForXrOverlay = 4,

  // Explicit name for "no options" for backwards compatibility and convenience
  kUnprefixed = kNull,
};

inline FullscreenRequestType operator|(FullscreenRequestType lhs,
                                       FullscreenRequestType rhs) {
  return static_cast<FullscreenRequestType>(static_cast<int>(lhs) |
                                            static_cast<int>(rhs));
}

// Returns true if lhs and rhs have at least one flag bit in common.
inline bool operator&(FullscreenRequestType lhs, FullscreenRequestType rhs) {
  return static_cast<int>(lhs) & static_cast<int>(rhs);
}

#if DCHECK_IS_ON()
std::string FullscreenRequestTypeToDebugString(FullscreenRequestType req);
#endif

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_FULLSCREEN_FULLSCREEN_REQUEST_TYPE_H_
