diff --git a/DEPS b/DEPS
index 95a68bb..412e560 100644
--- a/DEPS
+++ b/DEPS
@@ -40,7 +40,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '6d11ed2951fadc281433606a8edc6774bed39735',
+  'skia_revision': '5ce33efa7c91a638c0dc94f539c9597a954fd529',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
index 856bb1a..19c5d71 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -305,6 +305,8 @@
 }
 
 GURL GetWelcomePageURL() {
+  // Record that the Welcome page was added to the startup url list.
+  UMA_HISTOGRAM_BOOLEAN("Welcome.Win10.OriginalPromoPageAdded", true);
   return GURL(l10n_util::GetStringUTF8(IDS_WELCOME_PAGE_URL));
 }
 
diff --git a/chrome/browser/ui/startup/startup_tab_provider.cc b/chrome/browser/ui/startup/startup_tab_provider.cc
index 255a3c7..70da7e3 100644
--- a/chrome/browser/ui/startup/startup_tab_provider.cc
+++ b/chrome/browser/ui/startup/startup_tab_provider.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/startup/startup_tab_provider.h"
 
+#include "base/metrics/histogram_macros.h"
 #include "build/build_config.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/profile_resetter/triggered_profile_resetter.h"
@@ -230,6 +231,8 @@
 
 // static
 GURL StartupTabProviderImpl::GetWelcomePageUrl(bool use_later_run_variant) {
+  // Record that the Welcome page was added to the startup url list.
+  UMA_HISTOGRAM_BOOLEAN("Welcome.Win10.NewPromoPageAdded", true);
   GURL url(chrome::kChromeUIWelcomeURL);
   return use_later_run_variant
              ? net::AppendQueryParameter(url, "variant", "everywhere")
diff --git a/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-api.html b/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-api.html
new file mode 100644
index 0000000..dba13f75
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-api.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>Tests for color-gamut media query</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script>
+test(function() {
+  assert_true(window.matchMedia("(color-gamut)").matches);
+}, "Test that color-gamut can be feature detected");
+
+test(function() {
+  assert_false(window.matchMedia("(color-gamut: foobar)").matches);
+}, "Test that unknown values are rejected");
+
+async_test(t => {
+  assert_true('testRunner' in window);
+
+  testRunner.setColorProfile('sRGB', t.step_func(() => {
+    assert_true(window.matchMedia("(color-gamut: srgb)").matches);
+    assert_false(window.matchMedia("(color-gamut: p3)").matches);
+    assert_false(window.matchMedia("(color-gamut: rec2020)").matches);
+
+    testRunner.setColorProfile('colorSpin', t.step_func(() => {
+      assert_true(window.matchMedia("(color-gamut: srgb)").matches);
+      assert_false(window.matchMedia("(color-gamut: p3)").matches);
+      assert_false(window.matchMedia("(color-gamut: rec2020)").matches);
+
+      testRunner.setColorProfile('adobeRGB', t.step_func_done(() => {
+        assert_true(window.matchMedia("(color-gamut: srgb)").matches);
+        assert_true(window.matchMedia("(color-gamut: p3)").matches);
+        assert_false(window.matchMedia("(color-gamut: rec2020)").matches);
+      }));
+    }));
+  }));
+}, "Test API with various color profile");
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-picture-expected.html b/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-picture-expected.html
new file mode 100644
index 0000000..1a35778
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-picture-expected.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<picture>
+  <img src='resources/apple_logo_big.jpg'>
+</picture>
diff --git a/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-picture.html b/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-picture.html
new file mode 100644
index 0000000..e62f040
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/media/mq-color-gamut-picture.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<title>Tests for color-gamut media query with picture</title>
+<script>
+testRunner.setColorProfile('adobeRGB', () => {});
+</script>
+<picture>
+  <source media="(color-gamut: p3)" srcset="resources/apple_logo_big.jpg">
+  <img src="resources/apple_logo_half_size.jpg">
+</picture>
diff --git a/third_party/WebKit/Source/core/css/CSSValueKeywords.json5 b/third_party/WebKit/Source/core/css/CSSValueKeywords.json5
index 320818c..b82eac0 100644
--- a/third_party/WebKit/Source/core/css/CSSValueKeywords.json5
+++ b/third_party/WebKit/Source/core/css/CSSValueKeywords.json5
@@ -1122,5 +1122,9 @@
     // rect
     // round
 
+    // color-gamut
+    // srgb
+    "p3",
+    "rec2020",
   ],
 }
