diff --git a/DEPS b/DEPS
index 33b8de4a..a406912b 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'dabd7bd56984cb7af69d5f2eb63014e678d97224',
+  'v8_revision': '489561d26d02083b87fd49cdae0f0355e7f3e9bb',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 16f5784..a5efd6e2 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -2130,7 +2130,6 @@
     "template_util_unittest.cc",
     "test/histogram_tester_unittest.cc",
     "test/mock_callback_unittest.cc",
-    "test/scoped_feature_list_unittest.cc",
     "test/scoped_mock_time_message_loop_task_runner_unittest.cc",
     "test/scoped_task_scheduler_unittest.cc",
     "test/test_pending_task_unittest.cc",
diff --git a/base/test/scoped_feature_list.cc b/base/test/scoped_feature_list.cc
index 22b20b9..f0f3f4e 100644
--- a/base/test/scoped_feature_list.cc
+++ b/base/test/scoped_feature_list.cc
@@ -4,79 +4,24 @@
 
 #include "base/test/scoped_feature_list.h"
 
-#include <algorithm>
 #include <string>
-#include <vector>
-
-#include "base/stl_util.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
 
 namespace base {
 namespace test {
 
 namespace {
 
-std::vector<StringPiece> GetFeatureVector(
+static std::string GetFeatureString(
     const std::initializer_list<base::Feature>& features) {
-  std::vector<StringPiece> output;
+  std::string output;
   for (const base::Feature& feature : features) {
-    output.push_back(feature.name);
+    if (!output.empty())
+      output += ",";
+    output += feature.name;
   }
-
   return output;
 }
 
-// Extracts a feature name from a feature state string. For example, given
-// the input "*MyLovelyFeature<SomeFieldTrial", returns "MyLovelyFeature".
-StringPiece GetFeatureName(StringPiece feature) {
-  StringPiece feature_name = feature;
-
-  // Remove default info.
-  if (feature_name.starts_with("*"))
-    feature_name = feature_name.substr(1);
-
-  // Remove field_trial info.
-  std::size_t index = feature_name.find("<");
-  if (index != std::string::npos)
-    feature_name = feature_name.substr(0, index);
-
-  return feature_name;
-}
-
-struct Features {
-  std::vector<StringPiece> enabled_feature_list;
-  std::vector<StringPiece> disabled_feature_list;
-};
-
-// Merges previously-specified feature overrides with those passed into one of
-// the Init() methods. |features| should be a list of features previously
-// overridden to be in the |override_state|. |merged_features| should contain
-// the enabled and disabled features passed into the Init() method, plus any
-// overrides merged as a result of previous calls to this function.
-void OverrideFeatures(const std::string& features,
-                      base::FeatureList::OverrideState override_state,
-                      Features* merged_features) {
-  std::vector<StringPiece> features_list =
-      SplitStringPiece(features, ",", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
-
-  for (StringPiece feature : features_list) {
-    StringPiece feature_name = GetFeatureName(feature);
-
-    if (ContainsValue(merged_features->enabled_feature_list, feature_name) ||
-        ContainsValue(merged_features->disabled_feature_list, feature_name))
-      continue;
-
-    if (override_state == FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE) {
-      merged_features->enabled_feature_list.push_back(feature);
-    } else {
-      DCHECK_EQ(override_state,
-                FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE);
-      merged_features->disabled_feature_list.push_back(feature);
-    }
-  }
-}
-
 }  // namespace
 
 ScopedFeatureList::ScopedFeatureList() {}
@@ -95,6 +40,13 @@
   InitWithFeatureList(std::move(feature_list));
 }
 
+void ScopedFeatureList::InitWithFeatures(
+    const std::initializer_list<base::Feature>& enabled_features,
+    const std::initializer_list<base::Feature>& disabled_features) {
+  InitFromCommandLine(GetFeatureString(enabled_features),
+                      GetFeatureString(disabled_features));
+}
+
 void ScopedFeatureList::InitWithFeatureList(
     std::unique_ptr<FeatureList> feature_list) {
   DCHECK(!original_feature_list_);
@@ -110,43 +62,12 @@
   InitWithFeatureList(std::move(feature_list));
 }
 
-void ScopedFeatureList::InitWithFeatures(
-    const std::initializer_list<base::Feature>& enabled_features,
-    const std::initializer_list<base::Feature>& disabled_features) {
-  Features merged_features;
-  merged_features.enabled_feature_list = GetFeatureVector(enabled_features);
-  merged_features.disabled_feature_list = GetFeatureVector(disabled_features);
-
-  base::FeatureList* feature_list = base::FeatureList::GetInstance();
-
-  // |current_enabled_features| and |current_disabled_features| must declare out
-  // of if scope to avoid them out of scope before JoinString calls because
-  // |merged_features| may contains StringPiece which holding pointer points to
-  // |current_enabled_features| and |current_disabled_features|.
-  std::string current_enabled_features;
-  std::string current_disabled_features;
-  if (feature_list) {
-    base::FeatureList::GetInstance()->GetFeatureOverrides(
-        &current_enabled_features, &current_disabled_features);
-    OverrideFeatures(current_enabled_features,
-                     FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE,
-                     &merged_features);
-    OverrideFeatures(current_disabled_features,
-                     FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE,
-                     &merged_features);
-  }
-
-  std::string enabled = JoinString(merged_features.enabled_feature_list, ",");
-  std::string disabled = JoinString(merged_features.disabled_feature_list, ",");
-  InitFromCommandLine(enabled, disabled);
-}
-
 void ScopedFeatureList::InitAndEnableFeature(const base::Feature& feature) {
-  InitWithFeatures({feature}, {});
+  InitFromCommandLine(feature.name, std::string());
 }
 
 void ScopedFeatureList::InitAndDisableFeature(const base::Feature& feature) {
-  InitWithFeatures({}, {feature});
+  InitFromCommandLine(std::string(), feature.name);
 }
 
 }  // namespace test
diff --git a/base/test/scoped_feature_list.h b/base/test/scoped_feature_list.h
index e1df6c6a..99e07f5 100644
--- a/base/test/scoped_feature_list.h
+++ b/base/test/scoped_feature_list.h
@@ -22,42 +22,29 @@
   ScopedFeatureList();
   ~ScopedFeatureList();
 
-  // WARNING: This method will reset any globally configured features to their
-  // default values, which can hide feature interaction bugs. Please use
-  // sparingly.  https://crbug.com/713390
   // Initializes and registers a FeatureList instance with no overrides.
   void Init();
 
-  // WARNING: This method will reset any globally configured features to their
-  // default values, which can hide feature interaction bugs. Please use
-  // sparingly.  https://crbug.com/713390
   // Initializes and registers the given FeatureList instance.
   void InitWithFeatureList(std::unique_ptr<FeatureList> feature_list);
 
-  // WARNING: This method will reset any globally configured features to their
-  // default values, which can hide feature interaction bugs. Please use
-  // sparingly.  https://crbug.com/713390
-  // Initializes and registers a FeatureList instance with only the given
-  // enabled and disabled features (comma-separated names).
-  void InitFromCommandLine(const std::string& enable_features,
-                           const std::string& disable_features);
-
-  // Initializes and registers a FeatureList instance based on present
-  // FeatureList and overridden with the given enabled and disabled features.
-  // Any feature overrides already present in the global FeatureList will
-  // continue to apply, unless they conflict with the overrides passed into this
-  // method. This is important for testing potentially unexpected feature
-  // interactions.
+  // Initializes and registers a FeatureList instance with the given enabled
+  // and disabled features.
   void InitWithFeatures(
       const std::initializer_list<base::Feature>& enabled_features,
       const std::initializer_list<base::Feature>& disabled_features);
 
-  // Initializes and registers a FeatureList instance based on present
-  // FeatureList and overridden with single enabled feature.
+  // Initializes and registers a FeatureList instance with the given
+  // enabled and disabled features (comma-separated names).
+  void InitFromCommandLine(const std::string& enable_features,
+                           const std::string& disable_features);
+
+  // Initializes and registers a FeatureList instance enabling a single
+  // feature.
   void InitAndEnableFeature(const base::Feature& feature);
 
-  // Initializes and registers a FeatureList instance based on present
-  // FeatureList and overridden with single disabled feature.
+  // Initializes and registers a FeatureList instance disabling a single
+  // feature.
   void InitAndDisableFeature(const base::Feature& feature);
 
  private:
diff --git a/base/test/scoped_feature_list_unittest.cc b/base/test/scoped_feature_list_unittest.cc
deleted file mode 100644
index 21d1b4d..0000000
--- a/base/test/scoped_feature_list_unittest.cc
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2017 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.
-
-#include "base/test/scoped_feature_list.h"
-
-#include <string>
-#include "base/metrics/field_trial.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-namespace test {
-
-namespace {
-
-const base::Feature kTestFeature1{"TestFeature1",
-                                  base::FEATURE_DISABLED_BY_DEFAULT};
-const base::Feature kTestFeature2{"TestFeature2",
-                                  base::FEATURE_DISABLED_BY_DEFAULT};
-
-void ExpectFeatures(const std::string& enabled_features,
-                    const std::string& disabled_features) {
-  base::FeatureList* list = base::FeatureList::GetInstance();
-  std::string actual_enabled_features;
-  std::string actual_disabled_features;
-
-  list->GetFeatureOverrides(&actual_enabled_features,
-                            &actual_disabled_features);
-
-  EXPECT_EQ(enabled_features, actual_enabled_features);
-  EXPECT_EQ(disabled_features, actual_disabled_features);
-}
-
-}  // namespace
-
-class ScopedFeatureListTest : public testing::Test {
- public:
-  ScopedFeatureListTest() {
-    // Clear default feature list.
-    std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
-    feature_list->InitializeFromCommandLine(std::string(), std::string());
-    original_feature_list_ = base::FeatureList::ClearInstanceForTesting();
-    base::FeatureList::SetInstance(std::move(feature_list));
-  }
-
-  ~ScopedFeatureListTest() override {
-    // Restore feature list.
-    if (original_feature_list_) {
-      base::FeatureList::ClearInstanceForTesting();
-      base::FeatureList::RestoreInstanceForTesting(
-          std::move(original_feature_list_));
-    }
-  }
-
- private:
-  // Save the present FeatureList and restore it after test finish.
-  std::unique_ptr<FeatureList> original_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedFeatureListTest);
-};
-
-TEST_F(ScopedFeatureListTest, BasicScoped) {
-  ExpectFeatures(std::string(), std::string());
-  EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature1));
-  {
-    test::ScopedFeatureList feature_list1;
-    feature_list1.InitFromCommandLine("TestFeature1", std::string());
-    ExpectFeatures("TestFeature1", std::string());
-    EXPECT_TRUE(FeatureList::IsEnabled(kTestFeature1));
-  }
-  ExpectFeatures(std::string(), std::string());
-  EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature1));
-}
-
-TEST_F(ScopedFeatureListTest, EnableFeatureOverrideDisable) {
-  test::ScopedFeatureList feature_list1;
-  feature_list1.InitWithFeatures({}, {kTestFeature1});
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({kTestFeature1}, {});
-    ExpectFeatures("TestFeature1", std::string());
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideNotMakeDuplicate) {
-  test::ScopedFeatureList feature_list1;
-  feature_list1.InitWithFeatures({}, {kTestFeature1});
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({}, {kTestFeature1});
-    ExpectFeatures(std::string(), "TestFeature1");
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithDefault) {
-  test::ScopedFeatureList feature_list1;
-  feature_list1.InitFromCommandLine("*TestFeature1", std::string());
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({kTestFeature1}, {});
-    ExpectFeatures("TestFeature1", std::string());
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithDefault2) {
-  test::ScopedFeatureList feature_list1;
-  feature_list1.InitFromCommandLine("*TestFeature1", std::string());
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({}, {kTestFeature1});
-    ExpectFeatures(std::string(), "TestFeature1");
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithEnabledFieldTried) {
-  test::ScopedFeatureList feature_list1;
-
-  std::unique_ptr<FeatureList> feature_list(new FeatureList);
-  FieldTrialList field_trial_list(nullptr);
-  FieldTrial* trial = FieldTrialList::CreateFieldTrial("TrialExample", "A");
-  feature_list->RegisterFieldTrialOverride(
-      kTestFeature1.name, FeatureList::OVERRIDE_ENABLE_FEATURE, trial);
-  feature_list1.InitWithFeatureList(std::move(feature_list));
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({kTestFeature1}, {});
-    ExpectFeatures("TestFeature1", std::string());
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideFeatureWithDisabledFieldTried) {
-  test::ScopedFeatureList feature_list1;
-
-  std::unique_ptr<FeatureList> feature_list(new FeatureList);
-  FieldTrialList field_trial_list(nullptr);
-  FieldTrial* trial = FieldTrialList::CreateFieldTrial("TrialExample", "A");
-  feature_list->RegisterFieldTrialOverride(
-      kTestFeature1.name, FeatureList::OVERRIDE_DISABLE_FEATURE, trial);
-  feature_list1.InitWithFeatureList(std::move(feature_list));
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({kTestFeature1}, {});
-    ExpectFeatures("TestFeature1", std::string());
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideKeepsOtherExistingFeature) {
-  test::ScopedFeatureList feature_list1;
-  feature_list1.InitWithFeatures({}, {kTestFeature1});
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({}, {kTestFeature2});
-    EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature1));
-    EXPECT_FALSE(FeatureList::IsEnabled(kTestFeature2));
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideKeepsOtherExistingFeature2) {
-  test::ScopedFeatureList feature_list1;
-  feature_list1.InitWithFeatures({}, {kTestFeature1});
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({kTestFeature2}, {});
-    ExpectFeatures("TestFeature2", "TestFeature1");
-  }
-}
-
-TEST_F(ScopedFeatureListTest, FeatureOverrideKeepsOtherExistingDefaultFeature) {
-  test::ScopedFeatureList feature_list1;
-  feature_list1.InitFromCommandLine("*TestFeature1", std::string());
-
-  {
-    test::ScopedFeatureList feature_list2;
-    feature_list2.InitWithFeatures({}, {kTestFeature2});
-    ExpectFeatures("*TestFeature1", "TestFeature2");
-  }
-}
-
-}  // namespace test
-}  // namespace base
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index 056da05..092ed60 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -285,7 +285,6 @@
 crbug.com/591099 animations/interpolation/min-height-interpolation.html [ Crash ]
 crbug.com/591099 animations/interpolation/object-position-interpolation.html [ Crash ]
 crbug.com/591099 animations/interpolation/offset-rotate-interpolation.html [ Crash ]
