diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
index eb94152..cc91a2d 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -128,7 +128,7 @@
 ALWAYS_INLINE ComputedStyle::ComputedStyle()
     : ComputedStyleBase(), RefCounted<ComputedStyle>() {
   rare_non_inherited_data_.Init();
-  rare_non_inherited_data_.Access()->deprecated_flexible_box_data_data_.Init();
+  rare_non_inherited_data_.Access()->deprecated_flexible_box_data_.Init();
   rare_non_inherited_data_.Access()->flexible_box_data_.Init();
   rare_non_inherited_data_.Access()->multi_col_data_.Init();
   rare_non_inherited_data_.Access()->transform_data_.Init();
@@ -587,11 +587,11 @@
             *other.rare_non_inherited_data_->grid_item_data_.Get())
       return true;
 
-    if (rare_non_inherited_data_->deprecated_flexible_box_data_data_.Get() !=
-            other.rare_non_inherited_data_->deprecated_flexible_box_data_data_
+    if (rare_non_inherited_data_->deprecated_flexible_box_data_.Get() !=
+            other.rare_non_inherited_data_->deprecated_flexible_box_data_
                 .Get() &&
-        *rare_non_inherited_data_->deprecated_flexible_box_data_data_.Get() !=
-            *other.rare_non_inherited_data_->deprecated_flexible_box_data_data_
+        *rare_non_inherited_data_->deprecated_flexible_box_data_.Get() !=
+            *other.rare_non_inherited_data_->deprecated_flexible_box_data_
                  .Get())
       return true;
 
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h
index 794c07a..f927789 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.h
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -794,21 +794,20 @@
   // -webkit-box-flex
   static float InitialBoxFlex() { return 0.0f; }
   float BoxFlex() const {
-    return rare_non_inherited_data_->deprecated_flexible_box_data_data_->flex;
+    return rare_non_inherited_data_->deprecated_flexible_box_data_->flex;
   }
   void SetBoxFlex(float f) {
-    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_data_,
+    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_,
                    flex, f);
   }
 
   // -webkit-box-flex-group
   static unsigned InitialBoxFlexGroup() { return 1; }
   unsigned BoxFlexGroup() const {
-    return rare_non_inherited_data_->deprecated_flexible_box_data_data_
-        ->flex_group;
+    return rare_non_inherited_data_->deprecated_flexible_box_data_->flex_group;
   }
   void SetBoxFlexGroup(unsigned fg) {
-    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_data_,
+    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_,
                    flex_group, fg);
   }
 
@@ -818,10 +817,10 @@
   static EBoxAlignment InitialBoxAlign() { return BSTRETCH; }
   EBoxAlignment BoxAlign() const {
     return static_cast<EBoxAlignment>(
-        rare_non_inherited_data_->deprecated_flexible_box_data_data_->align);
+        rare_non_inherited_data_->deprecated_flexible_box_data_->align);
   }
   void SetBoxAlign(EBoxAlignment a) {
-    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_data_,
+    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_,
                    align, a);
   }
 
@@ -829,21 +828,21 @@
   static EBoxLines InitialBoxLines() { return SINGLE; }
   EBoxLines BoxLines() const {
     return static_cast<EBoxLines>(
-        rare_non_inherited_data_->deprecated_flexible_box_data_data_->lines);
+        rare_non_inherited_data_->deprecated_flexible_box_data_->lines);
   }
   void SetBoxLines(EBoxLines lines) {
-    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_data_,
+    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_,
                    lines, lines);
   }
 
   // -webkit-box-ordinal-group
   static unsigned InitialBoxOrdinalGroup() { return 1; }
   unsigned BoxOrdinalGroup() const {
-    return rare_non_inherited_data_->deprecated_flexible_box_data_data_
+    return rare_non_inherited_data_->deprecated_flexible_box_data_
         ->ordinal_group;
   }
   void SetBoxOrdinalGroup(unsigned og) {
-    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_data_,
+    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_,
                    ordinal_group,
                    std::min(std::numeric_limits<unsigned>::max() - 1, og));
   }
@@ -852,10 +851,10 @@
   static EBoxOrient InitialBoxOrient() { return HORIZONTAL; }
   EBoxOrient BoxOrient() const {
     return static_cast<EBoxOrient>(
-        rare_non_inherited_data_->deprecated_flexible_box_data_data_->orient);
+        rare_non_inherited_data_->deprecated_flexible_box_data_->orient);
   }
   void SetBoxOrient(EBoxOrient o) {
-    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_data_,
+    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_,
                    orient, o);
   }
 
@@ -863,10 +862,10 @@
   static EBoxPack InitialBoxPack() { return kBoxPackStart; }
   EBoxPack BoxPack() const {
     return static_cast<EBoxPack>(
-        rare_non_inherited_data_->deprecated_flexible_box_data_data_->pack);
+        rare_non_inherited_data_->deprecated_flexible_box_data_->pack);
   }
   void SetBoxPack(EBoxPack p) {
-    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_data_,
+    SET_NESTED_VAR(rare_non_inherited_data_, deprecated_flexible_box_data_,
                    pack, p);
   }
 
diff --git a/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.cpp b/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.cpp
index 73d84116..fb6615bc 100644
--- a/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.cpp
+++ b/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.cpp
@@ -143,7 +143,7 @@
       object_position_(o.object_position_),
       line_clamp_(o.line_clamp_),
       draggable_region_mode_(o.draggable_region_mode_),
-      deprecated_flexible_box_data_data_(o.deprecated_flexible_box_data_data_),
+      deprecated_flexible_box_data_(o.deprecated_flexible_box_data_),
       flexible_box_data_(o.flexible_box_data_),
       multi_col_data_(o.multi_col_data_),
       transform_data_(o.transform_data_),
@@ -236,8 +236,7 @@
          object_position_ == o.object_position_ &&
          line_clamp_ == o.line_clamp_ &&
          draggable_region_mode_ == o.draggable_region_mode_ &&
-         deprecated_flexible_box_data_data_ ==
-             o.deprecated_flexible_box_data_data_ &&
+         deprecated_flexible_box_data_ == o.deprecated_flexible_box_data_ &&
          flexible_box_data_ == o.flexible_box_data_ &&
          multi_col_data_ == o.multi_col_data_ &&
          transform_data_ == o.transform_data_ &&
diff --git a/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h b/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h
index 1ad03af..fe966f6 100644
--- a/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h
+++ b/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h
@@ -101,7 +101,7 @@
   unsigned draggable_region_mode_ : 2;  // DraggableRegionMode
 
   DataRef<StyleDeprecatedFlexibleBoxData>
-      deprecated_flexible_box_data_data_;  // Flexible box properties
+      deprecated_flexible_box_data_;  // Flexible box properties
   DataRef<StyleFlexibleBoxData> flexible_box_data_;
   DataRef<StyleMultiColData> multi_col_data_;  //  CSS3 multicol properties
   DataRef<StyleTransformData>