diff --git a/third_party/WebKit/Source/core/css/MediaFeatureNames.json5 b/third_party/WebKit/Source/core/css/MediaFeatureNames.json5
index 37419e7..5f06821 100644
--- a/third_party/WebKit/Source/core/css/MediaFeatureNames.json5
+++ b/third_party/WebKit/Source/core/css/MediaFeatureNames.json5
@@ -9,6 +9,7 @@
     "any-pointer",
     "color",
     "color-index",
+    "color-gamut",
     "grid",
     "monochrome",
     "height",
diff --git a/third_party/WebKit/Source/core/css/MediaQueryEvaluator.cpp b/third_party/WebKit/Source/core/css/MediaQueryEvaluator.cpp
index 5d3f0b3b..ce9cbea0 100644
--- a/third_party/WebKit/Source/core/css/MediaQueryEvaluator.cpp
+++ b/third_party/WebKit/Source/core/css/MediaQueryEvaluator.cpp
@@ -51,6 +51,7 @@
 #include "core/style/ComputedStyle.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/geometry/FloatRect.h"
+#include "platform/graphics/ColorSpace.h"
 #include "public/platform/PointerProperties.h"
 #include "public/platform/ShapeProperties.h"
 #include "public/platform/WebDisplayMode.h"
@@ -753,6 +754,48 @@
   return (value.id == CSSValueProgressive);
 }
 
+static bool colorGamutMediaFeatureEval(const MediaQueryExpValue& value,
+                                       MediaFeaturePrefix,
+                                       const MediaValues& mediaValues) {
+  // isValid() is false if there is no parameter. Without parameter we should
+  // return true to indicate that colorGamutMediaFeature is enabled in the
+  // browser.
+  if (!value.isValid())
+    return true;
+
+  if (!value.isID)
+    return false;
+
+  DCHECK(value.id == CSSValueSRGB || value.id == CSSValueP3 ||
+         value.id == CSSValueRec2020);
+
+  ColorSpaceGamut gamut = mediaValues.colorGamut();
+  switch (gamut) {
+    case ColorSpaceGamut::Unknown:
+    case ColorSpaceGamut::LessThanNTSC:
+    case ColorSpaceGamut::NTSC:
+    case ColorSpaceGamut::SRGB:
+      return value.id == CSSValueSRGB;
+    case ColorSpaceGamut::AlmostP3:
+    case ColorSpaceGamut::P3:
+    case ColorSpaceGamut::AdobeRGB:
+    case ColorSpaceGamut::Wide:
+      return value.id == CSSValueSRGB || value.id == CSSValueP3;
+    case ColorSpaceGamut::BT2020:
+    case ColorSpaceGamut::ProPhoto:
+    case ColorSpaceGamut::UltraWide:
+      return value.id == CSSValueSRGB || value.id == CSSValueP3 ||
+             value.id == CSSValueRec2020;
+    case ColorSpaceGamut::End:
+      NOTREACHED();
+      return false;
+  }
+
+  // This is for some compilers that do not understand that it can't be reached.
+  NOTREACHED();
+  return false;
+}
+
 void MediaQueryEvaluator::init() {
   // Create the table.
   gFunctionMap = new FunctionMap;
diff --git a/third_party/WebKit/Source/core/css/MediaQueryExp.cpp b/third_party/WebKit/Source/core/css/MediaQueryExp.cpp
index d41baa58..ada0478 100644
--- a/third_party/WebKit/Source/core/css/MediaQueryExp.cpp
+++ b/third_party/WebKit/Source/core/css/MediaQueryExp.cpp
@@ -65,6 +65,12 @@
     if (mediaFeature == shapeMediaFeature)
       return ident == CSSValueRect || ident == CSSValueRound;
   }
+
+  if (mediaFeature == colorGamutMediaFeature) {
+    return ident == CSSValueSRGB || ident == CSSValueP3 ||
+           ident == CSSValueRec2020;
+  }
+
   return false;
 }
 
@@ -168,7 +174,9 @@
          mediaFeature == devicePixelRatioMediaFeature ||
          mediaFeature == resolutionMediaFeature ||
          mediaFeature == displayModeMediaFeature ||