-crbug.com/591099 animations/interpolation/offset-rotation-interpolation.html [ Crash ]
 crbug.com/591099 animations/interpolation/opacity-interpolation.html [ Crash ]
 crbug.com/591099 animations/interpolation/outline-color-interpolation.html [ Crash ]
 crbug.com/591099 animations/interpolation/outline-offset-interpolation.html [ Crash ]
@@ -22670,7 +22669,6 @@
 crbug.com/591099 virtual/threaded/animations/interpolation/min-height-interpolation.html [ Crash ]
 crbug.com/591099 virtual/threaded/animations/interpolation/object-position-interpolation.html [ Crash ]
 crbug.com/591099 virtual/threaded/animations/interpolation/offset-rotate-interpolation.html [ Crash ]
-crbug.com/591099 virtual/threaded/animations/interpolation/offset-rotation-interpolation.html [ Crash ]
 crbug.com/591099 virtual/threaded/animations/interpolation/opacity-interpolation.html [ Crash ]
 crbug.com/591099 virtual/threaded/animations/interpolation/outline-color-interpolation.html [ Crash ]
 crbug.com/591099 virtual/threaded/animations/interpolation/outline-offset-interpolation.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/animations/composition/offset-rotation-composition.html b/third_party/WebKit/LayoutTests/animations/composition/offset-rotation-composition.html
