1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_STYLE_NAME_OR_KEYWORD_H_
6 #define THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_STYLE_NAME_OR_KEYWORD_H_
7 
8 #include "third_party/blink/renderer/core/core_export.h"
9 #include "third_party/blink/renderer/core/css_value_keywords.h"
10 #include "third_party/blink/renderer/core/style/style_name.h"
11 
12 namespace blink {
13 
14 class CORE_EXPORT StyleNameOrKeyword {
15  public:
StyleNameOrKeyword(StyleName name)16   explicit StyleNameOrKeyword(StyleName name)
17       : keyword_(CSSValueID::kInvalid), name_(name) {}
StyleNameOrKeyword(CSSValueID keyword)18   explicit StyleNameOrKeyword(CSSValueID keyword) : keyword_(keyword) {
19     DCHECK_NE(keyword, CSSValueID::kInvalid);
20   }
21 
IsKeyword()22   bool IsKeyword() const { return keyword_ != CSSValueID::kInvalid; }
23 
GetKeyword()24   CSSValueID GetKeyword() const {
25     DCHECK(IsKeyword());
26     return keyword_;
27   }
28 
GetName()29   const StyleName& GetName() const {
30     DCHECK(!IsKeyword());
31     return name_;
32   }
33 
34   bool operator==(const StyleNameOrKeyword& other) const {
35     return keyword_ == other.keyword_ && name_ == other.name_;
36   }
37   bool operator!=(const StyleNameOrKeyword& other) const {
38     return !(*this == other);
39   }
40 
41  private:
42   CSSValueID keyword_;
43   StyleName name_;
44 };
45 
46 }  // namespace blink
47 
48 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_STYLE_NAME_OR_KEYWORD_H_
49