-         mediaFeature == scanMediaFeature || mediaFeature == shapeMediaFeature;
+         mediaFeature == scanMediaFeature ||
+         mediaFeature == shapeMediaFeature ||
+         mediaFeature == colorGamutMediaFeature;
 }
 
 bool MediaQueryExp::isViewportDependent() const {
diff --git a/third_party/WebKit/Source/core/css/MediaValues.cpp b/third_party/WebKit/Source/core/css/MediaValues.cpp
index 75e9f8d3..5ac7d79 100644
--- a/third_party/WebKit/Source/core/css/MediaValues.cpp
+++ b/third_party/WebKit/Source/core/css/MediaValues.cpp
@@ -20,6 +20,7 @@
 #include "core/page/ChromeClient.h"
 #include "core/page/Page.h"
 #include "core/style/ComputedStyle.h"
+#include "platform/graphics/ColorSpace.h"
 #include "public/platform/WebScreenInfo.h"
 
 namespace blink {
@@ -145,6 +146,12 @@
   return frame->host()->chromeClient().screenInfo().displayShape;
 }
 
+ColorSpaceGamut MediaValues::calculateColorGamut(LocalFrame* frame) {
+  DCHECK(frame && frame->host());
+  return ColorSpaceUtilities::getColorSpaceGamut(
+      frame->host()->chromeClient().screenInfo());
+}
+
 bool MediaValues::computeLengthImpl(double value,
                                     CSSPrimitiveValue::UnitType type,
                                     unsigned defaultFontSize,
diff --git a/third_party/WebKit/Source/core/css/MediaValues.h b/third_party/WebKit/Source/core/css/MediaValues.h
index 6195ace..26039d78 100644
--- a/third_party/WebKit/Source/core/css/MediaValues.h
+++ b/third_party/WebKit/Source/core/css/MediaValues.h
@@ -17,6 +17,7 @@
 class Document;
 class CSSPrimitiveValue;
 class LocalFrame;
+enum class ColorSpaceGamut;
 
 class CORE_EXPORT MediaValues : public GarbageCollectedFinalized<MediaValues> {
  public:
@@ -73,6 +74,7 @@
 
   virtual void overrideViewportDimensions(double width, double height) = 0;
   virtual DisplayShape displayShape() const = 0;
+  virtual ColorSpaceGamut colorGamut() const = 0;
 
  protected:
   static double calculateViewportWidth(LocalFrame*);
@@ -92,6 +94,7 @@
   static HoverType calculatePrimaryHoverType(LocalFrame*);
   static int calculateAvailableHoverTypes(LocalFrame*);
   static DisplayShape calculateDisplayShape(LocalFrame*);
+  static ColorSpaceGamut calculateColorGamut(LocalFrame*);
   static LocalFrame* frameFrom(Document&);
 };
 
diff --git a/third_party/WebKit/Source/core/css/MediaValuesCached.cpp b/third_party/WebKit/Source/core/css/MediaValuesCached.cpp
index c7cc9e07..604177d 100644
--- a/third_party/WebKit/Source/core/css/MediaValuesCached.cpp
+++ b/third_party/WebKit/Source/core/css/MediaValuesCached.cpp
@@ -9,9 +9,29 @@
 #include "core/frame/LocalFrame.h"
 #include "core/layout/LayoutObject.h"
 #include "core/layout/api/LayoutViewItem.h"
+#include "platform/graphics/ColorSpace.h"
 
 namespace blink {
 
+MediaValuesCached::MediaValuesCachedData::MediaValuesCachedData()
+    : viewportWidth(0),
+      viewportHeight(0),
+      deviceWidth(0),
+      deviceHeight(0),
+      devicePixelRatio(1.0),
+      colorBitsPerComponent(24),
+      monochromeBitsPerComponent(0),
+      primaryPointerType(PointerTypeNone),
+      availablePointerTypes(PointerTypeNone),
+      primaryHoverType(HoverTypeNone),
+      availableHoverTypes(HoverTypeNone),
+      defaultFontSize(16),
+      threeDEnabled(false),
+      strictMode(true),
+      displayMode(WebDisplayModeBrowser),
+      displayShape(DisplayShapeRect),
+      colorGamut(ColorSpaceGamut::Unknown) {}
+
 MediaValuesCached::MediaValuesCachedData::MediaValuesCachedData(
     Document& document)
     : MediaValuesCached::MediaValuesCachedData() {
@@ -44,6 +64,7 @@
     displayMode = MediaValues::calculateDisplayMode(frame);
     mediaType = MediaValues::calculateMediaType(frame);
     displayShape = MediaValues::calculateDisplayShape(frame);
+    colorGamut = MediaValues::calculateColorGamut(frame);
   }
 }
 
@@ -159,4 +180,8 @@
   return m_data.displayShape;
 }
 
+ColorSpaceGamut MediaValuesCached::colorGamut() const {
+  return m_data.colorGamut;
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/css/MediaValuesCached.h b/third_party/WebKit/Source/core/css/MediaValuesCached.h
index fa042b4..cb33d55 100644
--- a/third_party/WebKit/Source/core/css/MediaValuesCached.h
+++ b/third_party/WebKit/Source/core/css/MediaValuesCached.h
@@ -13,7 +13,7 @@
 
 class CORE_EXPORT MediaValuesCached final : public MediaValues {
  public:
-  struct MediaValuesCachedData final {
+  struct CORE_EXPORT MediaValuesCachedData final {
     DISALLOW_NEW();
     // Members variables must be thread safe, since they're copied to the parser
     // thread
@@ -34,25 +34,9 @@
     String mediaType;
     WebDisplayMode displayMode;
     DisplayShape displayShape;
+    ColorSpaceGamut colorGamut;
 
-    MediaValuesCachedData()
-        : viewportWidth(0),
-          viewportHeight(0),
-          deviceWidth(0),
-          deviceHeight(0),
-          devicePixelRatio(1.0),
-          colorBitsPerComponent(24),
-          monochromeBitsPerComponent(0),
-          primaryPointerType(PointerTypeNone),
-          availablePointerTypes(PointerTypeNone),
-          primaryHoverType(HoverTypeNone),
-          availableHoverTypes(HoverTypeNone),
-          defaultFontSize(16),
-          threeDEnabled(false),
-          strictMode(true),
-          displayMode(WebDisplayModeBrowser),
-          displayShape(DisplayShapeRect) {}
-
+    MediaValuesCachedData();
     explicit MediaValuesCachedData(Document&);
 
     MediaValuesCachedData deepCopy() const {
@@ -74,6 +58,7 @@
       data.mediaType = mediaType.isolatedCopy();
       data.displayMode = displayMode;
       data.displayShape = displayShape;
+      data.colorGamut = colorGamut;
       return data;
     }
   };
@@ -106,6 +91,7 @@
   const String mediaType() const override;
   WebDisplayMode displayMode() const override;
   DisplayShape displayShape() const override;
+  ColorSpaceGamut colorGamut() const override;
 
   void overrideViewportDimensions(double width, double height) override;
 
diff --git a/third_party/WebKit/Source/core/css/MediaValuesDynamic.cpp b/third_party/WebKit/Source/core/css/MediaValuesDynamic.cpp
index 99a9345c..57eef49 100644
--- a/third_party/WebKit/Source/core/css/MediaValuesDynamic.cpp
+++ b/third_party/WebKit/Source/core/css/MediaValuesDynamic.cpp
@@ -136,6 +136,10 @@
   return calculateDisplayShape(m_frame);
 }
 
+ColorSpaceGamut MediaValuesDynamic::colorGamut() const {
+  return calculateColorGamut(m_frame);
+}
+
 Document* MediaValuesDynamic::document() const {
   return m_frame->document();
 }
diff --git a/third_party/WebKit/Source/core/css/MediaValuesDynamic.h b/third_party/WebKit/Source/core/css/MediaValuesDynamic.h
index d5686a2..88e72a69 100644
--- a/third_party/WebKit/Source/core/css/MediaValuesDynamic.h
+++ b/third_party/WebKit/Source/core/css/MediaValuesDynamic.h
@@ -39,6 +39,7 @@
   const String mediaType() const override;
   WebDisplayMode displayMode() const override;
   DisplayShape displayShape() const override;
+  ColorSpaceGamut colorGamut() const override;
   Document* document() const override;
   bool hasValues() const override;
   void overrideViewportDimensions(double width, double height) override;
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.cpp b/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.cpp
index 568c414..0061d5dc 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.cpp
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.cpp
@@ -5,7 +5,7 @@
 #include "platform/graphics/BitmapImageMetrics.h"
 
 #include "platform/Histogram.h"
-#include "third_party/skia/include/core/SkColorSpaceXform.h"
+#include "platform/graphics/ColorSpace.h"
 #include "wtf/Threading.h"
 #include "wtf/text/WTFString.h"
 
@@ -51,8 +51,10 @@
 
   DEFINE_THREAD_SAFE_STATIC_LOCAL(
       EnumerationHistogram, gamutNamedHistogram,
-      new EnumerationHistogram("Blink.ColorGamut.Source", GamutEnd));
-  gamutNamedHistogram.count(getColorSpaceGamut(colorSpace));
+      new EnumerationHistogram("Blink.ColorGamut.Source",
+                               static_cast<int>(ColorSpaceGamut::End)));
+  gamutNamedHistogram.count(
+      static_cast<int>(ColorSpaceUtilities::getColorSpaceGamut(colorSpace)));
 }
 
 void BitmapImageMetrics::countOutputGammaAndGamut(SkColorSpace* colorSpace) {
@@ -63,8 +65,10 @@
 
   DEFINE_THREAD_SAFE_STATIC_LOCAL(
       EnumerationHistogram, gamutNamedHistogram,
-      new EnumerationHistogram("Blink.ColorGamut.Destination", GamutEnd));
-  gamutNamedHistogram.count(getColorSpaceGamut(colorSpace));
+      new EnumerationHistogram("Blink.ColorGamut.Destination",
+                               static_cast<int>(ColorSpaceGamut::End)));
+  gamutNamedHistogram.count(
+      static_cast<int>(ColorSpaceUtilities::getColorSpaceGamut(colorSpace)));
 }
 
 BitmapImageMetrics::Gamma BitmapImageMetrics::getColorSpaceGamma(
@@ -82,49 +86,4 @@
   return gamma;
 }
 