deleted file mode 100644
index 9923944..0000000
--- a/third_party/WebKit/LayoutTests/animations/composition/offset-rotation-composition.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html>
-<body>
-<script src="../interpolation/resources/interpolation-test.js"></script>
-<script>
-assertComposition({
-  property: 'offset-rotation',
-  underlying: '20deg',
-  addFrom: '10deg',
-  addTo: '20deg',
-}, [
-  {at: -0.3, is: '27deg'},
-  {at: 0, is: '30deg'},
-  {at: 0.3, is: '33deg'},
-  {at: 0.6, is: '36deg'},
-  {at: 1, is: '40deg'},
-  {at: 1.5, is: '45deg'},
-]);
-
-assertComposition({
-  property: 'offset-rotation',
-  underlying: 'auto 20deg',
-  addFrom: '10deg',
-  addTo: '20deg',
-}, [
-  {at: -0.3, is: '7deg'},
-  {at: 0, is: '10deg'},
-  {at: 0.3, is: '13deg'},
-  {at: 0.6, is: '16deg'},
-  {at: 1, is: '20deg'},
-  {at: 1.5, is: '25deg'},
-]);
-
-assertComposition({
-  property: 'offset-rotation',
-  underlying: 'auto 20deg',
-  addFrom: 'reverse 10deg',
-  addTo: 'auto 20deg',
-}, [
-  {at: -0.3, is: 'auto 261deg'},
-  {at: 0, is: 'auto 210deg'},
-  {at: 0.3, is: 'auto 159deg'},
-  {at: 0.6, is: 'auto 108deg'},
-  {at: 1, is: 'auto 40deg'},
-  {at: 1.5, is: 'auto -45deg'},
-]);
-
-assertComposition({
-  property: 'offset-rotation',
-  underlying: '20deg',
-  addFrom: 'reverse 10deg',
-  addTo: '20deg',
-}, [
-  {at: -0.3, is: 'auto 190deg'},
-  {at: 0, is: 'auto 190deg'},
-  {at: 0.3, is: 'auto 190deg'},
-  {at: 0.6, is: '40deg'},
-  {at: 1, is: '40deg'},
-  {at: 1.5, is: '40deg'},
-]);
-
-assertComposition({
-  property: 'offset-rotation',
-  underlying: '20deg',
-  replaceFrom: 'reverse 10deg',
-  addTo: '20deg',
-}, [
-  {at: -0.3, is: 'auto 190deg'},
-  {at: 0, is: 'auto 190deg'},
-  {at: 0.3, is: 'auto 190deg'},
-  {at: 0.6, is: '40deg'},
-  {at: 1, is: '40deg'},
-  {at: 1.5, is: '40deg'},
-]);
-
-assertComposition({
-  property: 'offset-rotation',
-  underlying: '20deg',
-  addFrom: '10deg',
-  replaceTo: '10deg',
-}, [
-  {at: -0.3, is: '36deg'},
-  {at: 0, is: '30deg'},
-  {at: 0.3, is: '24deg'},
-  {at: 0.6, is: '18deg'},
-  {at: 1, is: '10deg'},
-  {at: 1.5, is: '0deg'},
-]);
-</script>
-</body>
diff --git a/third_party/WebKit/LayoutTests/animations/interpolation/offset-rotation-interpolation.html b/third_party/WebKit/LayoutTests/animations/interpolation/offset-rotation-interpolation.html
deleted file mode 100644
index 8f3439ab..0000000
--- a/third_party/WebKit/LayoutTests/animations/interpolation/offset-rotation-interpolation.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE html>
-<meta charset="UTF-8">
-<style>
-.parent {
-  offset-rotation: 30deg;
-}
-.target {
-  width: 80px;
-  height: 80px;
-  display: inline-block;
-  background-color: black;
-  margin-right: 5px;
-  offset-rotation: 10deg;
-}
-.expected {
-  background-color: green;
-  margin-right: 15px;
-}
-</style>
-<body>
-<script src="resources/interpolation-test.js"></script>
-<script>
-assertInterpolation({
-  property: 'offset-rotation',
-  from: neutralKeyframe,
-  to: '20deg',
-}, [
-  {at: -0.3, is: '7deg'},
-  {at: 0, is: '10deg'},
-  {at: 0.3, is: '13deg'},
-  {at: 0.6, is: '16deg'},
-  {at: 1, is: '20deg'},
-  {at: 1.5, is: '25deg'},
-]);
-
-assertNoInterpolation({
-  property: 'offset-rotation',
-  from: 'initial',
-  to: '20deg',
-});
-
-assertInterpolation({
-  property: 'offset-rotation',
-  from: 'inherit',
-  to: '20deg',
-}, [
-  {at: -0.3, is: '33deg'},
-  {at: 0, is: '30deg'},
-  {at: 0.3, is: '27deg'},
-  {at: 0.6, is: '24deg'},
-  {at: 1, is: '20deg'},
-  {at: 1.5, is: '15deg'},
-]);
-
-assertNoInterpolation({
-  property: 'offset-rotation',
-  from: 'unset',
-  to: '20deg',
-});
-
-assertInterpolation({
-  property: 'offset-rotation',
-  from: '10deg',
-  to: '50deg'
-}, [
-  {at: -0.3, is: '-2deg'},
-  {at: 0, is: '10deg'},
-  {at: 0.3, is: '22deg'},
-  {at: 0.6, is: '34deg'},
-  {at: 1, is: '50deg'},
-  {at: 1.5, is: '70deg'},
-]);
-assertInterpolation({
-  property: 'offset-rotation',
-  from: 'auto 10deg',
-  to: 'auto 50deg'
-}, [
-  {at: -0.3, is: 'auto -2deg'},
-  {at: 0, is: 'auto 10deg'},
-  {at: 0.3, is: 'auto 22deg'},
-  {at: 0.6, is: 'auto 34deg'},
-  {at: 1, is: 'auto 50deg'},
-  {at: 1.5, is: 'auto 70deg'},
-]);
-assertInterpolation({
-  property: 'offset-rotation',
-  from: 'reverse -170deg',
-  to: 'reverse -130deg'
-}, [
-  {at: -0.3, is: 'auto -2deg'},
-  {at: 0, is: 'auto 10deg'},
-  {at: 0.3, is: 'auto 22deg'},
-  {at: 0.6, is: 'auto 34deg'},
-  {at: 1, is: 'auto 50deg'},
-  {at: 1.5, is: 'auto 70deg'},
-]);
-assertInterpolation({
-  property: 'offset-rotation',
-  from: 'auto 10deg',
-  to: 'reverse -130deg'
-}, [
-  {at: -0.3, is: 'auto -2deg'},
-  {at: 0, is: 'auto 10deg'},
-  {at: 0.3, is: 'auto 22deg'},
-  {at: 0.6, is: 'auto 34deg'},
-  {at: 1, is: 'auto 50deg'},
-  {at: 1.5, is: 'auto 70deg'},
-]);
-assertInterpolation({
-  property: 'offset-rotation',
-  from: 'reverse -170deg',
-  to: 'auto 50deg'
-}, [
-  {at: -0.3, is: 'auto -2deg'},
-  {at: 0, is: 'auto 10deg'},
-  {at: 0.3, is: 'auto 22deg'},
-  {at: 0.6, is: 'auto 34deg'},
-  {at: 1, is: 'auto 50deg'},
-  {at: 1.5, is: 'auto 70deg'},
-]);
-assertNoInterpolation({
-  property: 'offset-rotation',
-  from: 'auto 200deg',
-  to: '300deg'
-});
-assertNoInterpolation({
-  property: 'offset-rotation',
-  from: '300deg',
-  to: 'reverse 20deg'
-});
-</script>
-</body>
diff --git a/third_party/WebKit/LayoutTests/animations/responsive/offset-rotation-responsive.html b/third_party/WebKit/LayoutTests/animations/responsive/offset-rotation-responsive.html
deleted file mode 100644
index f78d183..0000000
--- a/third_party/WebKit/LayoutTests/animations/responsive/offset-rotation-responsive.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<script src="resources/responsive-test.js"></script>
-<script>
-assertCSSResponsive({
-  property: 'offset-rotation',
-  from: 'inherit',
-  to: 'auto 40deg',
-  configurations: [{
-    state: {inherited: '50deg'},
-    expect: [
-      {at: 0.25, is: '50deg'},
-      {at: 0.75, is: 'auto 40deg'},
-    ],
-  }, {
-    state: {inherited: 'auto 20deg'},
-    expect: [
-      {at: 0.25, is: 'auto 25deg'},
-      {at: 0.75, is: 'auto 35deg'},
-    ],
-  }],
-});
-
-assertCSSResponsive({
-  property: 'offset-rotation',
-  from: neutralKeyframe,
-  to: '80deg',
-  configurations: [{
-    state: {underlying: 'auto 50deg'},
-    expect: [
-      {at: 0.25, is: 'auto 50deg'},
-      {at: 0.75, is: '80deg'},
-    ],
-  }, {
-    state: {underlying: '40deg'},
-    expect: [
-      {at: 0.25, is: '50deg'},
-      {at: 0.75, is: '70deg'},
-    ],
-  }],
-});
-</script>
diff --git a/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation-deprecated-expected.txt b/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation-deprecated-expected.txt
deleted file mode 100644
index 4db2b578..0000000
--- a/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation-deprecated-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-CONSOLE WARNING: offset-rotation is deprecated and will be removed in M58, around April 2017. Please use offset-rotate instead. See https://www.chromestatus.com/features/6390764217040896 for more details.
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation-deprecated.html b/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation-deprecated.html
deleted file mode 100644
index 28386010..0000000
--- a/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation-deprecated.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE html>
-<script src="../../resources/js-test.js"></script>
-<style>
-.foo {
-  offset-rotation: auto 30deg;
-}
-</style>
diff --git a/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation.html b/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation.html
deleted file mode 100644
index 576cdfc9..0000000
--- a/third_party/WebKit/LayoutTests/css3/motion-path/offset-rotation.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<style>
-#div2 {
-    offset-rotation: auto;
-}
-#div3 {
-    offset-rotation: reverse;
-}
-#div4 {
-    offset-rotation: 180deg;
-}
-#div5 {
-    offset-rotation: 0rad;
-}
-#div6 {
-    offset-rotation: -400grad auto;
-}
-#div7 {
-    offset-rotation: 2turn reverse;
-}
-#div8 {
-    offset-rotation: reverse 30deg;
-}
-#div9 {
-    offset-rotation: inherit;
-}
-</style>
-</head>
-<body>
-<div id="div1"></div>
-<div id="div2"></div>
-<div id="div3"></div>
-<div id="div4"></div>
-<div id="div5"></div>
-<div id="div6"></div>
-<div id="div7"></div>
-<div id="div8">
-    <div id="div9"></div>
-    <div id="div10"></div>
-</div>
-<span id="span1" style="offset-rotation: auto -45deg"></span>
-
-<script>
-"use strict";
-
-test(function() {
-    assert_equals(getComputedStyle(div1, null).offsetRotation, 'auto 0deg');
-}, 'offset-rotation default is auto');
-
-test(function() {
-    assert_equals(getComputedStyle(div2, null).offsetRotation, 'auto 0deg');
-}, 'offset-rotation auto expands to auto 0deg');
-
-test(function() {
-    assert_equals(getComputedStyle(div3, null).offsetRotation, 'auto 180deg');
-}, 'offset-rotation reverse expands to auto 180deg');
-
-test(function() {
-    assert_equals(getComputedStyle(div4, null).offsetRotation, '180deg');
-}, 'offset-rotation can be a fixed angle');
-
-test(function() {
-    assert_equals(getComputedStyle(div5, null).offsetRotation, '0deg');
-}, 'offset-rotation angles are converted to degrees');
-
-test(function() {
-    assert_equals(getComputedStyle(div6, null).offsetRotation, 'auto -360deg');
-}, 'offset-rotation can be supplied with angle before auto');
-
-test(function() {
-    assert_equals(getComputedStyle(div7, null).offsetRotation, 'auto 900deg');
-}, 'offset-rotation can be supplied with angle before reverse');
-
-test(function() {
-    assert_equals(getComputedStyle(div8, null).offsetRotation, 'auto 210deg');
-}, 'offset-rotation is unaffected by child elements');
-
-test(function() {
-    assert_equals(getComputedStyle(div9, null).offsetRotation, 'auto 210deg');
-}, 'offset-rotation can be explicitly inherited');
-
-test(function() {
-    assert_equals(getComputedStyle(div10, null).offsetRotation, 'auto 0deg');
-}, 'offset-rotation is not inherited by default');
-
-test(function() {
-    assert_equals(span1.style.offsetRotation, 'auto -45deg');
-}, 'offset-rotation style can be set inline');
-
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/css3/motion-path/offset.html b/third_party/WebKit/LayoutTests/css3/motion-path/offset.html
index 079bc44..8908d540 100644
--- a/third_party/WebKit/LayoutTests/css3/motion-path/offset.html
+++ b/third_party/WebKit/LayoutTests/css3/motion-path/offset.html
@@ -27,7 +27,7 @@
 test(function() {
     assert_equals(getComputedStyle(div1, null).offsetPath, 'none');
     assert_equals(getComputedStyle(div1, null).offsetDistance, '0px');
-    assert_equals(getComputedStyle(div1, null).offsetRotation, 'auto 0deg');
+    assert_equals(getComputedStyle(div1, null).offsetRotate, 'auto 0deg');
     assert_equals(getComputedStyle(div1, null).offset, 'none 0px auto 0deg');
     assert_equals(getComputedStyle(div1, null).transform, 'none');
 }, 'offset default is none 0px auto 0deg');
