// Copyright 2016 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_BASE_TOKENS_H_
#define COBALT_BASE_TOKENS_H_

#include "base/memory/singleton.h"
#include "cobalt/base/token.h"

namespace base {

// clang-format off
#if defined(COBALT_MEDIA_SOURCE_2016)
#define TOKENS_FOR_EACH_WITH_NAME_ONLY_EME(MacroOpWithNameOnly)      \
    MacroOpWithNameOnly(encrypted)
#else  // defined(COBALT_MEDIA_SOURCE_2016)
#define TOKENS_FOR_EACH_WITH_NAME_ONLY_EME(MacroOpWithNameOnly)      \
    MacroOpWithNameOnly(keyadded)                                    \
    MacroOpWithNameOnly(keyerror)                                    \
    MacroOpWithNameOnly(keymessage)                                  \
    MacroOpWithNameOnly(needkey)
#endif  // defined(COBALT_MEDIA_SOURCE_2016)

#define TOKENS_FOR_EACH_WITH_NAME_ONLY(MacroOpWithNameOnly)          \
    TOKENS_FOR_EACH_WITH_NAME_ONLY_EME(MacroOpWithNameOnly)          \
    MacroOpWithNameOnly(addsourcebuffer)                             \
    MacroOpWithNameOnly(addtrack)                                    \
    MacroOpWithNameOnly(abort)                                       \
    MacroOpWithNameOnly(additions)                                   \
    MacroOpWithNameOnly(all)                                         \
    MacroOpWithNameOnly(alt)                                         \
    MacroOpWithNameOnly(animationend)                                \
    MacroOpWithNameOnly(assertive)                                   \
    MacroOpWithNameOnly(attributes)                                  \
    MacroOpWithNameOnly(beforeunload)                                \
    MacroOpWithNameOnly(blur)                                        \
    MacroOpWithNameOnly(boundary)                                    \
    MacroOpWithNameOnly(canplay)                                     \
    MacroOpWithNameOnly(canplaythrough)                              \
    MacroOpWithNameOnly(change)                                      \
    MacroOpWithNameOnly(characterData)                               \
    MacroOpWithNameOnly(childList)                                   \
    MacroOpWithNameOnly(click)                                       \
    MacroOpWithNameOnly(close)                                       \
    MacroOpWithNameOnly(dataavailable)                               \
    MacroOpWithNameOnly(deviceorientation)                           \
    MacroOpWithNameOnly(durationchange)                              \
    MacroOpWithNameOnly(emptied)                                     \
    MacroOpWithNameOnly(end)                                         \
    MacroOpWithNameOnly(ended)                                       \
    MacroOpWithNameOnly(error)                                       \
    MacroOpWithNameOnly(focus)                                       \
    MacroOpWithNameOnly(focusin)                                     \
    MacroOpWithNameOnly(focusout)                                    \
    MacroOpWithNameOnly(gotpointercapture)                           \
    MacroOpWithNameOnly(hashchange)                                  \
    MacroOpWithNameOnly(hide)                                        \
    MacroOpWithNameOnly(input)                                       \
    MacroOpWithNameOnly(keydown)                                     \
    MacroOpWithNameOnly(keypress)                                    \
    MacroOpWithNameOnly(keystatuseschange)                           \
    MacroOpWithNameOnly(keyup)                                       \
    MacroOpWithNameOnly(load)                                        \
    MacroOpWithNameOnly(loadeddata)                                  \
    MacroOpWithNameOnly(loadedmetadata)                              \
    MacroOpWithNameOnly(loadend)                                     \
    MacroOpWithNameOnly(loadstart)                                   \
    MacroOpWithNameOnly(lostpointercapture)                          \
    MacroOpWithNameOnly(mark)                                        \
    MacroOpWithNameOnly(message)                                     \
    MacroOpWithNameOnly(mousedown)                                   \
    MacroOpWithNameOnly(mouseenter)                                  \
    MacroOpWithNameOnly(mouseleave)                                  \
    MacroOpWithNameOnly(mousemove)                                   \
    MacroOpWithNameOnly(mouseout)                                    \
    MacroOpWithNameOnly(mouseover)                                   \
    MacroOpWithNameOnly(mouseup)                                     \
    MacroOpWithNameOnly(nomatch)                                     \
    MacroOpWithNameOnly(off)                                         \
    MacroOpWithNameOnly(open)                                        \
    MacroOpWithNameOnly(pointerdown)                                 \
    MacroOpWithNameOnly(pointerenter)                                \
    MacroOpWithNameOnly(pointerleave)                                \
    MacroOpWithNameOnly(pointermove)                                 \
    MacroOpWithNameOnly(pointerout)                                  \
    MacroOpWithNameOnly(pointerover)                                 \
    MacroOpWithNameOnly(pointerup)                                   \
    MacroOpWithNameOnly(pause)                                       \
    MacroOpWithNameOnly(play)                                        \
    MacroOpWithNameOnly(playing)                                     \
    MacroOpWithNameOnly(polite)                                      \
    MacroOpWithNameOnly(progress)                                    \
    MacroOpWithNameOnly(ratechange)                                  \
    MacroOpWithNameOnly(readystatechange)                            \
    MacroOpWithNameOnly(removals)                                    \
    MacroOpWithNameOnly(removesourcebuffer)                          \
    MacroOpWithNameOnly(removetrack)                                 \
    MacroOpWithNameOnly(resize)                                      \
    MacroOpWithNameOnly(result)                                      \
    MacroOpWithNameOnly(resume)                                      \
    MacroOpWithNameOnly(securitypolicyviolation)                     \
    MacroOpWithNameOnly(seeked)                                      \
    MacroOpWithNameOnly(seeking)                                     \
    MacroOpWithNameOnly(show)                                        \
    MacroOpWithNameOnly(soundend)                                    \
    MacroOpWithNameOnly(soundstart)                                  \
    MacroOpWithNameOnly(sourceclose)                                 \
    MacroOpWithNameOnly(sourceended)                                 \
    MacroOpWithNameOnly(sourceopen)                                  \
    MacroOpWithNameOnly(start)                                       \
    MacroOpWithNameOnly(stop)                                        \
    MacroOpWithNameOnly(storage)                                     \
    MacroOpWithNameOnly(stalled)                                     \
    MacroOpWithNameOnly(suggestionsUpdated)                          \
    MacroOpWithNameOnly(suspend)                                     \
    MacroOpWithNameOnly(text)                                        \
    MacroOpWithNameOnly(timeout)                                     \
    MacroOpWithNameOnly(timeupdate)                                  \
    MacroOpWithNameOnly(transitionend)                               \
    MacroOpWithNameOnly(unload)                                      \
    MacroOpWithNameOnly(update)                                      \
    MacroOpWithNameOnly(updateend)                                   \
    MacroOpWithNameOnly(updatestart)                                 \
    MacroOpWithNameOnly(visibilitychange)                            \
    MacroOpWithNameOnly(voiceschanged)                               \
    MacroOpWithNameOnly(volumechange)                                \
    MacroOpWithNameOnly(waiting)                                     \
    MacroOpWithNameOnly(wheel)

#define TOKENS_FOR_EACH_WITH_NAME_AND_VALUE(MacroOpWithNameAndValue)    \
    MacroOpWithNameAndValue(active_pseudo_class_selector, "active")     \
    MacroOpWithNameAndValue(after_pseudo_element_selector, "after")     \
    MacroOpWithNameAndValue(aria_atomic, "aria-atomic")                 \
    MacroOpWithNameAndValue(aria_busy, "aria-busy")                     \
    MacroOpWithNameAndValue(aria_describedby, "aria-describedby")       \
    MacroOpWithNameAndValue(aria_hidden, "aria-hidden")                 \
    MacroOpWithNameAndValue(aria_label, "aria-label")                   \
    MacroOpWithNameAndValue(aria_labelledby, "aria-labelledby")         \
    MacroOpWithNameAndValue(aria_live, "aria-live")                     \
    MacroOpWithNameAndValue(aria_relevant, "aria-relevant")             \
    MacroOpWithNameAndValue(before_pseudo_element_selector, "before")   \
    MacroOpWithNameAndValue(cdata_section_node_name, "#cdata_section")  \
    MacroOpWithNameAndValue(class_selector_prefix, ".")                 \
    MacroOpWithNameAndValue(comment_node_name, "#comment")              \
    MacroOpWithNameAndValue(document_name, "#document")                 \
    MacroOpWithNameAndValue(domcontentloaded, "DOMContentLoaded")       \
    MacroOpWithNameAndValue(empty_pseudo_class_selector, "empty")       \
    MacroOpWithNameAndValue(false_token, "false")                       \
    MacroOpWithNameAndValue(focus_pseudo_class_selector, "focus")       \
    MacroOpWithNameAndValue(hover_pseudo_class_selector, "hover")       \
    MacroOpWithNameAndValue(id_selector_prefix, "#")                    \
    MacroOpWithNameAndValue(not_pseudo_class_selector, "not")           \
    MacroOpWithNameAndValue(pseudo_class_selector_prefix, ":")          \
    MacroOpWithNameAndValue(pseudo_element_selector_prefix, "::")       \
    MacroOpWithNameAndValue(text_node_name, "#text")                    \
    MacroOpWithNameAndValue(true_token, "true")

// clang-format on

// Singleton containing commonly used Tokens.
// This prevents runtime Token allocations when dispatching events, and avoids
// typos.
class Tokens {
 public:
  static Tokens* GetInstance();

#define DEFINE_TOKEN_ACCESSOR_WITH_NAME_ONLY(name) \
  static base::Token name() { return GetInstance()->name##_; }
#define DEFINE_TOKEN_ACCESSOR_WITH_NAME_AND_VALUE(name, value) \
  static base::Token name() { return GetInstance()->name##_; }

  TOKENS_FOR_EACH_WITH_NAME_ONLY(DEFINE_TOKEN_ACCESSOR_WITH_NAME_ONLY)
  TOKENS_FOR_EACH_WITH_NAME_AND_VALUE(DEFINE_TOKEN_ACCESSOR_WITH_NAME_AND_VALUE)
#undef DEFINE_TOKEN_ACCESSOR_WITH_NAME_ONLY
#undef DEFINE_TOKEN_ACCESSOR_WITH_NAME_AND_VALUE

 private:
  // To make Singleton<Tokens, LeakySingletonTraits<Tokens> > work with
  // our private constructor.
  friend struct DefaultSingletonTraits<Tokens>;

#define INITIALIZE_TOKEN_WITH_NAME_ONLY(name) name##_(#name),
#define INITIALIZE_TOKEN_WITH_NAME_AND_VALUE(name, value) name##_(value),
  Tokens()
      : TOKENS_FOR_EACH_WITH_NAME_ONLY(INITIALIZE_TOKEN_WITH_NAME_ONLY)
            TOKENS_FOR_EACH_WITH_NAME_AND_VALUE(
                INITIALIZE_TOKEN_WITH_NAME_AND_VALUE) dummy_(0) {}
#undef INITIALIZE_TOKEN_WITH_NAME_ONLY
#undef INITIALIZE_TOKEN_WITH_NAME_AND_VALUE

#define DECLARE_TOKEN_WITH_NAME_ONLY(name) const base::Token name##_;
#define DECLARE_TOKEN_WITH_NAME_AND_VALUE(name, value) \
  const base::Token name##_;
  TOKENS_FOR_EACH_WITH_NAME_ONLY(DECLARE_TOKEN_WITH_NAME_ONLY)
  TOKENS_FOR_EACH_WITH_NAME_AND_VALUE(DECLARE_TOKEN_WITH_NAME_AND_VALUE)
#undef DECLARE_TOKEN_WITH_NAME_ONLY
#undef DECLARE_TOKEN_WITH_NAME_AND_VALUE

  // Dummy member variable to be included as the last item in the ctor's
  // initialization list.  As otherwise we will have one extra ',' at the end of
  // the initialization list which causes a compile error.
  char dummy_;

  DISALLOW_COPY_AND_ASSIGN(Tokens);
};

#undef EVENT_NAMES_FOR_EACH

}  // namespace base

#endif  // COBALT_BASE_TOKENS_H_