-BitmapImageMetrics::Gamut BitmapImageMetrics::getColorSpaceGamut(
-    SkColorSpace* colorSpace) {
-  sk_sp<SkColorSpace> scRGB(
-      SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named));
-  std::unique_ptr<SkColorSpaceXform> transform(
-      SkColorSpaceXform::New(colorSpace, scRGB.get()));
-
-  if (!transform)
-    return GamutUnknown;
-
-  unsigned char in[3][4];
-  float out[3][4];
-  memset(in, 0, sizeof(in));
-  in[0][0] = 255;
-  in[1][1] = 255;
-  in[2][2] = 255;
-  in[0][3] = 255;
-  in[1][3] = 255;
-  in[2][3] = 255;
-  transform->apply(SkColorSpaceXform::kRGBA_F32_ColorFormat, out,
-                   SkColorSpaceXform::kRGBA_8888_ColorFormat, in, 3,
-                   kOpaque_SkAlphaType);
-  float score = out[0][0] * out[1][1] * out[2][2];
-
-  if (score < 0.9)
-    return GamutLessThanNTSC;
-  if (score < 0.95)
-    return GamutNTSC;  // actual score 0.912839
-  if (score < 1.1)
-    return GamutSRGB;  // actual score 1.0
-  if (score < 1.3)
-    return GamutAlmostP3;
-  if (score < 1.425)
-    return GamutP3;  // actual score 1.401899
-  if (score < 1.5)
-    return GamutAdobeRGB;  // actual score 1.458385
-  if (score < 2.0)
-    return GamutWide;
-  if (score < 2.2)
-    return GamutBT2020;  // actual score 2.104520
-  if (score < 2.7)
-    return GamutProPhoto;  // actual score 2.913247
-  return GamutUltraWide;
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.h b/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.h
index 32c5f73..79fe549 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.h
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImageMetrics.h
@@ -46,22 +46,6 @@
     GammaEnd = GammaNamed + 1,
   };
 