@@ -35,7 +35,7 @@
 test(function() {
     assert_equals(getComputedStyle(div2, null).offsetPath, 'none');
     assert_equals(getComputedStyle(div2, null).offsetDistance, '50%');
-    assert_equals(getComputedStyle(div2, null).offsetRotation, 'auto 360deg');
+    assert_equals(getComputedStyle(div2, null).offsetRotate, 'auto 360deg');
     assert_equals(getComputedStyle(div2, null).offset, 'none 50% auto 360deg');
     assert_equals(getComputedStyle(div2, null).transform, 'none');
 }, 'offset supports various angle units');
@@ -43,7 +43,7 @@
 test(function() {
     assert_equals(getComputedStyle(div3, null).offsetPath, "path('M 10 20 h 30 v 150')");
     assert_equals(getComputedStyle(div3, null).offsetDistance, '70px');
-    assert_equals(getComputedStyle(div3, null).offsetRotation, '0deg');
+    assert_equals(getComputedStyle(div3, null).offsetRotate, '0deg');
     assert_equals(getComputedStyle(div3, null).offset, "path('M 10 20 h 30 v 150') 70px 0deg");
     assert_equals(getComputedStyle(div3, null).transform, 'matrix(1, 0, 0, 1, 0, 0)');
 }, 'offset supports SVG path data');
