Changed EUnicodeBidi to an enum class and renamed its members

Changed EUnicodeBidi to an enum class and gave it an unsigned underlying
type. Also renamed its members to match the CSS keywords they
represent, and added the 'k' prefix in line with the Blink rename to
match Chromium style.

Changing it to an enum class enforces better namespacing and code
practices. Adding the unsigned underlying type is pre-work for when the
class is eventually stored as an enum bitfield (it would be done in this
patch, except a presubmit warning already exists that prevents that. The
presubmit warning needs to be updated before that change can occur.)

This is also pre-work to allow EUnicodeBidi to be used by generated
fields in ComputedStyleBase.

BUG=628043

Review-Url: https://codereview.chromium.org/2625553005
Cr-Commit-Position: refs/heads/master@{#442775}
diff --git a/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h b/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h
index aa3d185..9399ce8 100644
--- a/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h
+++ b/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h
@@ -2453,22 +2453,22 @@
 inline CSSIdentifierValue::CSSIdentifierValue(EUnicodeBidi e)
     : CSSValue(IdentifierClass) {
   switch (e) {
-    case UBNormal:
+    case EUnicodeBidi::kNormal:
       m_valueID = CSSValueNormal;
       break;
-    case Embed:
+    case EUnicodeBidi::kEmbed:
       m_valueID = CSSValueEmbed;
       break;
-    case Override:
+    case EUnicodeBidi::kBidiOverride:
       m_valueID = CSSValueBidiOverride;
       break;
-    case Isolate:
+    case EUnicodeBidi::kIsolate:
       m_valueID = CSSValueIsolate;
       break;
-    case IsolateOverride:
+    case EUnicodeBidi::kIsolateOverride:
       m_valueID = CSSValueIsolateOverride;
       break;
-    case Plaintext:
+    case EUnicodeBidi::kPlaintext:
       m_valueID = CSSValuePlaintext;
       break;
   }
@@ -2478,26 +2478,26 @@
 inline EUnicodeBidi CSSIdentifierValue::convertTo() const {
   switch (m_valueID) {
     case CSSValueNormal:
-      return UBNormal;
+      return EUnicodeBidi::kNormal;
     case CSSValueEmbed:
-      return Embed;
+      return EUnicodeBidi::kEmbed;
     case CSSValueBidiOverride:
-      return Override;
+      return EUnicodeBidi::kBidiOverride;
     case CSSValueIsolate:
     case CSSValueWebkitIsolate:
-      return Isolate;
+      return EUnicodeBidi::kIsolate;
     case CSSValueIsolateOverride:
     case CSSValueWebkitIsolateOverride:
-      return IsolateOverride;
+      return EUnicodeBidi::kIsolateOverride;
     case CSSValuePlaintext:
     case CSSValueWebkitPlaintext:
-      return Plaintext;
+      return EUnicodeBidi::kPlaintext;
     default:
       break;
   }
 
   ASSERT_NOT_REACHED();
-  return UBNormal;
+  return EUnicodeBidi::kNormal;
 }
 
 template <>
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
index 02aa28ad..85ae6b3 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -2451,7 +2451,8 @@
     return InlineBoxPosition(inlineBox, caretOffset);
   }
 
-  if (layoutObject && layoutObject->style()->unicodeBidi() == Plaintext) {
+  if (layoutObject &&
+      layoutObject->style()->unicodeBidi() == EUnicodeBidi::kPlaintext) {
     if (inlineBox->bidiLevel() < level)
       return InlineBoxPosition(inlineBox, inlineBox->caretLeftmostOffset());
     return InlineBoxPosition(inlineBox, inlineBox->caretRightmostOffset());
diff --git a/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp b/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
index eedb915..a7df84b 100644
--- a/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
+++ b/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
@@ -142,11 +142,12 @@
         topResolver.midpointStateForIsolatedRun(isolatedRun.runToReplace);
     EUnicodeBidi unicodeBidi = isolatedInline.style()->unicodeBidi();
     TextDirection direction;
-    if (unicodeBidi == Plaintext) {
+    if (unicodeBidi == EUnicodeBidi::kPlaintext) {
       direction = determinePlaintextDirectionality(
           isolatedInline, isNewUBAParagraph ? startObj : 0);
     } else {
-      ASSERT(unicodeBidi == Isolate || unicodeBidi == IsolateOverride);
+      DCHECK(unicodeBidi == EUnicodeBidi::kIsolate ||
+             unicodeBidi == EUnicodeBidi::kIsolateOverride);
       direction = isolatedInline.style()->direction();
     }
     isolatedResolver.setStatus(BidiStatus::createForIsolate(
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp
index 9367559..7f883a1c 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp
@@ -660,7 +660,8 @@
     unsigned expansionOpportunityCount) {
   TextDirection direction;
   if (rootInlineBox &&
-      rootInlineBox->getLineLayoutItem().style()->unicodeBidi() == Plaintext)
+      rootInlineBox->getLineLayoutItem().style()->unicodeBidi() ==
+          EUnicodeBidi::kPlaintext)
     direction = rootInlineBox->direction();
   else
     direction = style()->direction();
@@ -1144,7 +1145,8 @@
                       ? VisualLeftToRightOverride
                       : VisualRightToLeftOverride)
                : NoVisualOverride);
-      if (isNewUBAParagraph && styleToUse.unicodeBidi() == Plaintext &&
+      if (isNewUBAParagraph &&
+          styleToUse.unicodeBidi() == EUnicodeBidi::kPlaintext &&
           !resolver.context()->parent()) {
         TextDirection direction = determinePlaintextDirectionality(
             resolver.position().root(), resolver.position().getLineLayoutItem(),
@@ -2111,7 +2113,7 @@
     resolver.setStatus(last->lineBreakBidiStatus());
   } else {
     TextDirection direction = style()->direction();
-    if (style()->unicodeBidi() == Plaintext)
+    if (style()->unicodeBidi() == EUnicodeBidi::kPlaintext)
       direction = determinePlaintextDirectionality(LineLayoutItem(this));
     resolver.setStatus(
         BidiStatus(direction, isOverride(style()->unicodeBidi())));
diff --git a/third_party/WebKit/Source/core/layout/LayoutText.cpp b/third_party/WebKit/Source/core/layout/LayoutText.cpp
index 88a17f8..3024a826 100644
--- a/third_party/WebKit/Source/core/layout/LayoutText.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutText.cpp
@@ -794,7 +794,7 @@
 
   // for unicode-bidi: plaintext, use inlineBoxBidiLevel() to test the correct
   // direction for the cursor.
-  if (rightAligned && style()->unicodeBidi() == Plaintext) {
+  if (rightAligned && style()->unicodeBidi() == EUnicodeBidi::kPlaintext) {
     if (inlineBox->bidiLevel() % 2 != 1)
       rightAligned = false;
   }
diff --git a/third_party/WebKit/Source/core/layout/line/InlineIterator.h b/third_party/WebKit/Source/core/layout/line/InlineIterator.h
index e344176e..91bf6d1 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineIterator.h
+++ b/third_party/WebKit/Source/core/layout/line/InlineIterator.h
@@ -146,7 +146,7 @@
     TextDirection dir,
     EUnicodeBidi unicodeBidi) {
   using namespace WTF::Unicode;
-  if (unicodeBidi == Embed) {
+  if (unicodeBidi == EUnicodeBidi::kEmbed) {
     return dir == TextDirection::kRtl ? RightToLeftEmbedding
                                       : LeftToRightEmbedding;
   }
@@ -166,7 +166,7 @@
 
   const ComputedStyle& style = object.styleRef();
   EUnicodeBidi unicodeBidi = style.unicodeBidi();
-  if (unicodeBidi == UBNormal) {
+  if (unicodeBidi == EUnicodeBidi::kNormal) {
     // http://dev.w3.org/csswg/css3-writing-modes/#unicode-bidi
     // "The element does not open an additional level of embedding with respect
     // to the bidirectional algorithm."
@@ -195,7 +195,7 @@
     return;
 
   EUnicodeBidi unicodeBidi = object.style()->unicodeBidi();
-  if (unicodeBidi == UBNormal)
+  if (unicodeBidi == EUnicodeBidi::kNormal)
     return;  // Nothing to do for unicode-bidi: normal
   if (treatAsIsolated(object.styleRef())) {
     observer->exitIsolate();
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_bidi_paragraph.cc b/third_party/WebKit/Source/core/layout/ng/ng_bidi_paragraph.cc
index 4f81ef3a..ce87586 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_bidi_paragraph.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_bidi_paragraph.cc
@@ -21,7 +21,7 @@
   ICUError error;
   ubidi_setPara(
       ubidi_, text.characters16(), text.length(),
-      block_style->unicodeBidi() == Plaintext
+      block_style->unicodeBidi() == EUnicodeBidi::kPlaintext
           ? UBIDI_DEFAULT_LTR
           : (block_style->direction() == TextDirection::kRtl ? UBIDI_RTL
                                                              : UBIDI_LTR),
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder.cc
index 3a9ee9b..fc7f3299 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder.cc
@@ -207,8 +207,8 @@
   // elements.
   // Plaintext and direction are handled as the paragraph level by
   // NGBidiParagraph::SetParagraph().
-  if (style->unicodeBidi() == Override ||
-      style->unicodeBidi() == IsolateOverride) {
+  if (style->unicodeBidi() == EUnicodeBidi::kBidiOverride ||
+      style->unicodeBidi() == EUnicodeBidi::kIsolateOverride) {
     AppendBidiControl(style, leftToRightOverrideCharacter,
                       rightToLeftOverrideCharacter);
     Enter(nullptr, popDirectionalFormattingCharacter);
@@ -219,28 +219,28 @@
   // https://drafts.csswg.org/css-writing-modes-3/#bidi-control-codes-injection-table
   const ComputedStyle* style = node->style();
   switch (style->unicodeBidi()) {
-    case UBNormal:
+    case EUnicodeBidi::kNormal:
       break;
-    case Embed:
+    case EUnicodeBidi::kEmbed:
       AppendBidiControl(style, leftToRightEmbedCharacter,
                         rightToLeftEmbedCharacter);
       Enter(node, popDirectionalFormattingCharacter);
       break;
-    case Override:
+    case EUnicodeBidi::kBidiOverride:
       AppendBidiControl(style, leftToRightOverrideCharacter,
                         rightToLeftOverrideCharacter);
       Enter(node, popDirectionalFormattingCharacter);
       break;
-    case Isolate:
+    case EUnicodeBidi::kIsolate:
       AppendBidiControl(style, leftToRightIsolateCharacter,
                         rightToLeftIsolateCharacter);
       Enter(node, popDirectionalIsolateCharacter);
       break;
-    case Plaintext:
+    case EUnicodeBidi::kPlaintext:
       AppendAsOpaqueToSpaceCollapsing(firstStrongIsolateCharacter);
       Enter(node, popDirectionalIsolateCharacter);
       break;
-    case IsolateOverride:
+    case EUnicodeBidi::kIsolateOverride:
       AppendAsOpaqueToSpaceCollapsing(firstStrongIsolateCharacter);
       AppendBidiControl(style, leftToRightOverrideCharacter,
                         rightToLeftOverrideCharacter);
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder_test.cc
index e058369..bc509ae 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_inline_items_builder_test.cc
@@ -186,7 +186,7 @@
   Vector<NGLayoutInlineItem> items;
   NGLayoutInlineItemsBuilder builder(&items);
   RefPtr<ComputedStyle> block_style(ComputedStyle::create());
-  block_style->setUnicodeBidi(Override);
+  block_style->setUnicodeBidi(EUnicodeBidi::kBidiOverride);
   block_style->setDirection(TextDirection::kRtl);
   builder.EnterBlock(block_style.get());
   builder.Append("Hello", style_.get());
@@ -215,7 +215,7 @@
   builder.Append("Hello ", style_.get());
   std::unique_ptr<LayoutInline> isolateRTL(
       createLayoutInline([](ComputedStyle* style) {
-        style->setUnicodeBidi(Isolate);
+        style->setUnicodeBidi(EUnicodeBidi::kIsolate);
         style->setDirection(TextDirection::kRtl);
       }));
   builder.EnterInline(isolateRTL.get());
@@ -239,7 +239,7 @@
   builder.Append("Hello ", style_.get());
   std::unique_ptr<LayoutInline> isolateOverrideRTL(
       createLayoutInline([](ComputedStyle* style) {
-        style->setUnicodeBidi(IsolateOverride);
+        style->setUnicodeBidi(EUnicodeBidi::kIsolateOverride);
         style->setDirection(TextDirection::kRtl);
       }));
   builder.EnterInline(isolateOverrideRTL.get());
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h
index 5c068dad..f6eeec9 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.h
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -317,7 +317,8 @@
     m_nonInheritedData.m_clear = initialClear();
     m_nonInheritedData.m_position = initialPosition();
     m_nonInheritedData.m_tableLayout = initialTableLayout();
-    m_nonInheritedData.m_unicodeBidi = initialUnicodeBidi();
+    m_nonInheritedData.m_unicodeBidi =
+        static_cast<unsigned>(initialUnicodeBidi());
     m_nonInheritedData.m_breakBefore = initialBreakBefore();
     m_nonInheritedData.m_breakAfter = initialBreakAfter();
     m_nonInheritedData.m_breakInside = initialBreakInside();
@@ -1855,11 +1856,13 @@
   }
 
   // unicode-bidi
-  static EUnicodeBidi initialUnicodeBidi() { return UBNormal; }
+  static EUnicodeBidi initialUnicodeBidi() { return EUnicodeBidi::kNormal; }
   EUnicodeBidi unicodeBidi() const {
     return static_cast<EUnicodeBidi>(m_nonInheritedData.m_unicodeBidi);
   }
-  void setUnicodeBidi(EUnicodeBidi b) { m_nonInheritedData.m_unicodeBidi = b; }
+  void setUnicodeBidi(EUnicodeBidi b) {
+    m_nonInheritedData.m_unicodeBidi = static_cast<unsigned>(b);
+  }
 
   // vertical-align
   static EVerticalAlign initialVerticalAlign() {
diff --git a/third_party/WebKit/Source/platform/text/UnicodeBidi.h b/third_party/WebKit/Source/platform/text/UnicodeBidi.h
index da83361..91923d2 100644
--- a/third_party/WebKit/Source/platform/text/UnicodeBidi.h
+++ b/third_party/WebKit/Source/platform/text/UnicodeBidi.h
@@ -28,22 +28,24 @@
 
 namespace blink {
 
-enum EUnicodeBidi {
-  UBNormal,
-  Embed,
-  Override,
-  Isolate,
-  Plaintext,
-  IsolateOverride,
+enum class EUnicodeBidi : unsigned {
+  kNormal,
+  kEmbed,
+  kBidiOverride,
+  kIsolate,
+  kPlaintext,
+  kIsolateOverride,
 };
 
 inline bool isIsolated(const EUnicodeBidi& unicodeBidi) {
-  return unicodeBidi == Isolate || unicodeBidi == IsolateOverride ||
-         unicodeBidi == Plaintext;
+  return unicodeBidi == EUnicodeBidi::kIsolate ||
+         unicodeBidi == EUnicodeBidi::kIsolateOverride ||
+         unicodeBidi == EUnicodeBidi::kPlaintext;
 }
 
 inline bool isOverride(EUnicodeBidi unicodeBidi) {
-  return unicodeBidi == Override || unicodeBidi == IsolateOverride;
+  return unicodeBidi == EUnicodeBidi::kBidiOverride ||
+         unicodeBidi == EUnicodeBidi::kIsolateOverride;
 }
 
 }  // namespace blink