-  enum Gamut {
-    // Values synced with 'Gamut' in src/tools/metrics/histograms/histograms.xml
-    GamutUnknown = 0,
-    GamutLessThanNTSC = 1,
-    GamutNTSC = 2,
-    GamutSRGB = 3,
-    GamutAlmostP3 = 4,
-    GamutP3 = 5,
-    GamutAdobeRGB = 6,
-    GamutWide = 7,
-    GamutBT2020 = 8,
-    GamutProPhoto = 9,
-    GamutUltraWide = 10,
-    GamutEnd
-  };
-
   static void countDecodedImageType(const String& type);
   static void countImageOrientation(const ImageOrientationEnum);
   static void countImageGammaAndGamut(SkColorSpace*);
@@ -69,7 +53,6 @@
 
  private:
   static Gamma getColorSpaceGamma(SkColorSpace*);
-  static Gamut getColorSpaceGamut(SkColorSpace*);
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/ColorSpace.cpp b/third_party/WebKit/Source/platform/graphics/ColorSpace.cpp
index 423da80..4b2694c 100644
--- a/third_party/WebKit/Source/platform/graphics/ColorSpace.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ColorSpace.cpp
@@ -33,6 +33,8 @@
 #include "platform/graphics/ColorSpace.h"
 
 #include "platform/graphics/skia/SkiaUtils.h"