@@ -51,7 +51,7 @@
 test(function() {
     assert_equals(getComputedStyle(div4, null).offsetPath, 'none');
     assert_equals(getComputedStyle(div4, null).offsetDistance, '10px');
-    assert_equals(getComputedStyle(div4, null).offsetRotation, 'auto 270deg');
+    assert_equals(getComputedStyle(div4, null).offsetRotate, 'auto 270deg');
     assert_equals(getComputedStyle(div4, null).offset, 'none 10px auto 270deg');
     assert_equals(getComputedStyle(div4, null).transform, 'none');
 }, 'offset property data can be supplied in any order');
@@ -59,7 +59,7 @@
 test(function() {
     assert_equals(span1.style.offsetPath, "path('M 1 2 V 3')");
     assert_equals(span1.style.offsetDistance, '4px');
-    assert_equals(span1.style.offsetRotation, '5deg');
+    assert_equals(span1.style.offsetRotate, '5deg');
     assert_equals(span1.style.offset, "path('M 1 2 V 3') 4px 5deg");
     assert_equals(span1.style.transform, '');
 }, 'offset style can be set inline');
diff --git a/third_party/WebKit/LayoutTests/css3/motion-path/offsetParent.html b/third_party/WebKit/LayoutTests/css3/motion-path/offsetParent.html
index 16dd515..238651e 100644
--- a/third_party/WebKit/LayoutTests/css3/motion-path/offsetParent.html
+++ b/third_party/WebKit/LayoutTests/css3/motion-path/offsetParent.html
@@ -11,7 +11,7 @@
    <div id="d3" style="offset-distance: 100%">
         <span id="s3"></span>
     </div>
-   <div id="d4" style="offset-rotation: 360deg">
+   <div id="d4" style="offset-rotate: 360deg">
         <span id="s4"></span>
     </div>
    <div id="d5" style="offset-anchor: bottom right">
@@ -31,7 +31,7 @@
 }, "inside offset-distance");
 test(function() {
     assert_equals(s4.offsetParent, container);
-}, "inside offset-rotation");
+}, "inside offset-rotate");
 test(function() {
     assert_equals(s5.offsetParent, container);
 }, "inside offset-anchor");
diff --git a/third_party/WebKit/LayoutTests/css3/motion-path/property-use-count-offset-rotate.html b/third_party/WebKit/LayoutTests/css3/motion-path/property-use-count-offset-rotate.html
index 118e0f7..209f2bb8e 100644
--- a/third_party/WebKit/LayoutTests/css3/motion-path/property-use-count-offset-rotate.html
+++ b/third_party/WebKit/LayoutTests/css3/motion-path/property-use-count-offset-rotate.html
@@ -15,6 +15,5 @@
   getComputedStyle(target);
 
   assert_true(internals.isCSSPropertyUseCounted(document, "offset-rotate"));
-  assert_false(internals.isCSSPropertyUseCounted(document, "offset-rotation"));
 });
 </script>
diff --git a/third_party/WebKit/LayoutTests/css3/motion-path/property-use-count-offset-rotation.html b/third_party/WebKit/LayoutTests/css3/motion-path/property-use-count-offset-rotation.html
deleted file mode 100644
index 787ae01a..0000000
--- a/third_party/WebKit/LayoutTests/css3/motion-path/property-use-count-offset-rotation.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<head>
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-</head>
-
-<div id="target" class="p"></div>
-<script>
-test(function() {
-  assert_false(internals.isCSSPropertyUseCounted(document, "offset-rotation"));
-
-  var styleElement = document.createElement('style');
-  styleElement.textContent = ".p { offset-rotation: 0deg; }";
-  document.head.appendChild(styleElement);
-  getComputedStyle(target);
-
-  assert_true(internals.isCSSPropertyUseCounted(document, "offset-rotation"));
-  assert_false(internals.isCSSPropertyUseCounted(document, "offset-rotate"));
-});
-</script>
diff --git a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt
index 97dba91..cdc5172 100644
--- a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-listing-expected.txt
@@ -212,7 +212,6 @@
 offset-path: none
 offset-position: auto
 offset-rotate: auto 0deg
-offset-rotation: auto 0deg
 opacity: 1
 order: 0
 orphans: 2