+#include "public/platform/WebScreenInfo.h"
+#include "third_party/skia/include/core/SkColorSpaceXform.h"
 #include "third_party/skia/include/effects/SkTableColorFilter.h"
 #include "wtf/MathExtras.h"
 #include <algorithm>
@@ -116,6 +118,59 @@
   return SkTableColorFilter::MakeARGB(0, lookupTable, lookupTable, lookupTable);
 }
 
+ColorSpaceGamut getColorSpaceGamut(const WebScreenInfo& screenInfo) {
+  const gfx::ICCProfile& profile = screenInfo.iccProfile;
+  if (profile == gfx::ICCProfile())
+    return ColorSpaceGamut::Unknown;
+
+  return ColorSpaceUtilities::getColorSpaceGamut(
+      profile.GetColorSpace().ToSkColorSpace().get());
+}
+
+ColorSpaceGamut getColorSpaceGamut(SkColorSpace* colorSpace) {
+  sk_sp<SkColorSpace> scRGB(
+      SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named));
+  std::unique_ptr<SkColorSpaceXform> transform(
+      SkColorSpaceXform::New(colorSpace, scRGB.get()));
+
+  if (!transform)
+    return ColorSpaceGamut::Unknown;
+
+  unsigned char in[3][4];
+  float out[3][4];
+  memset(in, 0, sizeof(in));
+  in[0][0] = 255;
+  in[1][1] = 255;
+  in[2][2] = 255;
+  in[0][3] = 255;
+  in[1][3] = 255;
+  in[2][3] = 255;
+  transform->apply(SkColorSpaceXform::kRGBA_F32_ColorFormat, out,
+                   SkColorSpaceXform::kRGBA_8888_ColorFormat, in, 3,
+                   kOpaque_SkAlphaType);
+  float score = out[0][0] * out[1][1] * out[2][2];
+
+  if (score < 0.9)
+    return ColorSpaceGamut::LessThanNTSC;
+  if (score < 0.95)
+    return ColorSpaceGamut::NTSC;  // actual score 0.912839
+  if (score < 1.1)
+    return ColorSpaceGamut::SRGB;  // actual score 1.0
+  if (score < 1.3)
+    return ColorSpaceGamut::AlmostP3;
+  if (score < 1.425)
+    return ColorSpaceGamut::P3;  // actual score 1.401899
+  if (score < 1.5)
+    return ColorSpaceGamut::AdobeRGB;  // actual score 1.458385
+  if (score < 2.0)
+    return ColorSpaceGamut::Wide;
+  if (score < 2.2)
+    return ColorSpaceGamut::BT2020;  // actual score 2.104520
+  if (score < 2.7)
+    return ColorSpaceGamut::ProPhoto;  // actual score 2.913247
+  return ColorSpaceGamut::UltraWide;
+}
+
 }  // namespace ColorSpaceUtilities
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/ColorSpace.h b/third_party/WebKit/Source/platform/graphics/ColorSpace.h
index 43570f17..96726263 100644
--- a/third_party/WebKit/Source/platform/graphics/ColorSpace.h
+++ b/third_party/WebKit/Source/platform/graphics/ColorSpace.h
@@ -31,11 +31,30 @@
 #include "third_party/skia/include/core/SkRefCnt.h"
 
 class SkColorFilter;
+class SkColorSpace;
 
 namespace blink {
 
+struct WebScreenInfo;
+
 enum ColorSpace { ColorSpaceDeviceRGB, ColorSpaceSRGB, ColorSpaceLinearRGB };
 
+enum class ColorSpaceGamut {
+  // Values synced with 'Gamut' in src/tools/metrics/histograms/histograms.xml
+  Unknown = 0,
+  LessThanNTSC = 1,
+  NTSC = 2,
+  SRGB = 3,
+  AlmostP3 = 4,
+  P3 = 5,
+  AdobeRGB = 6,
+  Wide = 7,
+  BT2020 = 8,
+  ProPhoto = 9,
+  UltraWide = 10,
+  End
+};
+
 namespace ColorSpaceUtilities {
 
 // Get a pointer to a 8-bit lookup table that will convert color components
@@ -57,6 +76,9 @@
 sk_sp<SkColorFilter> createColorSpaceFilter(ColorSpace srcColorSpace,
                                             ColorSpace dstColorSpace);
 
+PLATFORM_EXPORT ColorSpaceGamut getColorSpaceGamut(const WebScreenInfo&);
+ColorSpaceGamut getColorSpaceGamut(SkColorSpace*);
+
 }  // namespace ColorSpaceUtilities
 
 }  // namespace blink
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 a3b32e6..46d271a 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -82,14 +82,12 @@
                 for commit in commits:
                     _log.error('  https://chromium.googlesource.com/chromium/src/+/%s', commit.sha)
                 _log.error('Aborting import to prevent clobbering these commits.')
-                if not options.keep_w3c_repos_around:
-                    self.clean_up_temp_repo(temp_repo_path)
+                self.clean_up_temp_repo(temp_repo_path)
                 return 1
 
-        import_commit = self.update(dest_dir_name, temp_repo_path, options.keep_w3c_repos_around, options.revision)
+        import_commit = self.update(dest_dir_name, temp_repo_path, options.revision)
 
-        if not options.keep_w3c_repos_around:
-            self.clean_up_temp_repo(temp_repo_path)
+        self.clean_up_temp_repo(temp_repo_path)
 
         if options.target == 'wpt':
             self._copy_resources()
@@ -116,8 +114,6 @@
                             help='log what we are doing')
         parser.add_argument('--allow-local-commits', action='store_true',
                             help='allow script to run even if we have local commits')
-        parser.add_argument('--keep-w3c-repos-around', action='store_true',
-                            help='leave the w3c repos around that were imported previously.')
         parser.add_argument('-r', dest='revision', action='store',
                             help='Target revision.')
         parser.add_argument('target', choices=['css', 'wpt'],
@@ -204,13 +200,12 @@
         self.run([manifest_command, '--work', '--tests-root', dest_path])
         self.run(['git', 'add', self.fs.join(dest_path, 'MANIFEST.json')])
 
-    def update(self, dest_dir_name, temp_repo_path, keep_w3c_repos_around, revision):
+    def update(self, dest_dir_name, temp_repo_path, revision):
         """Updates an imported repository.
 
         Args:
             dest_dir_name: The destination directory name.
             temp_repo_path: Path to local checkout of W3C test repo.
-            keep_w3c_repos_around: If True, the temp directory won't be cleaned up.
             revision: A W3C test repo commit hash, or None.
 
         Returns:
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index f04d27b9e..32d7f49e 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -76658,6 +76658,24 @@
   </summary>
 </histogram>
 
+<histogram name="Welcome.Win10.NewPromoPageAdded" enum="BooleanShown">
+  <owner>tmartino@chromium.org</owner>
+  <summary>
+    Records whether or not the revamped WebUI-based welcome page was added to
+    the startup tabs list. This means there is a good chance it was shown to the
+    user.
+  </summary>
+</histogram>
+
+<histogram name="Welcome.Win10.OriginalPromoPageAdded" enum="BooleanShown">
+  <owner>tmartino@chromium.org</owner>
+  <summary>
+    Records whether or not the old external welcome page was added to the
+    startup tabs list. This means there is a good chance it was shown to the
+    user.
+  </summary>
+</histogram>
+
 <histogram name="Welcome.Win10.PinnedPromptResult" enum="BooleanPinned">
   <owner>tmartino@chromium.org</owner>
   <summary>