diff --git a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
index 62243e9..0fc97ee 100644
--- a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
@@ -212,7 +212,6 @@
 offset-path: none
 offset-position: auto
 offset-rotate: auto 0deg
-offset-rotation: auto 0deg
 opacity: 1
 order: 0
 orphans: 2
diff --git a/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt b/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt
index 0c331e9..f69ece8 100644
--- a/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/css/getComputedStyle-listing-expected.txt
@@ -212,7 +212,6 @@
 offset-path: none
 offset-position: auto
 offset-rotate: auto 0deg
-offset-rotation: auto 0deg
 opacity: 1
 order: 0
 orphans: 2
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt
index babb200..e90005e 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt
@@ -197,7 +197,6 @@
 offsetDistance
 offsetPath
 offsetRotate
-offsetRotation
 opacity
 order
 orientation
diff --git a/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt b/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt
index a9d3112..fe295ea 100644
--- a/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt
@@ -206,7 +206,6 @@
 offsetPath
 offsetPosition
 offsetRotate
-offsetRotation
 opacity
 order
 orientation
diff --git a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
index b8c9331..2a76e64 100644
--- a/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSInterpolationTypesMap.cpp
@@ -225,7 +225,6 @@
       applicable_types->push_back(
           WTF::MakeUnique<CSSClipInterpolationType>(used_property));
       break;
-    case CSSPropertyOffsetRotation:
     case CSSPropertyOffsetRotate:
       applicable_types->push_back(
           WTF::MakeUnique<CSSOffsetRotateInterpolationType>(used_property));
diff --git a/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp
index 13e7e12..4a8b2762 100644
--- a/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp
@@ -71,7 +71,7 @@
   bool IsValid(const InterpolationEnvironment& environment,
                const InterpolationValue& underlying) const final {
     return inherited_rotation_type_ ==
-           environment.GetState().ParentStyle()->OffsetRotation().type;
+           environment.GetState().ParentStyle()->OffsetRotate().type;
   }
 
  private:
@@ -111,10 +111,10 @@
     const StyleResolverState& state,
     ConversionCheckers& conversion_checkers) const {
   OffsetRotationType inherited_rotation_type =
-      state.ParentStyle()->OffsetRotation().type;
+      state.ParentStyle()->OffsetRotate().type;
   conversion_checkers.push_back(
       InheritedRotationTypeChecker::Create(inherited_rotation_type));
-  return ConvertOffsetRotate(state.ParentStyle()->OffsetRotation());
+  return ConvertOffsetRotate(state.ParentStyle()->OffsetRotate());
 }
 
 InterpolationValue CSSOffsetRotateInterpolationType::MaybeConvertValue(
@@ -143,7 +143,7 @@
 InterpolationValue
 CSSOffsetRotateInterpolationType::MaybeConvertStandardPropertyUnderlyingValue(
     const ComputedStyle& style) const {
-  return ConvertOffsetRotate(style.OffsetRotation());
+  return ConvertOffsetRotate(style.OffsetRotate());
 }
 
 void CSSOffsetRotateInterpolationType::Composite(
@@ -170,7 +170,7 @@
     const InterpolableValue& interpolable_value,
     const NonInterpolableValue* non_interpolable_value,
     StyleResolverState& state) const {
-  state.Style()->SetOffsetRotation(StyleOffsetRotation(
+  state.Style()->SetOffsetRotate(StyleOffsetRotation(
       ToInterpolableNumber(interpolable_value).Value(),
       ToCSSOffsetRotationNonInterpolableValue(*non_interpolable_value)
           .RotationType()));
diff --git a/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.h b/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.h
index ba120f27..a5128f4 100644
--- a/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.h
+++ b/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.h
@@ -13,8 +13,7 @@
  public:
   CSSOffsetRotateInterpolationType(PropertyHandle property)
       : CSSInterpolationType(property) {
-    DCHECK(CssProperty() == CSSPropertyOffsetRotate ||
-           CssProperty() == CSSPropertyOffsetRotation);
+    DCHECK(CssProperty() == CSSPropertyOffsetRotate);
   }
 
   InterpolationValue MaybeConvertStandardPropertyUnderlyingValue(
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp b/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp
index 2e31734..e3c0f36 100644
--- a/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp
+++ b/third_party/WebKit/Source/core/animation/css/CSSAnimatableValueFactory.cpp
@@ -616,10 +616,9 @@
     case CSSPropertyOffsetPosition:
       return CreateFromLengthPoint(style.OffsetPosition(), style);
     case CSSPropertyOffsetRotate:
-    case CSSPropertyOffsetRotation:
       return CreateFromDoubleAndBool(
-          style.OffsetRotation().angle,
-          style.OffsetRotation().type == kOffsetRotationAuto, style);
+          style.OffsetRotate().angle,
+          style.OffsetRotate().type == kOffsetRotationAuto, style);
     case CSSPropertyTransformOrigin:
       return CreateFromTransformOrigin(style.GetTransformOrigin(), style);
     case CSSPropertyWebkitPerspectiveOriginX:
diff --git a/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp b/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp
index a737c92..a2f7877 100644
--- a/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp
+++ b/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp
@@ -92,15 +92,15 @@
     CSSPropertyMinHeight, CSSPropertyMinWidth, CSSPropertyMixBlendMode,
     CSSPropertyObjectFit, CSSPropertyObjectPosition, CSSPropertyOffsetAnchor,
     CSSPropertyOffsetDistance, CSSPropertyOffsetPath, CSSPropertyOffsetPosition,
-    CSSPropertyOffsetRotate, CSSPropertyOffsetRotation, CSSPropertyOpacity,
-    CSSPropertyOrphans, CSSPropertyOutlineColor, CSSPropertyOutlineOffset,
-    CSSPropertyOutlineStyle, CSSPropertyOutlineWidth, CSSPropertyOverflowAnchor,
-    CSSPropertyOverflowWrap, CSSPropertyOverflowX, CSSPropertyOverflowY,
-    CSSPropertyPaddingBottom, CSSPropertyPaddingLeft, CSSPropertyPaddingRight,
-    CSSPropertyPaddingTop, CSSPropertyPointerEvents, CSSPropertyPosition,
-    CSSPropertyResize, CSSPropertyRight, CSSPropertyScrollBehavior,
-    CSSPropertySpeak, CSSPropertyTableLayout, CSSPropertyTabSize,
-    CSSPropertyTextAlign, CSSPropertyTextAlignLast, CSSPropertyTextDecoration,
+    CSSPropertyOffsetRotate, CSSPropertyOpacity, CSSPropertyOrphans,
+    CSSPropertyOutlineColor, CSSPropertyOutlineOffset, CSSPropertyOutlineStyle,
+    CSSPropertyOutlineWidth, CSSPropertyOverflowAnchor, CSSPropertyOverflowWrap,
+    CSSPropertyOverflowX, CSSPropertyOverflowY, CSSPropertyPaddingBottom,
+    CSSPropertyPaddingLeft, CSSPropertyPaddingRight, CSSPropertyPaddingTop,
+    CSSPropertyPointerEvents, CSSPropertyPosition, CSSPropertyResize,
+    CSSPropertyRight, CSSPropertyScrollBehavior, CSSPropertySpeak,
+    CSSPropertyTableLayout, CSSPropertyTabSize, CSSPropertyTextAlign,
+    CSSPropertyTextAlignLast, CSSPropertyTextDecoration,
     CSSPropertyTextDecorationLine, CSSPropertyTextDecorationStyle,
     CSSPropertyTextDecorationColor, CSSPropertyTextDecorationSkip,
     CSSPropertyTextJustify, CSSPropertyTextUnderlinePosition,
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.json5 b/third_party/WebKit/Source/core/css/CSSProperties.json5
index 75f15ba..753ff07e 100644
--- a/third_party/WebKit/Source/core/css/CSSProperties.json5
+++ b/third_party/WebKit/Source/core/css/CSSProperties.json5
@@ -1433,14 +1433,6 @@
       api_class: "CSSPropertyAPIOffsetRotate",
       converter: "ConvertOffsetRotate",
       interpolable: true,
-      runtime_flag: "CSSOffsetRotate",
-    },
-    {
-      name: "offset-rotation",
-      api_class: "CSSPropertyAPIOffsetRotate",
-      converter: "ConvertOffsetRotate",
-      interpolable: true,
-      runtime_flag: "CSSOffsetRotation",
     },
     {
       name: "opacity",
@@ -2855,7 +2847,7 @@
     },
     {
       name: "offset",
-      longhands: "offset-path;offset-distance;offset-rotation",
+      longhands: "offset-path;offset-distance;offset-rotate",
     },
     {
       name: "outline",
diff --git a/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp b/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp
index 29671f4..b8d4d959 100644
--- a/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp
+++ b/third_party/WebKit/Source/core/css/CSSPropertyEquality.cpp
@@ -200,8 +200,7 @@
     case CSSPropertyOffsetPosition:
       return a.OffsetPosition() == b.OffsetPosition();
     case CSSPropertyOffsetRotate:
-    case CSSPropertyOffsetRotation:
-      return a.OffsetRotation() == b.OffsetRotation();
+      return a.OffsetRotate() == b.OffsetRotate();
     case CSSPropertyOpacity:
       return a.Opacity() == b.Opacity();
     case CSSPropertyOrder:
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
index a1305d36..a01d69e 100644
--- a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
+++ b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
@@ -3437,13 +3437,12 @@
     case CSSPropertyOffsetDistance:
       return ZoomAdjustedPixelValueForLength(style.OffsetDistance(), style);
 
-    case CSSPropertyOffsetRotate:
-    case CSSPropertyOffsetRotation: {
+    case CSSPropertyOffsetRotate: {
       CSSValueList* list = CSSValueList::CreateSpaceSeparated();
-      if (style.OffsetRotation().type == kOffsetRotationAuto)
+      if (style.OffsetRotate().type == kOffsetRotationAuto)
         list->Append(*CSSIdentifierValue::Create(CSSValueAuto));
       list->Append(*CSSPrimitiveValue::Create(
-          style.OffsetRotation().angle, CSSPrimitiveValue::UnitType::kDegrees));
+          style.OffsetRotate().angle, CSSPrimitiveValue::UnitType::kDegrees));
       return list;
     }
 
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index c07acfa7..2055a28 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -750,21 +750,21 @@
   return list;
 }
 
-// offset: <offset-path> <offset-distance> <offset-rotation>
+// offset: <offset-path> <offset-distance> <offset-rotate>
 bool CSSPropertyParser::ConsumeOffsetShorthand(bool important) {
   const CSSValue* offset_path =
       CSSPropertyOffsetPathUtils::ConsumeOffsetPath(range_, context_);
   const CSSValue* offset_distance =
       ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll);
-  const CSSValue* offset_rotation = ConsumeOffsetRotate(range_);
-  if (!offset_path || !offset_distance || !offset_rotation || !range_.AtEnd())
+  const CSSValue* offset_rotate = ConsumeOffsetRotate(range_);
+  if (!offset_path || !offset_distance || !offset_rotate || !range_.AtEnd())
     return false;
 
   AddProperty(CSSPropertyOffsetPath, CSSPropertyOffset, *offset_path,
               important);
   AddProperty(CSSPropertyOffsetDistance, CSSPropertyOffset, *offset_distance,
               important);
-  AddProperty(CSSPropertyOffsetRotation, CSSPropertyOffset, *offset_rotation,
+  AddProperty(CSSPropertyOffsetRotate, CSSPropertyOffset, *offset_rotate,
               important);
 
   return true;
@@ -1757,7 +1757,6 @@
     case CSSPropertyOffsetDistance:
       return ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll);
     case CSSPropertyOffsetRotate:
-    case CSSPropertyOffsetRotation:
       return ConsumeOffsetRotate(range_);
     case CSSPropertyWebkitTransformOriginX:
     case CSSPropertyWebkitPerspectiveOriginX:
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp
index 68973928..3fbc122 100644
--- a/third_party/WebKit/Source/core/frame/Deprecation.cpp
+++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -121,10 +121,6 @@
     case CSSPropertyAliasMotionOffset:
       return replacedWillBeRemoved("motion-offset", "offset-distance", M58,
                                    "6390764217040896");
-    case CSSPropertyOffsetRotation:
-      return replacedWillBeRemoved("offset-rotation", "offset-rotate", M58,
-                                   "6390764217040896");
-
     default:
       return g_empty_string;
   }
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.cpp b/third_party/WebKit/Source/core/frame/UseCounter.cpp
index 29616c7..0b89d2a 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.cpp
+++ b/third_party/WebKit/Source/core/frame/UseCounter.cpp
@@ -1048,8 +1048,7 @@
       return 540;
     case CSSPropertyOffsetPath:
       return 541;
-    case CSSPropertyOffsetRotation:
-      return 542;
+    // CSSPropertyOffsetRotation was 542.
     case CSSPropertyOffset:
       return 543;
     case CSSPropertyOffsetAnchor:
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h
index d27e48a..77c3d77 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.h
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -1171,23 +1171,14 @@
 
   // offset-rotate
   static StyleOffsetRotation InitialOffsetRotate() {
-    return InitialOffsetRotation();
-  }
-  const StyleOffsetRotation& OffsetRotate() const { return OffsetRotation(); }
-  void SetOffsetRotate(const StyleOffsetRotation& offset_rotate) {
-    SetOffsetRotation(offset_rotate);
-  }
-
-  // offset-rotation
-  static StyleOffsetRotation InitialOffsetRotation() {
     return StyleOffsetRotation(0, kOffsetRotationAuto);
   }
-  const StyleOffsetRotation& OffsetRotation() const {
+  const StyleOffsetRotation& OffsetRotate() const {
     return rare_non_inherited_data_->transform_->motion_.rotation_;
   }
-  void SetOffsetRotation(const StyleOffsetRotation& offset_rotation) {
+  void SetOffsetRotate(const StyleOffsetRotation& offset_rotate) {
     SET_NESTED_VAR(rare_non_inherited_data_, transform_, motion_.rotation_,
-                   offset_rotation);
+                   offset_rotate);
   }
 
   // opacity (aka -webkit-opacity)
diff --git a/third_party/WebKit/Source/core/style/StyleTransformData.cpp b/third_party/WebKit/Source/core/style/StyleTransformData.cpp
index 3cd7e6bd..0d13e536 100644
--- a/third_party/WebKit/Source/core/style/StyleTransformData.cpp
+++ b/third_party/WebKit/Source/core/style/StyleTransformData.cpp
@@ -33,7 +33,7 @@
               ComputedStyle::InitialOffsetPosition(),
               nullptr,
               ComputedStyle::InitialOffsetDistance(),
-              ComputedStyle::InitialOffsetRotation()),
+              ComputedStyle::InitialOffsetRotate()),
       translate_(ComputedStyle::InitialTranslate()),
       rotate_(ComputedStyle::InitialRotate()),
       scale_(ComputedStyle::InitialScale()) {}
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
index 2823ceb..318f289 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -262,14 +262,6 @@
       status: "experimental",
     },
     {
-      name: "CSSOffsetRotate",
-      status: "stable",
-    },
-    {
-      name: "CSSOffsetRotation",
-      status: "stable",
-    },
-    {
       name: "CSSOMSmoothScroll",
       status: "experimental",
     },
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder.py
index 7b4a97c2..c83f15d8 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/webkit_finder.py
@@ -105,10 +105,9 @@
             self._chromium_base = self._filesystem.dirname(self._filesystem.dirname(self.webkit_base()))
         return self._chromium_base
 
-    # TODO(tkent): Make this private. We should use functions for
-    # sub-directories in order to make the code robust against directory
-    # structure changes.
-    def path_from_webkit_base(self, *comps):
+    # Do not expose this function in order to make the code robust against
+    # directory structure changes.
+    def _path_from_webkit_base(self, *comps):
         return self._filesystem.join(self.webkit_base(), *comps)
 
     def path_from_chromium_base(self, *comps):
@@ -117,23 +116,17 @@
     def path_from_blink_source(self, *comps):
         return self._filesystem.join(self._filesystem.join(self.webkit_base(), 'Source'), *comps)
 
-    def path_to_script(self, script_name):
-        """Returns the relative path to the script from the top of the WebKit tree."""
-        # This is intentionally relative in order to force callers to consider what
-        # their current working directory is (and change to the top of the tree if necessary).
-        return self._filesystem.join('Tools', 'Scripts', script_name)
-
     def path_from_tools_scripts(self, *comps):
         return self._filesystem.join(self._filesystem.join(self.webkit_base(), 'Tools', 'Scripts'), *comps)
 
     def layout_tests_dir(self):
-        return self.path_from_webkit_base('LayoutTests')
+        return self._path_from_webkit_base('LayoutTests')
 
     def path_from_layout_tests(self, *comps):
         return self._filesystem.join(self.layout_tests_dir(), *comps)
 
     def perf_tests_dir(self):
-        return self.path_from_webkit_base('PerformanceTests')
+        return self._path_from_webkit_base('PerformanceTests')
 
     def layout_test_name(self, file_path):
         """Returns a layout test name, given the path from the repo root.
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
index e8a09100..63b3915 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
@@ -877,9 +877,6 @@
     def path_from_chromium_base(self, *comps):
         return self._webkit_finder.path_from_chromium_base(*comps)
 
-    def path_to_script(self, script_name):
-        return self._webkit_finder.path_to_script(script_name)
-
     def layout_tests_dir(self):
         custom_layout_tests_dir = self.get_option('layout_tests_directory')
         if custom_layout_tests_dir:
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py
index 475be32..5f78cca 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py
@@ -88,7 +88,7 @@
             sys.executable,
             wkf.path_from_depot_tools_base('pylint.py'),
             '--output-format=parseable',
-            '--rcfile=' + wkf.path_from_webkit_base('Tools', 'Scripts', 'webkitpy', 'pylintrc'),
+            '--rcfile=' + wkf.path_from_tools_scripts('webkitpy', 'pylintrc'),
             path,
         ], env=env, error_handler=executive.ignore_error)
 
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py
index 5fedc8a..4cbfd76 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py
@@ -60,7 +60,6 @@
 
         self.filesystem = self.host.filesystem
         self.webkit_finder = WebKitFinder(self.filesystem)
-        self._webkit_root = self.webkit_finder.webkit_base()
         self.layout_tests_dir = self.webkit_finder.layout_tests_dir()
         self.destination_directory = self.filesystem.normpath(
             self.filesystem.join(
@@ -168,12 +167,8 @@
             if not self.filesystem.exists(dest_dir):
                 self.filesystem.maybe_make_directory(dest_dir)
 
-            copied_files = []
-
             for file_to_copy in dir_to_copy['copy_list']:
-                copied_file = self.copy_file(file_to_copy, dest_dir)
-                if copied_file:
-                    copied_files.append(copied_file)
+                self.copy_file(file_to_copy, dest_dir)
 
         _log.info('')
         _log.info('Import complete')
@@ -195,20 +190,17 @@
                     "destination": File name of the destination file.
                 And possibly also the keys "reference_support_info" or "is_jstest".
             dest_dir: Path to the directory where the file should be copied.
-
-        Returns:
-            The path to the new file, relative to the Blink root (//third_party/WebKit).
         """
         source_path = self.filesystem.normpath(file_to_copy['src'])
         dest_path = self.filesystem.join(dest_dir, file_to_copy['dest'])
 
         if self.filesystem.isdir(source_path):
             _log.error('%s refers to a directory', source_path)
-            return None
+            return
 
         if not self.filesystem.exists(source_path):
             _log.error('%s not found. Possible error in the test.', source_path)
-            return None
+            return
 
         if not self.filesystem.exists(self.filesystem.dirname(dest_path)):
             if not self.import_in_place:
@@ -224,5 +216,3 @@
             self.filesystem.copyfile(source_path, dest_path)
             if self.filesystem.read_binary_file(source_path)[:2] == '#!':
                 self.filesystem.make_executable(dest_path)
-
-        return dest_path.replace(self._webkit_root, '')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
index a77e180d1..7259d9e0 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -230,7 +230,7 @@
         test_copier = TestCopier(self.host, temp_repo_path)
         test_copier.do_import()
 
-        self.run(['git', 'add', '--all', 'LayoutTests/external/%s' % dest_dir_name])
+        self.run(['git', 'add', '--all', 'external/%s' % dest_dir_name])
 
         self._delete_orphaned_baselines(dest_path)
 
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py
index 13580bb..ea47086 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_expectations_updater.py
@@ -404,8 +404,7 @@
         for test in tests_to_rebaseline:
             _log.info('  %s', test)
         if tests_to_rebaseline:
-            webkit_patch = self.host.filesystem.join(
-                self.finder.chromium_base(), self.finder.webkit_base(), self.finder.path_to_script('webkit-patch'))
+            webkit_patch = self.finder.path_from_tools_scripts('webkit-patch')
             self.host.executive.run_command([
                 'python',
                 webkit_patch,